diff --git a/zh-cn/application-dev/media/Readme-CN.md b/zh-cn/application-dev/media/Readme-CN.md
index eb57afa3f1641fb0401ce4988d73043dbba8502f..d9e569d4ec88dbe36d1a20b1317b057e0c2cfefc 100755
--- a/zh-cn/application-dev/media/Readme-CN.md
+++ b/zh-cn/application-dev/media/Readme-CN.md
@@ -5,7 +5,8 @@
- [音频播放开发指导](audio-playback.md)
- [音频管理开发指导](audio-management.md)
- [音频录制开发指导](audio-recorder.md)
-
- 视频
+ - [视频开发概述](video-overview.md)
+ - [视频播放开发指导](video-playback.md)
- [视频录制开发指导](video-recorder.md)
diff --git a/zh-cn/application-dev/media/audio-playback.md b/zh-cn/application-dev/media/audio-playback.md
index 9a385d90763dff0760f236ef64078a6dacf2238f..e9ded7568ef91d250fa7c46b41260800b83b74c7 100644
--- a/zh-cn/application-dev/media/audio-playback.md
+++ b/zh-cn/application-dev/media/audio-playback.md
@@ -6,7 +6,13 @@
**图1** 音频播放状态机
-![zh-ch_image_20220117](figures/zh-ch_image_20220117.jpg)
+![zh-ch_image_audio_state_machine](figures/zh-ch_image_audio_state_machine.png)
+
+## 视频播放零层图
+
+**图2** 视频播放零层图
+
+![zh-ch_image_audio_player](figures/zh-ch_image_audio_player.png)
## 音频播放开发步骤
diff --git a/zh-cn/application-dev/media/figures/zh-ch_image_20220117.jpg b/zh-cn/application-dev/media/figures/zh-ch_image_20220117.jpg
deleted file mode 100644
index 8fba3a7beeb4efc7599dde3f32b228135ed92fce..0000000000000000000000000000000000000000
Binary files a/zh-cn/application-dev/media/figures/zh-ch_image_20220117.jpg and /dev/null differ
diff --git a/zh-cn/application-dev/media/figures/zh-ch_image_audio_player.png b/zh-cn/application-dev/media/figures/zh-ch_image_audio_player.png
new file mode 100644
index 0000000000000000000000000000000000000000..e611f916b0907b8b664941ab247c1f66f0240941
Binary files /dev/null and b/zh-cn/application-dev/media/figures/zh-ch_image_audio_player.png differ
diff --git a/zh-cn/application-dev/media/figures/zh-ch_image_audio_state_machine.png b/zh-cn/application-dev/media/figures/zh-ch_image_audio_state_machine.png
new file mode 100644
index 0000000000000000000000000000000000000000..274ea47ccbceb25cd8be4054dcb6c3e0440e90a0
Binary files /dev/null and b/zh-cn/application-dev/media/figures/zh-ch_image_audio_state_machine.png differ
diff --git a/zh-cn/application-dev/media/figures/zh-ch_image_video_player.png b/zh-cn/application-dev/media/figures/zh-ch_image_video_player.png
new file mode 100644
index 0000000000000000000000000000000000000000..f79507293c841937c317634fcd519248c79b6388
Binary files /dev/null and b/zh-cn/application-dev/media/figures/zh-ch_image_video_player.png differ
diff --git a/zh-cn/application-dev/media/figures/zh-ch_image_video_state_machine.png b/zh-cn/application-dev/media/figures/zh-ch_image_video_state_machine.png
new file mode 100644
index 0000000000000000000000000000000000000000..092a114553e11c185a85d57ec61138e77f7bdcd7
Binary files /dev/null and b/zh-cn/application-dev/media/figures/zh-ch_image_video_state_machine.png differ
diff --git a/zh-cn/application-dev/media/video-playback.md b/zh-cn/application-dev/media/video-playback.md
new file mode 100644
index 0000000000000000000000000000000000000000..b0609e9712942e07b418004368cef74149bb2615
--- /dev/null
+++ b/zh-cn/application-dev/media/video-playback.md
@@ -0,0 +1,375 @@
+# 视频播放开发指导
+
+## 场景介绍
+
+视频播放的主要工作是将视频数据转码并输出到设备进行播放,同时管理播放任务。本文将对视频播放全流程、视频切换、视频循环播放等场景开发进行介绍说明。
+
+**图1** 视频播放状态机
+
+![zh-ch_image_video_state_machine](figures/zh-ch_image_video_state_machine.png)
+
+## 视频播放零层图
+
+**图2** 视频播放零层图
+
+![zh-ch_image_video_player](figures/zh-ch_image_video_player.png)
+
+*注意:视频播放需要显示、音频、编解码等硬件能力。
+
+1. 三方应用从Xcomponent组件获取surfaceID。
+2. 三方应用把surfaceID传递给VideoPlayer JS。
+3. 媒体服务把帧数据flush给surface buffer。
+
+## 视频播放开发步骤
+
+详细API含义可参考:[js-apis-media.md](../reference/apis/js-apis-media.md)
+
+### 全流程场景
+
+包含流程:创建实例,设置url,设置SurfaceId,准备播放视频,播放视频,暂停播放,获取轨道信息,跳转播放位置,设置音量,设置倍速,结束播放,重置,释放资源等流程。
+
+VideoPlayer支持的url媒体源输入类型可参考:[url属性说明](../reference/apis/js-apis-media.md#videoplayer_属性)
+
+```js
+let videoPlayer = undefined; // 用于保存createVideoPlayer创建的对象
+let surfaceID = undefined; // 用于保存Xcomponent接口返回的surfaceID
+
+// 函数调用发生错误时用于上报错误信息
+function failureCallback(error) {
+ console.info(`error happened,error Name is ${error.name}`);
+ console.info(`error happened,error Code is ${error.code}`);
+ console.info(`error happened,error Message is ${error.message}`);
+}
+
+// 当函数调用发生异常时用于上报错误信息
+function catchCallback(error) {
+ console.info(`catch error happened,error Name is ${error.name}`);
+ console.info(`catch error happened,error Code is ${error.code}`);
+ console.info(`catch error happened,error Message is ${error.message}`);
+}
+
+// 用于打印视频轨道信息
+function printfDescription(obj) {
+ for (let item in obj) {
+ let property = obj[item];
+ console.info('key is ' + item);
+ console.info('value is ' + property);
+ }
+}
+
+// 调用createVideoPlayer接口返回videoPlayer实例对象
+await media.createVideoPlayer().then((video) => {
+ if (typeof (video) != 'undefined') {
+ console.info('createVideoPlayer success!');
+ videoPlayer = video;
+ } else {
+ console.info('createVideoPlayer fail!');
+ }
+}, failureCallback).catch(catchCallback);
+
+// 用户选择视频设置url
+videoPlayer.url = 'file:///data/data/ohos.xxx.xxx/files/test.mp4';
+
+// 该处需要调用Xcomponent的接口用于获取surfaceID,并保存在surfaceID变量中
+
+// 设置surfaceID用于显示视频画面
+await videoPlayer.setDisplaySurface(surfaceID).then(() => {
+ console.info('setDisplaySurface success');
+}, failureCallback).catch(catchCallback);
+
+// 调用prepare完成播放前准备工作
+await videoPlayer.prepare().then(() => {
+ console.info('prepare success');
+}, failureCallback).catch(catchCallback);
+
+// 调用play接口正式开始播放
+await videoPlayer.play().then(() => {
+ console.info('play success');
+}, failureCallback).catch(catchCallback);
+
+// 暂停播放
+await videoPlayer.pause().then(() => {
+ console.info('pause success');
+}, failureCallback).catch(catchCallback);
+
+// 通过promise回调方式获取视频轨道信息
+let arrayDescription;
+await videoPlayer.getTrackDescription().then((arrlist) => {
+ if (typeof (arrlist) != 'undefined') {
+ arrayDescription = arrlist;
+ } else {
+ console.log('video getTrackDescription fail');
+ }
+}, failureCallback).catch(catchCallback);
+
+for (let i = 0; i < arrayDescription.length; i++) {
+ printfDescription(arrayDescription[i]);
+}
+
+// 跳转播放时间到50s位置,具体入参意义请参考接口文档
+let seekTime = 50000;
+await videoPlayer.seek(seekTime, media.SeekMode._NEXT_SYNC).then((seekDoneTime) => {
+ console.info('seek success');
+}, failureCallback).catch(catchCallback);
+
+// 音量设置接口,具体入参意义请参考接口文档
+let volume = 0.5;
+await videoPlayer.setVolume(volume).then(() => {
+ console.info('setVolume success');
+}, failureCallback).catch(catchCallback);
+
+// 倍速设置接口,具体入参意义请参考接口文档
+let speed = media.PlaybackRateMode.SPEED_FORWARD_2_00_X;
+await videoPlayer.setSpeed(speed).then(() => {
+ console.info('setSpeed success');
+}, failureCallback).catch(catchCallback);
+
+// 结束播放
+await videoPlayer.stop().then(() => {
+ console.info('stop success');
+}, failureCallback).catch(catchCallback);
+
+// 重置播放配置
+await videoPlayer.reset().then(() => {
+ console.info('reset success');
+}, failureCallback).catch(catchCallback);
+
+// 释放播放资源
+await videoPlayer.release().then(() => {
+ console.info('release success');
+}, failureCallback).catch(catchCallback);
+
+// 相关对象置undefined
+videoPlayer = undefined;
+surfaceID = undefined;
+```
+
+### 正常播放场景
+
+```js
+let videoPlayer = undefined; // 用于保存createVideoPlayer创建的对象
+let surfaceID = undefined; // 用于保存Xcomponent接口返回的surfaceID
+
+// 函数调用发生错误时用于上报错误信息
+function failureCallback(error) {
+ console.info(`error happened,error Name is ${error.name}`);
+ console.info(`error happened,error Code is ${error.code}`);
+ console.info(`error happened,error Message is ${error.message}`);
+}
+
+// 当函数调用发生异常时用于上报错误信息
+function catchCallback(error) {
+ console.info(`catch error happened,error Name is ${error.name}`);
+ console.info(`catch error happened,error Code is ${error.code}`);
+ console.info(`catch error happened,error Message is ${error.message}`);
+}
+
+// 设置'playbackCompleted'事件回调,播放完成触发
+function SetCallBack(videoPlayer) {
+ videoPlayer.on('playbackCompleted', () => {
+ console.info('video play finish');
+
+ await videoPlayer.release().then(() => {
+ console.info('release success');
+ }, failureCallback).catch(catchCallback);
+
+ videoPlayer = undefined;
+ surfaceID = undefined;
+ });
+}
+
+// 调用createVideoPlayer接口返回videoPlayer实例对象
+await media.createVideoPlayer().then((video) => {
+ if (typeof (video) != 'undefined') {
+ console.info('createVideoPlayer success!');
+ videoPlayer = video;
+ } else {
+ console.info('createVideoPlayer fail!');
+ }
+}, failureCallback).catch(catchCallback);
+
+// 设置事件回调
+SetCallBack(videoPlayer);
+
+// 用户选择视频设置url
+videoPlayer.url = 'file:///data/data/ohos.xxx.xxx/files/test.mp4';
+
+// 该处需要调用Xcomponent的接口用于获取surfaceID,并保存在surfaceID变量中
+
+// 设置surfaceID用于显示视频画面
+await videoPlayer.setDisplaySurface(surfaceID).then(() => {
+ console.info('setDisplaySurface success');
+}, failureCallback).catch(catchCallback);
+
+// 调用prepare完成播放前准备工作
+await videoPlayer.prepare().then(() => {
+ console.info('prepare success');
+}, failureCallback).catch(catchCallback);
+
+// 调用play接口正式开始播放
+await videoPlayer.play().then(() => {
+ console.info('play success');
+}, failureCallback).catch(catchCallback);
+```
+
+### 切视频场景
+
+```js
+let videoPlayer = undefined; // 用于保存createVideoPlayer创建的对象
+let surfaceID = undefined; // 用于保存Xcomponent接口返回的surfaceID
+
+// 函数调用发生错误时用于上报错误信息
+function failureCallback(error) {
+ console.info(`error happened,error Name is ${error.name}`);
+ console.info(`error happened,error Code is ${error.code}`);
+ console.info(`error happened,error Message is ${error.message}`);
+}
+
+// 当函数调用发生异常时用于上报错误信息
+function catchCallback(error) {
+ console.info(`catch error happened,error Name is ${error.name}`);
+ console.info(`catch error happened,error Code is ${error.code}`);
+ console.info(`catch error happened,error Message is ${error.message}`);
+}
+
+// 设置'playbackCompleted'事件回调,播放完成触发
+function SetCallBack(videoPlayer) {
+ videoPlayer.on('playbackCompleted', () => {
+ console.info('video play finish');
+
+ await videoPlayer.release().then(() => {
+ console.info('release success');
+ }, failureCallback).catch(catchCallback);
+
+ videoPlayer = undefined;
+ surfaceID = undefined;
+ });
+}
+
+// 调用createVideoPlayer接口返回videoPlayer实例对象
+await media.createVideoPlayer().then((video) => {
+ if (typeof (video) != 'undefined') {
+ console.info('createVideoPlayer success!');
+ videoPlayer = video;
+ } else {
+ console.info('createVideoPlayer fail!');
+ }
+}, failureCallback).catch(catchCallback);
+
+// 设置事件回调
+SetCallBack(videoPlayer);
+
+// 用户选择视频设置url
+videoPlayer.url = 'file:///data/data/ohos.xxx.xxx/files/test.mp4';
+
+// 该处需要调用Xcomponent的接口用于获取surfaceID,并保存在surfaceID变量中
+
+// 设置surfaceID用于显示视频画面
+await videoPlayer.setDisplaySurface(surfaceID).then(() => {
+ console.info('setDisplaySurface success');
+}, failureCallback).catch(catchCallback);
+
+// 调用prepare完成播放前准备工作
+await videoPlayer.prepare().then(() => {
+ console.info('prepare success');
+}, failureCallback).catch(catchCallback);
+
+// 调用play接口正式开始播放
+await videoPlayer.play().then(() => {
+ console.info('play success');
+}, failureCallback).catch(catchCallback);
+
+// 播放一段时间后,下发切视频指令
+// 重置播放配置
+await videoPlayer.reset().then(() => {
+ console.info('reset success');
+}, failureCallback).catch(catchCallback);
+
+videoPlayer.url = 'file:///data/data/ohos.xxx.xxx/files/next.mp4';
+
+// 设置surfaceID用于显示视频画面
+await videoPlayer.setDisplaySurface(surfaceID).then(() => {
+ console.info('setDisplaySurface success');
+}, failureCallback).catch(catchCallback);
+
+// 调用prepare完成播放前准备工作
+await videoPlayer.prepare().then(() => {
+ console.info('prepare success');
+}, failureCallback).catch(catchCallback);
+
+// 调用play接口正式开始播放
+await videoPlayer.play().then(() => {
+ console.info('play success');
+}, failureCallback).catch(catchCallback);
+```
+
+### 单个视频循环场景
+
+```js
+let videoPlayer = undefined; // 用于保存createVideoPlayer创建的对象
+let surfaceID = undefined; // 用于保存Xcomponent接口返回的surfaceID
+
+// 函数调用发生错误时用于上报错误信息
+function failureCallback(error) {
+ console.info(`error happened,error Name is ${error.name}`);
+ console.info(`error happened,error Code is ${error.code}`);
+ console.info(`error happened,error Message is ${error.message}`);
+}
+
+// 当函数调用发生异常时用于上报错误信息
+function catchCallback(error) {
+ console.info(`catch error happened,error Name is ${error.name}`);
+ console.info(`catch error happened,error Code is ${error.code}`);
+ console.info(`catch error happened,error Message is ${error.message}`);
+}
+
+// 设置'playbackCompleted'事件回调,播放完成触发
+function SetCallBack(videoPlayer) {
+ videoPlayer.on('playbackCompleted', () => {
+ console.info('video play finish');
+
+ await videoPlayer.release().then(() => {
+ console.info('release success');
+ }, failureCallback).catch(catchCallback);
+
+ videoPlayer = undefined;
+ surfaceID = undefined;
+ });
+}
+
+// 调用createVideoPlayer接口返回videoPlayer实例对象
+await media.createVideoPlayer().then((video) => {
+ if (typeof (video) != 'undefined') {
+ console.info('createVideoPlayer success!');
+ videoPlayer = video;
+ } else {
+ console.info('createVideoPlayer fail!');
+ }
+}, failureCallback).catch(catchCallback);
+
+// 设置事件回调
+SetCallBack(videoPlayer);
+
+// 用户选择视频设置url
+videoPlayer.url = 'file:///data/data/ohos.xxx.xxx/files/test.mp4';
+
+// 该处需要调用Xcomponent的接口用于获取surfaceID,并保存在surfaceID变量中
+
+// 设置surfaceID用于显示视频画面
+await videoPlayer.setDisplaySurface(surfaceID).then(() => {
+ console.info('setDisplaySurface success');
+}, failureCallback).catch(catchCallback);
+
+// 调用prepare完成播放前准备工作
+await videoPlayer.prepare().then(() => {
+ console.info('prepare success');
+}, failureCallback).catch(catchCallback);
+
+// 设置循环播放属性
+videoPlayer.loop = true;
+
+// 调用play接口正式开始播放
+await videoPlayer.play().then(() => {
+ console.info('play success');
+}, failureCallback).catch(catchCallback);
+```
\ No newline at end of file
diff --git a/zh-cn/application-dev/reference/apis/js-apis-media.md b/zh-cn/application-dev/reference/apis/js-apis-media.md
index 8954c48ed43283ae5a098420b2a91cfb47bf16e4..90b9f701b255b3430356412cbe54cd830c4b5114 100644
--- a/zh-cn/application-dev/reference/apis/js-apis-media.md
+++ b/zh-cn/application-dev/reference/apis/js-apis-media.md
@@ -5,10 +5,11 @@
媒体子系统包含了音视频相关媒体业务,提供以下常用功能:
- 音频播放([AudioPlayer](#audioplayer))
+- 视频播放([VideoPlayer](#videoplayer8))
- 音频录制([AudioRecorder](#audiorecorder))
- 视频录制([VideoRecorder](#VideoRecorder8+))
-后续将提供以下功能:视频播放、视频录制、DataSource音视频播放、音视频编解码、容器封装解封装、媒体能力查询等功能。
+后续将提供以下功能:DataSource音视频播放、音视频编解码、容器封装解封装、媒体能力查询等功能。
## 导入模块
@@ -93,7 +94,65 @@ await media.createAudioPlayerAsync.then((audio) => {
}, failureCallback).catch(catchCallback);
```
+## media.createVideoPlayer8+
+
+createVideoPlayer(callback: AsyncCallback\<[VideoPlayer](#videoplayer8)>): void
+
+异步方式创建视频播放实例,通过注册回调函数获取返回值。
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | ------------------------------------------- | ---- | ------------------------------ |
+| callback | AsyncCallback<[VideoPlayer](#videoplayer8)> | 是 | 异步创建视频播放实例回调方法。 |
+
+**示例:**
+
+```js
+media.createVideoPlayer((error, video) => {
+ if (typeof(video) != 'undefined') {
+ videoPlayer = video;
+ console.info('video createVideoPlayer success');
+ } else {
+ console.info(`video createVideoPlayer fail, error:${error.message}`);
+ }
+});
+```
+
+## media.createVideoPlayer8+
+
+createVideoPlayer: Promise<[VideoPlayer](#videoplayer8)>
+
+异步方式创建视频播放实例,通过Promise获取返回值。
+
+**返回值:**
+
+| 类型 | 说明 |
+| ------------------------------------- | ----------------------------------- |
+| Promise<[VideoPlayer](#videoplayer8)> | 异步创建视频播放实例Promise返回值。 |
+
+**示例:**
+
+```js
+function failureCallback(error) {
+ console.info(`video failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`video catchCallback, error:${error.message}`);
+}
+
+await media.createVideoPlayer.then((video) => {
+ if (typeof(video) != 'undefined') {
+ videoPlayer = video;
+ console.info('video createVideoPlayer success');
+ } else {
+ console.info('video createVideoPlayer fail');
+ }
+}, failureCallback).catch(catchCallback);
+```
+
## media.createAudioRecorder
+
createAudioRecorder(): AudioRecorder
创建音频录制的实例来控制音频的录制。
@@ -167,8 +226,6 @@ await media.createAudioRecorderAsync.then((audio) => {
}, failureCallback).catch(catchCallback);
```
-
-
## media.createVideoRecorderAsync8+
createVideoRecorderAsync(callback: AsyncCallback\<[VideoRecorder](#videorecorder8)>): void
@@ -647,6 +704,799 @@ audioPlayer.setVolume(3); //设置volume为无效值,触发'error'事件
| stopped | string | 音频播放停止。 |
| error8+ | string | 错误状态。 |
+## VideoPlayer8+
+
+视频播放管理类,用于管理和播放视频媒体。在调用VideoPlayer的方法前,需要先通过[createVideoPlayer()](#media.createvideoplayer8)构建一个[VideoPlayer](#videoplayer8)实例。
+
+视频播放demo可参考:[视频播放开发指导](../../media/video-playback.md)
+
+### 属性8+
+
+| 名称 | 类型 | 可读 | 可写 | 说明 |
+| ----------- | ---------------------------------- | ---- | ---- | ------------------------------------------------------------ |
+| url | string | 是 | 是 | 视频媒体URL,支持当前主流的视频格式(mp4、mpeg-ts、webm、mkv)。
**支持路径示例**:
1. 本地绝对路径:file:///data/data/ohos.xxx.xxx/files/test.mp4
![zh-cn_image_0000001164217678](figures/zh-cn_image_0000001164217678.png)
**注意事项**:
媒体素材需至少赋予读权限后,才可正常播放 |
+| loop | boolean | 是 | 是 | 视频循环播放属性,设置为'true'表示循环播放。 |
+| currentTime | number | 是 | 否 | 视频的当前播放位置。 |
+| duration | number | 是 | 否 | 视频时长,返回-1表示直播模式 |
+| state | [VideoPlayState](#videoplaystate8) | 是 | 否 | 视频播放的状态。 |
+| width | number | 是 | 否 | 视频宽。 |
+| height | number | 是 | 否 | 视频高。 |
+
+### setDisplaySurface8+
+
+setDisplaySurface(surfaceId: string, callback: AsyncCallback\): void
+
+通过回调方式设置SurfaceId。
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| --------- | -------- | ---- | ------------------------- |
+| surfaceId | string | 是 | SurfaceId |
+| callback | function | 是 | 设置SurfaceId的回调方法。 |
+
+**示例:**
+
+```js
+videoPlayer.setDisplaySurface(surfaceId, (err) => {
+ if (typeof (err) == 'undefined') {
+ console.info('setDisplaySurface success!');
+ } else {
+ console.info('setDisplaySurface fail!');
+ }
+});
+```
+
+### setDisplaySurface8+
+
+setDisplaySurface(surfaceId: string): Promise\
+
+通过Promise方式设置SurfaceId。
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| --------- | ------ | ---- | --------- |
+| surfaceId | string | 是 | SurfaceId |
+
+**返回值:**
+
+| 类型 | 说明 |
+| ------------- | ------------------------------ |
+| Promise | 设置SurfaceId的Promise返回值。 |
+
+**示例:**
+
+```js
+function failureCallback(error) {
+ console.info(`video failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`video catchCallback, error:${error.message}`);
+}
+await videoPlayer.setDisplaySurface(surfaceId).then(() => {
+ console.info('setDisplaySurface success');
+}, failureCallback).catch(catchCallback);
+```
+
+### prepare8+
+
+prepare(callback: AsyncCallback\): void
+
+通过回调方式准备播放视频。
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | -------- | ---- | ------------------------ |
+| callback | function | 是 | 准备播放视频的回调方法。 |
+
+**示例:**
+
+```js
+videoPlayer.prepare((err) => {
+ if (typeof (err) == 'undefined') {
+ console.info('prepare success!');
+ } else {
+ console.info('prepare fail!');
+ }
+});
+```
+
+### prepare8+
+
+prepare(): Promise\
+
+通过Promise方式准备播放视频。
+
+**返回值:**
+
+| 类型 | 说明 |
+| -------------- | ----------------------------- |
+| Promise\ | 准备播放视频的Promise返回值。 |
+
+**示例:**
+
+```js
+function failureCallback(error) {
+ console.info(`video failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`video catchCallback, error:${error.message}`);
+}
+await videoPlayer.prepare().then(() => {
+ console.info('prepare success');
+}, failureCallback).catch(catchCallback);
+```
+
+### play8+
+
+play(callback: AsyncCallback\): void;
+
+通过回调方式开始播放视频。
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | -------- | ---- | ------------------------ |
+| callback | function | 是 | 开始播放视频的回调方法。 |
+
+**示例:**
+
+```js
+videoPlayer.play((err) => {
+ if (typeof (err) == 'undefined') {
+ console.info('play success!');
+ } else {
+ console.info('play fail!');
+ }
+});
+```
+
+### play8+
+
+play(): Promise\;
+
+通过Promise方式开始播放视频。
+
+**返回值:**
+
+| 类型 | 说明 |
+| -------------- | ----------------------------- |
+| Promise\ | 开始播放视频的Promise返回值。 |
+
+**示例:**
+
+```js
+function failureCallback(error) {
+ console.info(`video failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`video catchCallback, error:${error.message}`);
+}
+await videoPlayer.play().then(() => {
+ console.info('play success');
+}, failureCallback).catch(catchCallback);
+```
+
+### pause8+
+
+pause(callback: AsyncCallback\): void
+
+通过回调方式暂停播放视频。
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | -------- | ---- | ------------------------ |
+| callback | function | 是 | 暂停播放视频的回调方法。 |
+
+**示例:**
+
+```js
+videoPlayer.pause((err) => {
+ if (typeof (err) == 'undefined') {
+ console.info('pause success!');
+ } else {
+ console.info('pause fail!');
+ }
+});
+```
+
+### pause8+
+
+pause(): Promise\
+
+通过Promise方式暂停播放视频。
+
+**返回值:**
+
+| 类型 | 说明 |
+| -------------- | ----------------------------- |
+| Promise\ | 暂停播放视频的Promise返回值。 |
+
+**示例:**
+
+```js
+function failureCallback(error) {
+ console.info(`video failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`video catchCallback, error:${error.message}`);
+}
+await videoPlayer.pause().then(() => {
+ console.info('pause success');
+}, failureCallback).catch(catchCallback);
+```
+
+### stop8+
+
+stop(callback: AsyncCallback\): void
+
+通过回调方式停止播放视频。
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | -------- | ---- | ------------------------ |
+| callback | function | 是 | 停止播放视频的回调方法。 |
+
+**示例:**
+
+```js
+videoPlayer.stop((err) => {
+ if (typeof (err) == 'undefined') {
+ console.info('stop success!');
+ } else {
+ console.info('stop fail!');
+ }
+});
+```
+
+### stop8+
+
+stop(): Promise\
+
+通过Promise方式停止播放视频。
+
+**返回值:**
+
+| 类型 | 说明 |
+| -------------- | ----------------------------- |
+| Promise\ | 停止播放视频的Promise返回值。 |
+
+**示例:**
+
+```js
+function failureCallback(error) {
+ console.info(`video failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`video catchCallback, error:${error.message}`);
+}
+await videoPlayer.stop().then(() => {
+ console.info('stop success');
+}, failureCallback).catch(catchCallback);
+```
+
+### reset8+
+
+reset(callback: AsyncCallback\): void
+
+通过回调方式切换播放视频。
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | -------- | ---- | ------------------------ |
+| callback | function | 是 | 切换播放视频的回调方法。 |
+
+**示例:**
+
+```js
+videoPlayer.reset((err) => {
+ if (typeof (err) == 'undefined') {
+ console.info('reset success!');
+ } else {
+ console.info('reset fail!');
+ }
+});
+```
+
+### reset8+
+
+reset(): Promise\
+
+通过Promise方式切换播放视频。
+
+**返回值:**
+
+| 类型 | 说明 |
+| -------------- | ----------------------------- |
+| Promise\ | 切换播放视频的Promise返回值。 |
+
+**示例:**
+
+```js
+function failureCallback(error) {
+ console.info(`video failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`video catchCallback, error:${error.message}`);
+}
+await videoPlayer.reset().then(() => {
+ console.info('reset success');
+}, failureCallback).catch(catchCallback);
+```
+
+### seek8+
+
+seek(timeMs: number, callback: AsyncCallback\): void
+
+通过回调方式跳转到指定播放位置,默认跳转到指定时间点的下一个关键帧。
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | -------- | ---- | ------------------------------ |
+| timeMs | number | 是 | 指定的跳转时间节点,单位毫秒。 |
+| callback | function | 是 | 跳转到指定播放位置的回调方法。 |
+
+**示例:**
+
+```js
+videoPlayer.seek((seekTime, err) => {
+ if (typeof (err) == 'undefined') {
+ console.info('seek success!');
+ } else {
+ console.info('seek fail!');
+ }
+});
+```
+
+### seek8+
+
+seek(timeMs: number, mode:SeekMode, callback: AsyncCallback\): void
+
+通过回调方式跳转到指定播放位置。
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | -------- | ---- | ---------------------------------------- |
+| timeMs | number | 是 | 指定的跳转时间节点,单位毫秒。 |
+| mode | SeekMode | 是 | 跳转模式,具体见[SeekMode](#seekmode8)。 |
+| callback | function | 是 | 跳转到指定播放位置的回调方法。 |
+
+**示例:**
+
+```js
+videoPlayer.seek((seekTime, seekMode, err) => {
+ if (typeof (err) == 'undefined') {
+ console.info('seek success!');
+ } else {
+ console.info('seek fail!');
+ }
+});
+```
+
+### seek8+
+
+seek(timeMs: number, mode?:SeekMode): Promise\
+
+通过Promise方式跳转到指定播放位置,如果没有设置mode则跳转到指定时间点的下一个关键帧。
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| ------ | -------- | ---- | -------------------------------------- |
+| timeMs | number | 是 | 指定的跳转时间节点,单位毫秒。 |
+| mode | SeekMode | 否 | 跳转模式,具体见[SeekMode](#seekmode8) |
+
+**返回值:**
+
+| 类型 | 说明 |
+| -------------- | ----------------------------------- |
+| Promise\ | 跳转到指定播放位置的Promise返回值。 |
+
+**示例:**
+
+```js
+function failureCallback(error) {
+ console.info(`video failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`video catchCallback, error:${error.message}`);
+}
+await videoPlayer.seek(seekTime).then((seekDoneTime) => { // seekDoneTime表示seek完成后的时间点
+ console.info('seek success');
+}, failureCallback).catch(catchCallback);
+
+await videoPlayer.seek(seekTime, seekMode).then((seekDoneTime) => {
+ console.info('seek success');
+}, failureCallback).catch(catchCallback);
+```
+
+### setVolume8+
+
+setVolume(vol: number, callback: AsyncCallback\): void
+
+通过回调方式设置音量。
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | -------- | ---- | ------------------------------------------------------------ |
+| vol | number | 是 | 指定的相对音量大小,取值范围为[0.00-1.00],1表示最大音量,即100%。 |
+| callback | function | 是 | 设置音量的回调方法。 |
+
+**示例:**
+
+```js
+videoPlayer.setVolume((vol, err) => {
+ if (typeof (err) == 'undefined') {
+ console.info('setVolume success!');
+ } else {
+ console.info('setVolume fail!');
+ }
+});
+```
+
+### setVolume8+
+
+setVolume(vol: number): Promise\
+
+通过Promise方式设置音量。
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| ------ | ------ | ---- | ------------------------------------------------------------ |
+| vol | number | 是 | 指定的相对音量大小,取值范围为[0.00-1.00],1表示最大音量,即100%。 |
+
+**返回值:**
+
+| 类型 | 说明 |
+| -------------- | ------------------------- |
+| Promise\ | 设置音量的Promise返回值。 |
+
+**示例:**
+
+```js
+function failureCallback(error) {
+ console.info(`video failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`video catchCallback, error:${error.message}`);
+}
+await videoPlayer.setVolume(vol).then() => {
+ console.info('setVolume success');
+}, failureCallback).catch(catchCallback);
+```
+
+### release8+
+
+release(callback: AsyncCallback\): void
+
+通过回调方式释放视频资源。
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | -------- | ---- | ------------------------ |
+| callback | function | 是 | 释放视频资源的回调方法。 |
+
+**示例:**
+
+```js
+videoPlayer.release((err) => {
+ if (typeof (err) == 'undefined') {
+ console.info('release success!');
+ } else {
+ console.info('release fail!');
+ }
+});
+```
+
+### release8+
+
+release(): Promise\
+
+通过Promise方式释放视频资源。
+
+**返回值:**
+
+| 类型 | 说明 |
+| -------------- | ----------------------------- |
+| Promise\ | 释放视频资源的Promise返回值。 |
+
+**示例:**
+
+```js
+function failureCallback(error) {
+ console.info(`video failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`video catchCallback, error:${error.message}`);
+}
+await videoPlayer.release().then() => {
+ console.info('release success');
+}, failureCallback).catch(catchCallback);
+```
+
+### getTrackDescription8+
+
+getTrackDescription(callback: AsyncCallback>)>>): void
+
+通过回调方式获取视频轨道信息。
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | -------- | ---- | -------------------------- |
+| callback | function | 是 | 获取视频轨道信息回调方法。 |
+
+**示例:**
+
+```js
+function printfDescription(obj) {
+ for (let item in obj) {
+ let property = obj[item];
+ console.info('video key is ' + item);
+ console.info('video value is ' + property);
+ }
+}
+
+videoPlayer.getTrackDescription((error, arrlist) => {
+ if (typeof (arrlist) != 'undefined') {
+ for (let i = 0; i < arrlist.length; i++) {
+ printfDescription(arrlist[i]);
+ }
+ } else {
+ console.log(`video getTrackDescription fail, error:${error.message}`);
+ }
+});
+```
+
+### getTrackDescription8+
+
+getTrackDescription(): Promise>)>>
+
+通过Promise方式获取视频轨道信息。
+
+**返回值:**
+
+| 类型 | 说明 |
+| -------------------------------------------------------- | ------------------------------- |
+| Promise>)>> | 获取视频轨道信息Promise返回值。 |
+
+**示例:**
+
+```js
+function printfDescription(obj) {
+ for (let item in obj) {
+ let property = obj[item];
+ console.info('video key is ' + item);
+ console.info('video value is ' + property);
+ }
+}
+function failureCallback(error) {
+ console.info(`video failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`video catchCallback, error:${error.message}`);
+}
+
+let arrayDescription;
+await videoPlayer.getTrackDescription().then((arrlist) => {
+ if (typeof (arrlist) != 'undefined') {
+ arrayDescription = arrlist;
+ } else {
+ console.log('video getTrackDescription fail');
+ }
+}, failureCallback).catch(catchCallback);
+for (let i = 0; i < arrayDescription.length; i++) {
+ printfDescription(arrayDescription[i]);
+}
+```
+
+### setSpeed8+
+
+setSpeed(speed:number, callback: AsyncCallback\): void
+
+通过回调方式设置播放速度。
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | -------- | ---- | ---------------------------------------------------------- |
+| speed | number | 是 | 指定播放视频速度,具体见[PlaybackSpeed](#playbackspeed8)。 |
+| callback | function | 是 | 设置播放速度的回调方法。 |
+
+**示例:**
+
+```js
+videoPlayer.setSpeed((speed:number, err) => {
+ if (typeof (err) == 'undefined') {
+ console.info('setSpeed success!');
+ } else {
+ console.info('setSpeed fail!');
+ }
+});
+```
+
+### setSpeed8+
+
+setSpeed(speed:number): Promise\
+
+通过Promise方式设置播放速度。
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| ------ | ------ | ---- | ---------------------------------------------------------- |
+| speed | number | 是 | 指定播放视频速度,具体见[PlaybackSpeed](#playbackspeed8)。 |
+
+**示例:**
+
+```js
+function failureCallback(error) {
+ console.info(`video failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`video catchCallback, error:${error.message}`);
+}
+await videoPlayer.setSpeed(speed).then() => {
+ console.info('setSpeed success');
+}, failureCallback).catch(catchCallback);
+```
+
+### on('playbackCompleted')8+
+
+on(type: 'playbackCompleted', callback: Callback\): void
+
+开始监听视频播放完成事件。
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | -------- | ---- | ----------------------------------------------------------- |
+| type | string | 是 | 视频播放完成事件回调类型,支持的事件:'playbackCompleted'。 |
+| callback | function | 是 | 视频播放完成事件回调方法。 |
+
+**示例:**
+
+```js
+videoPlayer.on('playbackCompleted', () => {
+ console.info('playbackCompleted success!');
+});
+```
+
+### on('bufferingUpdate')8+
+
+on(type: 'bufferingUpdate', callback: (infoType: BufferingInfoType, value: number) => void): void
+
+开始监听视频缓存更新事件。
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | -------- | ---- | ------------------------------------------------------------ |
+| type | string | 是 | 视频缓存事件回调类型,支持的事件:'bufferingUpdate'。 |
+| callback | function | 是 | 视频缓存事件回调方法。
[BufferingInfoType](#bufferinginfotype8)为BUFFERING_PERCENT或CACHED_DURATION时,value值有效,否则固定为0。 |
+
+**示例:**
+
+```js
+videoPlayer.on('bufferingUpdate', (infoType, value) => {
+ console.log('video bufferingInfo type: ' + infoType);
+ console.log('video bufferingInfo value: ' + value);
+});
+```
+
+### on('startRenderFrame')8+
+
+on(type: 'startRenderFrame', callback: Callback\): void
+
+开始监听视频播放首帧送显上报事件。
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | -------- | ---- | ------------------------------------------------------------ |
+| type | string | 是 | 视频播放首帧送显上报事件回调类型,支持的事件:'startRenderFrame'。 |
+| callback | function | 是 | 视频播放首帧送显上报事件回调方法。 |
+
+**示例:**
+
+```js
+videoPlayer.on('startRenderFrame', () => {
+ console.info('startRenderFrame success!');
+});
+```
+
+### on('videoSizeChanged')8+
+
+on(type: 'videoSizeChanged', callback: (width: number, height: number) => void): void
+
+开始监听视频播放宽高变化事件。
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | -------- | ---- | ------------------------------------------------------------ |
+| type | string | 是 | 视频播放宽高变化事件回调类型,支持的事件:'videoSizeChanged'。 |
+| callback | function | 是 | 视频播放宽高变化事件回调方法,width表示宽,height表示高。 |
+
+**示例:**
+
+```js
+videoPlayer.on('videoSizeChanged', (width, height) => {
+ console.log('video width is: ' + width);
+ console.log('video height is: ' + height);
+});
+```
+
+### on('error')8+
+
+on(type: 'error', callback: ErrorCallback): void
+
+开始监听视频播放错误事件。
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | -------- | ---- | ------------------------------------------------------------ |
+| type | string | 是 | 播放错误事件回调类型,支持的事件包括:'error'。
- 'error':视频播放中发生错误,触发该事件。 |
+| callback | function | 是 | 播放错误事件回调方法。 |
+
+**示例:**
+
+```js
+videoPlayer.on('error', (error) => { // 设置'error'事件回调
+ console.info(`video error called, errName is ${error.name}`); // 打印错误类型名称
+ console.info(`video error called, errCode is ${error.code}`); // 打印错误码
+ console.info(`video error called, errMessage is ${error.message}`);// 打印错误类型详细描述
+});
+videoPlayer.setVolume(3); //设置volume为无效值,触发'error'事件
+```
+
+## VideoPlayState8+
+
+视频播放的状态机,可通过state属性获取当前状态。
+
+| 名称 | 类型 | 描述 |
+| -------- | ------ | -------------- |
+| idle | string | 视频播放空闲。 |
+| prepared | string | 视频播放准备。 |
+| playing | string | 视频正在播放。 |
+| paused | string | 视频暂停播放。 |
+| stopped | string | 视频播放停止。 |
+| error | string | 错误状态。 |
+
+## SeekMode8+
+
+视频播放的Seek模式枚举,可通过seek方法作为参数传递下去。
+
+| 名称 | 值 | 描述 |
+| ----------------- | ---- | ------------------------------------------------------------ |
+| SEEK_NEXT_SYNC | 0 | 表示跳转到指定时间点的下一个关键帧,建议向后快进的时候用这个枚举值 |
+| SEEK_PREV_SYNC | 1 | 表示跳转到指定时间点的上一个关键帧,建议向前快进的时候用这个枚举值 |
+| SEEK_CLOSEST_SYNC | 2 | 表示跳转到指定时间点最近的关键帧。 |
+| SEEK_CLOSEST | 3 | 表示精确跳转到指定时间点。 |
+
+## PlaybackSpeed8+
+
+视频播放的倍速枚举,可通过setSpeed方法作为参数传递下去。
+
+| 名称 | 值 | 描述 |
+| -------------------- | ---- | ------------------------------ |
+| SPEED_FORWARD_0_75_X | 0 | 表示视频播放正常播速的0.75倍。 |
+| SPEED_FORWARD_1_00_X | 1 | 表示视频播放正常播速。 |
+| SPEED_FORWARD_1_25_X | 2 | 表示视频播放正常播速的1.25倍。 |
+| SPEED_FORWARD_1_75_X | 3 | 表示视频播放正常播速的1.75倍。 |
+| SPEED_FORWARD_2_00_X | 4 | 表示视频播放正常播速的2.00倍。 |
+
## MediaDescription8+
### [key : string] : any