ts-media-components-video.md 8.2 KB
Newer Older
Z
zengyawen 已提交
1 2
# Video

T
explain  
tianyu 已提交
3 4
 用于播放单个视频并控制其播放状态的组件。 

H
geshi  
HelloCrease 已提交
5
>  **说明:**
H
HelloCrease 已提交
6
>  该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
Z
zengyawen 已提交
7

8 9 10 11 12 13 14 15
## 权限列表

使用网络视频时,需要在config或者module.json对应的"abilities"中添加网络使用权限ohos.permission.INTERNET。

```
"abilities":[
  {
    ...
H
HelloCrease 已提交
16
    "permissions": ["ohos.permission.INTERNET"],
17 18 19 20 21
    ...
  }
]
```

Z
zengyawen 已提交
22 23 24 25 26 27 28 29

## 子组件

不支持子组件。


## 接口

K
kukixi 已提交
30
Video(value: VideoOptions)
Z
zengyawen 已提交
31

K
kukixi 已提交
32
- VideoOptions类型接口说明
H
HelloCrease 已提交
33 34 35 36 37 38
  | 参数名                 | 参数类型                                     | 必填   | 默认值                                      | 参数描述                                     |
  | ------------------- | ---------------------------------------- | ---- | ---------------------------------------- | ---------------------------------------- |
  | src                 | string \| [Resource](../../ui/ts-types.md) | 否    | -                                        | 视频播放源的路径,支持本地视频路径和网络路径。<br>支持在resources下面的video或rawfile文件夹里放置媒体资源。<br>支持dataability://的路径前缀,用于访问通过Data Ability提供的视频路径,具体路径信息详见[Data Ability说明](../../ability/fa-dataability.md)。 |
  | 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/> |
  | previewUri          | string&nbsp;\|&nbsp;PixelMap<sup>8+</sup>&nbsp;\|&nbsp;[Resource](../../ui/ts-types.md) | 否    | -                                        | 预览图片的路径。                                 |
  | controller          | [VideoController](#videocontroller)      | 否    | -                                        | 控制器。                                     |
Z
zengyawen 已提交
39 40


41
- PlaybackSpeed<sup>8+</sup>类型接口说明
H
HelloCrease 已提交
42 43
  | 名称                   | 描述        |
  | -------------------- | --------- |
44
  | Speed_Forward_0_75_X | 0.75倍速播放。 |
H
HelloCrease 已提交
45
  | Speed_Forward_1_00_X | 1倍速播放。    |
46 47
  | Speed_Forward_1_25_X | 1.25倍速播放。 |
  | Speed_Forward_1_75_X | 1.75倍速播放。 |
H
HelloCrease 已提交
48
  | Speed_Forward_2_00_X | 2倍速播放。    |
Z
zengyawen 已提交
49 50 51 52


## 属性

H
HelloCrease 已提交
53 54 55 56 57 58 59
| 名称        | 参数类型                                     | 默认值   | 描述              |
| --------- | ---------------------------------------- | ----- | --------------- |
| muted     | boolean                                  | false | 是否静音。           |
| autoPlay  | boolean                                  | false | 是否自动播放。         |
| controls  | boolean                                  | true  | 控制视频播放的控制栏是否显示。 |
| objectFit | [ImageFit](ts-basic-components-image.md) | Cover | 设置视频显示模式。       |
| loop      | boolean                                  | false | 是否单个视频循环播放。     |
Z
zengyawen 已提交
60 61 62 63


## 事件

H
HelloCrease 已提交
64 65 66 67 68 69
| 名称                                       | 功能描述                                     |
| ---------------------------------------- | ---------------------------------------- |
| onStart()&nbsp;=&gt;&nbsp;void           | 播放时触发该事件。                                |
| onPause()&nbsp;=&gt;&nbsp;void           | 暂停时触发该事件。                                |
| onFinish()&nbsp;=&gt;&nbsp;void          | 播放结束时触发该事件。                              |
| onError()&nbsp;=&gt;&nbsp;void           | 播放失败时触发该事件。                              |
70
| onPrepared(event?:&nbsp;{&nbsp;duration:&nbsp;number&nbsp;})&nbsp;=&gt;&nbsp;void | 视频准备完成时触发该事件,通过duration可以获取视频时长,单位为秒(s)。 |
H
HelloCrease 已提交
71 72 73
| onSeeking(event?:&nbsp;{&nbsp;time:&nbsp;number&nbsp;})&nbsp;=&gt;&nbsp;void | 操作进度条过程时上报时间信息,单位为s。                     |
| onSeeked(event?:&nbsp;{&nbsp;time:&nbsp;number&nbsp;})&nbsp;=&gt;&nbsp;void | 操作进度条完成后,上报播放时间信息,单位为s。                  |
| onUpdate(event?:&nbsp;{&nbsp;time:&nbsp;number&nbsp;})&nbsp;=&gt;&nbsp;void | 播放进度变化时触发该事件,单位为s,更新时间间隔为250ms。          |
Z
zengyawen 已提交
74 75


76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
## VideoController

一个VideoController对象可以控制一个或多个video。


### 导入对象

```
controller: VideoController = new VideoController();
```


### start

start(): void

开始播放。

### pause

pause(): void

暂停播放。

### stop

stop(): void

停止播放。

### setCurrentTime

setCurrentTime(value: number)

指定视频播放的进度位置。

- 参数
H
HelloCrease 已提交
113 114 115
  | 参数名   | 参数类型   | 必填   | 默认值  | 参数描述      |
  | ----- | ------ | ---- | ---- | --------- |
  | value | number | 是    | -    | 视频播放进度位置。 |
116 117 118 119 120 121 122 123

### requestFullscreen

requestFullscreen(value: boolean)

请求全屏播放。

- 参数
H
HelloCrease 已提交
124 125
  | 参数名   | 参数类型   | 必填   | 默认值   | 参数描述    |
  | ----- | ------ | ---- | ----- | ------- |
126
  | value | boolean | 是    | false | 是否全屏播放。 |
127 128 129 130 131 132 133 134 135 136 137 138 139 140

### exitFullscreen

exitFullscreen()

退出全屏播放。

### setCurrentTime<sup>8+</sup>

setCurrentTime(value: number, seekMode: SeekMode)

指定视频播放的进度位置,并指定跳转模式。

- 参数
H
HelloCrease 已提交
141 142 143 144
  | 参数名      | 参数类型     | 必填   | 默认值  | 参数描述      |
  | -------- | -------- | ---- | ---- | --------- |
  | value    | number   | 是    | -    | 视频播放进度位置。 |
  | seekMode | SeekMode | 是    | -    | 跳转模式。     |
145

146
- SeekMode<sup>8+</sup>类型接口说明
H
HelloCrease 已提交
147 148 149 150 151 152
  | 名称               | 描述             |
  | ---------------- | -------------- |
  | PreviousKeyframe | 跳转到前一个最近的关键帧。  |
  | NextKeyframe     | 跳转到后一个最近的关键帧。  |
  | ClosestKeyframe  | 跳转到最近的关键帧。     |
  | Accurate         | 精准跳转,不论是否为关键帧。 |
Z
zengyawen 已提交
153 154


155

Z
zengyawen 已提交
156 157
## 示例

H
geshi  
HelloCrease 已提交
158 159
```ts
// xxx.ets
Z
zengyawen 已提交
160 161 162
@Entry
@Component
struct VideoCreateComponent {
163 164
  @State srcs: Resource = $rawfile('video1');
  @State previewUris: Resource = $r('app.media.img');
Z
zengyawen 已提交
165 166 167
  @State currentProgressRates: number = 1;
  @State autoPlays: boolean = false;
  @State controlsss: boolean = true;
168
  controller: VideoController = new VideoController();
Z
zengyawen 已提交
169 170 171 172 173 174
  build() {
    Column() {
      Video({
        src: this.srcs,
        previewUri: this.previewUris, 
        currentProgressRate: this.currentProgressRates,
175
        controller: this.controller
Z
zengyawen 已提交
176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204
      }).width(700).height(500)
        .autoPlay(this.autoPlays)
        .controls(this.controlsss)
        .onStart(() => {
                  console.error('onStart');
                })
        .onPause(() => {
                  console.error('onPause');
                })
        .onFinish(() => {
                  console.error('onFinish');
                })
        .onError(() => {
                  console.error('onFinish');
                })
        .onPrepared((e) => {
                    console.error('onPrepared is ' + e.duration);
                })
        .onSeeking((e) => {
                    console.error('onSeeking is ' + e.time);
                })
        .onSeeked((e) => {
                    console.error('onSeekedis ' + e.time);
                })
        .onUpdate((e) => {
                    console.error('onUpdateis ' + e.time);
                })
      Row() {
        Button("src").onClick(() => {
205
            this.srcs = $rawfile('video2');
Z
zengyawen 已提交
206 207
        });
        Button("previewUri").onClick(() => {
208
            this.previewUris = $r('app.media.img1');
Z
zengyawen 已提交
209 210 211 212 213 214 215 216
        });
        Button("controlsss").onClick(() => {
          this.controlsss = !this.controlsss;
        });
      }

      Row() {
        Button("start").onClick(() => {
217
          this.controller.start();
Z
zengyawen 已提交
218 219
        });
        Button("pause").onClick(() => {
220
          this.controller.pause();
Z
zengyawen 已提交
221 222
        });
        Button("stop").onClick(() => {
223
          this.controller.stop();
Z
zengyawen 已提交
224 225 226 227 228
        });
      }

      Row() {
        Button("setCurrentTime").onClick(() => {
229
          this.controller.setCurrentTime(9, SeekMode.Accurate);
Z
zengyawen 已提交
230 231 232 233 234 235
        });
      }
    }
  }
}
```