ts-media-components-video.md 6.9 KB
Newer Older
Z
zengyawen 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
# Video

> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。


视频播放组件。


## 子组件

不支持子组件。


## 接口

K
kukixi 已提交
17
Video(value: VideoOptions)
Z
zengyawen 已提交
18

K
kukixi 已提交
19
- VideoOptions类型接口说明
Z
zengyawen 已提交
20 21 22
  | 参数名 | 参数类型 | 必填 | 默认值 | 参数描述 |
  | -------- | -------- | -------- | -------- | -------- |
  | src | string | 否 | - | 视频播放源的路径。 |
23
  | currentProgressRate | number&nbsp;\|&nbsp;PlaybackSpeed<sup>8+</sup> | 否 | 1.0&nbsp;\|&nbsp;PlaybackSpeed.<br>Speed_Forward_1_00_X | 视频播放倍速。<br/>>&nbsp;![icon-note.gif](public_sys-resources/icon-note.gif)&nbsp;**说明:**<br/>>&nbsp;number取值仅支持:0.75,1.0,1.25,1.75,2.0。<br/> |
K
kukixi 已提交
24
  | previewUri | string&nbsp;\|&nbsp;PixelMap<sup>8+</sup>&nbsp;\|&nbsp;[Resource](../../ui/ts-types.md#Resource类型) | 否 | - | 预览图片的路径。 |
Z
zengyawen 已提交
25 26 27
  | controller | [VideoController](#videocontroller) | 否 | - | 控制器。 |


28
- PlaybackSpeed<sup>8+</sup>类型接口说明
Z
zengyawen 已提交
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
  | 名称 | 描述 | 
  | -------- | -------- |
  | Speed_Forward_0_75_X | 0.75倍速播放。 | 
  | Speed_Forward_1_00_X | 1倍速播放。 | 
  | Speed_Forward_1_25_X | 1.25倍速播放。 | 
  | Speed_Forward_1_75_X | 1.75倍速播放。 | 
  | Speed_Forward_2_00_X | 2倍速播放。 | 


## 属性

| 名称 | 参数类型 | 默认值 | 描述 |
| -------- | -------- | -------- | -------- |
| muted | boolean | false | 是否静音。 |
| autoPlay | boolean | false | 是否自动播放。 |
| controls | boolean | true | 控制视频播放的控制栏是否显示。 |
| objectFit | [ImageFit](ts-basic-components-image.md) | Cover | 设置视频显示模式。 |
| loop | boolean | false | 是否单个视频循环播放。 |


## 事件

| 名称 | 功能描述 | 
52
| -------- | -------- |
Z
zengyawen 已提交
53 54 55 56 57 58 59 60 61 62
| onStart()&nbsp;=&gt;&nbsp;void | 播放时触发该事件。 | 
| onPause()&nbsp;=&gt;&nbsp;void | 暂停时触发该事件。 | 
| onFinish()&nbsp;=&gt;&nbsp;void | 播放结束时触发该事件。 | 
| onError()&nbsp;=&gt;&nbsp;void | 播放失败时触发该事件。 |
| onPrepared(event?:&nbsp;{&nbsp;duration:&nbsp;number&nbsp;})&nbsp;=&gt;&nbsp;void | 视频准备完成时触发该事件,通过duration可以获取视频时长,单位为秒(s)。 | 
| 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。 | 


63 64 65 66 67 68 69 70 71 72 73 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 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
## VideoController

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


### 导入对象

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


### start

start(): void

开始播放。

### pause

pause(): void

暂停播放。

### stop

stop(): void

停止播放。

### setCurrentTime

setCurrentTime(value: number)

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

- 参数
  | 参数名 | 参数类型 | 必填 | 默认值 | 参数描述 | 
  | -------- | -------- | -------- | -------- | -------- |
  | value | number | 是 | - | 视频播放进度位置。 |

### requestFullscreen

requestFullscreen(value: boolean)

请求全屏播放。

- 参数
  | 参数名 | 参数类型 | 必填 | 默认值 | 参数描述 | 
  | -------- | -------- | -------- | -------- | -------- |
  | value | number | 是 | false | 是否全屏播放。 |

### exitFullscreen

exitFullscreen()

退出全屏播放。

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

setCurrentTime(value: number, seekMode: SeekMode)

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

- 参数
  | 参数名 | 参数类型 | 必填 | 默认值 | 参数描述 | 
  | -------- | -------- | -------- | -------- | -------- |
  | value | number | 是 | - | 视频播放进度位置。 |
  | seekMode | SeekMode | 是 | - | 跳转模式。 |

133
- SeekMode<sup>8+</sup>类型接口说明
Z
zengyawen 已提交
134 135 136 137 138 139 140 141
  | 名称 | 描述 | 
  | -------- | -------- |
  | PreviousKeyframe | 跳转到前一个最近的关键帧。 | 
  | NextKeyframe | 跳转到后一个最近的关键帧。 | 
  | ClosestKeyframe | 跳转到最近的关键帧。 | 
  | Accurate | 精准跳转,不论是否为关键帧。 | 


142

Z
zengyawen 已提交
143 144 145 146 147 148 149 150 151 152 153
## 示例

```
@Entry
@Component
struct VideoCreateComponent {
  @State srcs: string = "/resources/video/video1.mp4";
  @State previewUris: string = "/resources/image/media.JPG";
  @State currentProgressRates: number = 1;
  @State autoPlays: boolean = false;
  @State controlsss: boolean = true;
154
  controller: VideoController = new VideoController();
Z
zengyawen 已提交
155 156 157 158 159 160 161
  @State startStaus: boolean = true;
  build() {
    Column() {
      Video({
        src: this.srcs,
        previewUri: this.previewUris, 
        currentProgressRate: this.currentProgressRates,
162
        controller: this.controller
Z
zengyawen 已提交
163 164 165 166 167 168 169 170 171 172 173 174 175 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 205 206 207 208 209 210 211
      }).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(() => {
          if (this.srcs == "/resources/video/video1.mp4") {
            this.srcs = "/resources/video/video2.mp4";
          } else {
            this.srcs = "/resources/video/video1.mp4";
          }
        });
        Button("previewUri").onClick(() => {
          if (this.previewUris == "/resources/image/media.JPG") {
            this.previewUris = "/resources/image/sinlin.png";
          } else {
            this.previewUris = "/resources/image/media.JPG";
          }
        });
        Button("controlsss").onClick(() => {
          this.controlsss = !this.controlsss;
        });
      }

      Row() {
        Button("start").onClick(() => {
212
          this.controller.start();
Z
zengyawen 已提交
213 214
        });
        Button("pause").onClick(() => {
215
          this.controller.pause();
Z
zengyawen 已提交
216 217
        });
        Button("stop").onClick(() => {
218
          this.controller.stop();
Z
zengyawen 已提交
219 220 221 222 223
        });
      }

      Row() {
        Button("setCurrentTime").onClick(() => {
224
          this.controller.setCurrentTime(9, SeekMode.Accurate);
Z
zengyawen 已提交
225 226 227 228 229 230
        });
      }
    }
  }
}
```