• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Video
2
3视频播放组件。
4
5>  **说明:**
6>
7>  该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8
9## 需要权限
10
11使用网络视频时,需要申请权限ohos.permission.INTERNET。具体申请方式请参考[权限申请声明](../../security/accesstoken-guidelines.md)。
12
13## 子组件
14
15不支持子组件。
16
17
18## 接口
19
20Video(value: {src?: string | Resource, currentProgressRate?: number | string | PlaybackSpeed, previewUri?: string | PixelMap | Resource, controller?: VideoController})
21
22**参数:**
23
24| 参数名                 | 参数类型                                     | 必填   | 默认值                                      | 参数描述                                     |
25| ------------------- | ---------------------------------------- | ---- | ---------------------------------------- | ---------------------------------------- |
26| src                 | string \| [Resource](ts-types.md#resource) | 否    | -                                        | 视频播放源的路径,支持本地视频路径和网络路径。<br>支持在resources下面的video或rawfile文件夹里放置媒体资源。<br>支持dataability://的路径前缀,用于访问通过Data Ability提供的视频路径,具体路径信息详见[Data Ability说明](../../ability/fa-dataability.md)。 |
27| currentProgressRate | number&nbsp;\|&nbsp;PlaybackSpeed<sup>8+</sup> | 否    | 1.0&nbsp;\|&nbsp;PlaybackSpeed.<br>Speed_Forward_1_00_X | 视频播放倍速。<br/>>&nbsp;&nbsp;**说明:**<br/>>&nbsp;number取值仅支持:0.75,1.0,1.25,1.75,2.0。<br/> |
28| previewUri          | string&nbsp;\|&nbsp;PixelMap<sup>8+</sup>&nbsp;\|&nbsp;[Resource](ts-types.md#resource) | 否    | -                                        | 预览图片的路径。                                 |
29| controller          | [VideoController](#videocontroller)      | 否    | -                                        | 控制器。                                     |
30
31## PlaybackSpeed<sup>8+</sup>类型接口说明
32
33| 名称                   | 描述        |
34| -------------------- | --------- |
35| Speed_Forward_0_75_X | 0.75倍速播放。 |
36| Speed_Forward_1_00_X | 1倍速播放。    |
37| Speed_Forward_1_25_X | 1.25倍速播放。 |
38| Speed_Forward_1_75_X | 1.75倍速播放。 |
39| Speed_Forward_2_00_X | 2倍速播放。    |
40
41
42## 属性
43
44| 名称        | 参数类型                                     | 默认值   | 描述              |
45| --------- | ---------------------------------------- | ----- | --------------- |
46| muted     | boolean                                  | false | 是否静音。           |
47| autoPlay  | boolean                                  | false | 是否自动播放。         |
48| controls  | boolean                                  | true  | 控制视频播放的控制栏是否显示。 |
49| objectFit | [ImageFit](ts-appendix-enums.md#imagefit) | Cover | 设置视频显示模式。       |
50| loop      | boolean                                  | false | 是否单个视频循环播放。     |
51
52
53## 事件
54
55| 名称                                       | 功能描述                                     |
56| ---------------------------------------- | ---------------------------------------- |
57| onStart(event:()&nbsp;=&gt;&nbsp;void)   | 播放时触发该事件。                                |
58| onPause(event:()&nbsp;=&gt;&nbsp;void)   | 暂停时触发该事件。                                |
59| onFinish(event:()&nbsp;=&gt;&nbsp;void)  | 播放结束时触发该事件。                              |
60| onError(event:()&nbsp;=&gt;&nbsp;void)   | 播放失败时触发该事件。                              |
61| onPrepared(callback:(event?:&nbsp;{&nbsp;duration:&nbsp;number&nbsp;})&nbsp;=&gt;&nbsp;void) | 视频准备完成时触发该事件,通过duration可以获取视频时长,单位为s。<br/>- duration: 视频的时长。 |
62| onSeeking(callback:(event?:&nbsp;{&nbsp;time:&nbsp;number&nbsp;})&nbsp;=&gt;&nbsp;void) | 操作进度条过程时上报时间信息,单位为s。                     |
63| onSeeked(callback:(event?:&nbsp;{&nbsp;time:&nbsp;number&nbsp;})&nbsp;=&gt;&nbsp;void) | 操作进度条完成后,上报播放时间信息,单位为s。                  |
64| onUpdate(callback:(event?:&nbsp;{&nbsp;time:&nbsp;number&nbsp;})&nbsp;=&gt;&nbsp;void) | 播放进度变化时触发该事件,单位为s,更新时间间隔为250ms。          |
65
66
67## VideoController
68
69一个VideoController对象可以控制一个或多个video。
70
71
72### 导入对象
73
74```
75controller: VideoController = new VideoController();
76```
77
78
79### start
80
81start(): void
82
83开始播放。
84
85### pause
86
87pause(): void
88
89暂停播放。
90
91### stop
92
93stop(): void
94
95停止播放。
96
97### setCurrentTime
98
99setCurrentTime(value: number)
100
101指定视频播放的进度位置。
102
103**参数:**
104
105| 参数名   | 参数类型   | 必填   | 默认值  | 参数描述      |
106| ----- | ------ | ---- | ---- | --------- |
107| value | number | 是    | -    | 视频播放进度位置。 |
108
109### requestFullscreen
110
111requestFullscreen(value: boolean)
112
113请求全屏播放。
114
115**参数:**
116
117| 参数名   | 参数类型   | 必填   | 默认值   | 参数描述    |
118| ----- | ------ | ---- | ----- | ------- |
119| value | number | 是    | false | 是否全屏播放。 |
120
121### exitFullscreen
122
123exitFullscreen()
124
125退出全屏播放。
126
127### setCurrentTime<sup>8+</sup>
128
129setCurrentTime(value: number, seekMode: SeekMode)
130
131指定视频播放的进度位置,并指定跳转模式。
132
133**参数:**
134
135| 参数名      | 参数类型     | 必填   | 默认值  | 参数描述      |
136| -------- | -------- | ---- | ---- | --------- |
137| value    | number   | 是    | -    | 视频播放进度位置。 |
138| seekMode | SeekMode | 是    | -    | 跳转模式。     |
139
140## SeekMode<sup>8+</sup>类型接口说明
141
142| 名称               | 描述             |
143| ---------------- | -------------- |
144| PreviousKeyframe | 跳转到前一个最近的关键帧。  |
145| NextKeyframe     | 跳转到后一个最近的关键帧。  |
146| ClosestKeyframe  | 跳转到最近的关键帧。     |
147| Accurate         | 精准跳转,不论是否为关键帧。 |
148
149
150
151## 示例
152
153```ts
154// xxx.ets
155@Entry
156@Component
157struct VideoCreateComponent {
158  @State srcs: Resource = $rawfile('video1.mp4');
159  @State previewUris: Resource = $r('app.media.img');
160  @State currentProgressRates: number = 1;
161  @State autoPlays: boolean = false;
162  @State controlsss: boolean = true;
163  controller: VideoController = new VideoController();
164  build() {
165    Column() {
166      Video({
167        src: this.srcs,
168        previewUri: this.previewUris,
169        currentProgressRate: this.currentProgressRates,
170        controller: this.controller
171      }).width(700).height(500)
172        .autoPlay(this.autoPlays)
173        .controls(this.controlsss)
174        .onStart(() => {
175                  console.error('onStart');
176                })
177        .onPause(() => {
178                  console.error('onPause');
179                })
180        .onFinish(() => {
181                  console.error('onFinish');
182                })
183        .onError(() => {
184                  console.error('onError');
185                })
186        .onPrepared((e) => {
187                    console.error('onPrepared is ' + e.duration);
188                })
189        .onSeeking((e) => {
190                    console.error('onSeeking is ' + e.time);
191                })
192        .onSeeked((e) => {
193                    console.error('onSeekedis ' + e.time);
194                })
195        .onUpdate((e) => {
196                    console.error('onUpdateis ' + e.time);
197                })
198      Row() {
199        Button("src").onClick(() => {
200            this.srcs = $rawfile('video2.mp4');
201        });
202        Button("previewUri").onClick(() => {
203            this.previewUris = $r('app.media.img1');
204        });
205        Button("controlsss").onClick(() => {
206          this.controlsss = !this.controlsss;
207        });
208      }
209
210      Row() {
211        Button("start").onClick(() => {
212          this.controller.start();
213        });
214        Button("pause").onClick(() => {
215          this.controller.pause();
216        });
217        Button("stop").onClick(() => {
218          this.controller.stop();
219        });
220      }
221
222      Row() {
223        Button("setCurrentTime").onClick(() => {
224          this.controller.setCurrentTime(9, SeekMode.Accurate);
225        });
226      }
227    }
228  }
229}
230```
231