未验证 提交 d07fc9fe 编写于 作者: O openharmony_ci 提交者: Gitee

!9591 媒体子系统播放框架资料问题修改

Merge pull request !9591 from FULIZHONG/0916ziliao
......@@ -276,8 +276,8 @@ Codec MIME类型枚举。
| 名称 | 类型 | 可读 | 可写 | 说明 |
| ------------------------------- | ----------------------------------- | ---- | ---- | ------------------------------------------------------------ |
| src | string | 是 | 是 | 音频媒体URI,支持当前主流的音频格式(m4a、aac、mp3、ogg、wav)。<br>**支持路径示例**<br>1. fd类型播放:fd://xx<br>![](figures/zh-cn_image_url.png)<br>2. http网络播放: http://xx<br/>3. https网络播放: https://xx<br/>4. hls网络播放路径:http://xx或者https://xx<br/>**需要权限:** ohos.permission.READ_MEDIA;如果需要使用网络素材,还需要申请ohos.permission.INTERNET。 |
| fdSrc<sup>9+</sup> | [AVFileDescriptor](#interruptmode9) | 是 | 是 | 音频媒体文件描述,使用场景:应用中的音频资源被连续存储在同一个文件中。<br/>**使用示例**<br/>假设一个连续存储的音乐文件: <br/>音乐1(地址偏移:0,字节长度:100)<br/>音乐2(地址偏移:101,字节长度:50)<br/>音乐3(地址偏移:151,字节长度:150)<br/>1. 播放音乐1:AVFileDescriptor { fd = 资源句柄; offset = 0; length = 100; }<br/>2. 播放音乐2:AVFileDescriptor { fd = 资源句柄; offset = 101; length = 50; }<br/>3. 播放音乐3:AVFileDescriptor { fd = 资源句柄; offset = 151; length = 150; }<br/>假设是一个独立的音乐文件: 请使用src=fd://xx <br/>**注意事项**<br/>**需要权限:** ohos.permission.READ_MEDIA |
| src | string | 是 | 是 | 音频媒体URI,支持当前主流的音频格式(m4a、aac、mp3、ogg、wav)。<br>**支持路径示例**<br>1. fd类型播放:fd://xx<br>![](figures/zh-cn_image_url.png)<br>2. http网络播放: http://xx<br/>3. https网络播放: https://xx<br/>4. hls网络播放路径:http://xx或者https://xx<br/>**需要权限:** ohos.permission.INTERNET。 |
| fdSrc<sup>9+</sup> | [AVFileDescriptor](#interruptmode9) | 是 | 是 | 音频媒体文件描述,使用场景:应用中的音频资源被连续存储在同一个文件中。<br/>**使用示例**<br/>假设一个连续存储的音乐文件: <br/>音乐1(地址偏移:0,字节长度:100)<br/>音乐2(地址偏移:101,字节长度:50)<br/>音乐3(地址偏移:151,字节长度:150)<br/>1. 播放音乐1:AVFileDescriptor { fd = 资源句柄; offset = 0; length = 100; }<br/>2. 播放音乐2:AVFileDescriptor { fd = 资源句柄; offset = 101; length = 50; }<br/>3. 播放音乐3:AVFileDescriptor { fd = 资源句柄; offset = 151; length = 150; }<br/>假设是一个独立的音乐文件: 请使用src=fd://xx <br/> |
| loop | boolean | 是 | 是 | 音频循环播放属性,设置为'true'表示循环播放。 |
| audioInterruptMode<sup>9+</sup> | [InterruptMode](#interruptmode9) | 是 | 是 | 音频焦点模型。 |
| currentTime | number | 是 | 否 | 音频的当前播放位置,单位为毫秒(ms)。 |
......@@ -441,7 +441,7 @@ function printfDescription(obj) {
}
}
audioPlayer.getTrackDescription((error, arrlist) => {
audioPlayer.getTrackDescription((error, ) => {
if (arrlist != null) {
for (let i = 0; i < arrlist.length; i++) {
printfDescription(arrlist[i]);
......@@ -476,7 +476,7 @@ function printfDescription(obj) {
console.info('audio value is ' + property);
}
}
let arrayDescription = null
audioPlayer.getTrackDescription().then((arrlist) => {
if (arrlist != null) {
arrayDescription = arrlist;
......@@ -534,6 +534,8 @@ on(type: 'play' | 'pause' | 'stop' | 'reset' | 'dataLoad' | 'finish' | 'volumeCh
**示例:**
```js
import fileio from '@ohos.fileio'
let audioPlayer = media.createAudioPlayer(); //创建一个音频播放实例
audioPlayer.on('dataLoad', () => { //设置'dataLoad'事件回调,src属性设置成功后,触发此回调
console.info('audio set source success');
......@@ -573,11 +575,11 @@ audioPlayer.on('error', (error) => { //设置'error'事件回调
});
// 用户选择视频设置fd(本地播放)
let fdPath = 'fd://'
let fdPath = 'fd://';
// path路径的码流可通过"hdc file send D:\xxx\01.mp3 /data/accounts/account_0/appdata" 命令,将其推送到设备上
let path = '/data/accounts/account_0/appdata/ohos.xxx.xxx.xxx/01.mp3';
fileIO.open(path).then(fdNumber) => {
fdPath = fdPath + '' + fdNumber;
fileio.open(path).then((fdValue) => {
fdPath = fdPath + '' + fdValue;
console.info('open fd success fd is' + fdPath);
}, (err) => {
console.info('open fd failed err is' + err);
......@@ -645,19 +647,19 @@ audioPlayer.setVolume(3); //设置volume为无效值,触发'error'事件
**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.AudioPlayer。
| 名称 | 类型 | 描述 |
| ------------------ | ------ | ---------------------------------------------- |
| idle | string | 音频播放空闲,dataload/reset成功后处于此状态。 |
| playing | string | 音频正在播放,play成功后处于此状态。 |
| paused | string | 音频暂停播放,pause成功后处于此状态。 |
| stopped | string | 音频播放停止,stop/播放结束后处于此状态。 |
| error<sup>8+</sup> | string | 错误状态。 |
| 名称 | 类型 | 描述 |
| ------- | ------ | ---------------------------------------------- |
| idle | string | 音频播放空闲,dataload/reset成功后处于此状态。 |
| playing | string | 音频正在播放,play成功后处于此状态。 |
| paused | string | 音频暂停播放,pause成功后处于此状态。 |
| stopped | string | 音频播放停止,stop/播放结束后处于此状态。 |
| error | string | 错误状态。 |
## AVFileDescriptor<sup>9+</sup>
音视频文件资源描述,一种特殊资源的播放方式,使用场景:应用中的音频资源被连续存储在同一个文件中,需要根据偏移量和长度进行播放。
**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
**系统能力:** SystemCapability.Multimedia.Media.Core
**参数:**
......@@ -673,10 +675,7 @@ audioPlayer.setVolume(3); //设置volume为无效值,触发'error'事件
**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
| 名称 | 默认值 | 描述 |
| ---------------------------- | ------ | ---------- |
| SHARE_MODE | 0 | 共享焦点模式。 |
| INDEPENDENT_MODE| 1 | 独立焦点模式。 |
具体参数值请查询[@ohos.multimedia.audio.d.ts](https://gitee.com/openharmony/interface_sdk-js/blob/master/api/@ohos.multimedia.audio.d.ts)
## VideoPlayer<sup>8+</sup>
......@@ -690,8 +689,8 @@ audioPlayer.setVolume(3); //设置volume为无效值,触发'error'事件
| 名称 | 类型 | 可读 | 可写 | 说明 |
| ------------------------ | ---------------------------------- | ---- | ---- | ------------------------------------------------------------ |
| url<sup>8+</sup> | string | 是 | 是 | 视频媒体URL,支持当前主流的视频格式(mp4、mpeg-ts、webm、mkv)。<br>**支持路径示例**<br>1. fd类型播放:fd://xx<br>![](figures/zh-cn_image_url.png)<br>2. http网络播放: http://xx<br/>3. https网络播放: https://xx<br/>4. hls网络播放路径:http://xx或者https://xx<br/>**需要权限:** ohos.permission.READ_MEDIA;如果需要使用网络素材,还需要申请ohos.permission.INTERNET。 |
| fdSrc<sup>9+</sup> | [AVFileDescriptor](#interruptmode9) | 是 | 是 | 视频媒体文件描述,使用场景:应用中的视频资源被连续存储在同一个文件中。<br/>**使用示例**<br/>假设一个连续存储的音乐文件: <br/>视频1(地址偏移:0,字节长度:100)<br/>视频2(地址偏移:101,字节长度:50)<br/>视频3(地址偏移:151,字节长度:150)<br/>1. 播放视频1:AVFileDescriptor { fd = 资源句柄; offset = 0; length = 100; }<br/>2. 播放视频2:AVFileDescriptor { fd = 资源句柄; offset = 101; length = 50; }<br/>3. 播放视频3:AVFileDescriptor { fd = 资源句柄; offset = 151; length = 150; }<br/>假设是一个独立的视频文件: 请使用src=fd://xx <br/>**注意事项**<br/>**需要权限:** ohos.permission.READ_MEDIA |
| url<sup>8+</sup> | string | 是 | 是 | 视频媒体URL,支持当前主流的视频格式(mp4、mpeg-ts、webm、mkv)。<br>**支持路径示例**<br>1. fd类型播放:fd://xx<br>![](figures/zh-cn_image_url.png)<br>2. http网络播放: http://xx<br/>3. https网络播放: https://xx<br/>4. hls网络播放路径:http://xx或者https://xx<br/>**需要权限:** ohos.permission.INTERNET。 |
| fdSrc<sup>9+</sup> | [AVFileDescriptor](#interruptmode9) | 是 | 是 | 视频媒体文件描述,使用场景:应用中的视频资源被连续存储在同一个文件中。<br/>**使用示例**<br/>假设一个连续存储的音乐文件: <br/>视频1(地址偏移:0,字节长度:100)<br/>视频2(地址偏移:101,字节长度:50)<br/>视频3(地址偏移:151,字节长度:150)<br/>1. 播放视频1:AVFileDescriptor { fd = 资源句柄; offset = 0; length = 100; }<br/>2. 播放视频2:AVFileDescriptor { fd = 资源句柄; offset = 101; length = 50; }<br/>3. 播放视频3:AVFileDescriptor { fd = 资源句柄; offset = 151; length = 150; }<br/>假设是一个独立的视频文件: 请使用src=fd://xx <br/> |
| loop<sup>8+</sup> | boolean | 是 | 是 | 视频循环播放属性,设置为'true'表示循环播放。 |
| videoScaleType<sup>9+</sup> | [VideoScaleType](#videoscaletype9) | 是 | 是 | 视频缩放模式。 |
| audioInterruptMode<sup>9+</sup> | [InterruptMode](#interruptmode9) | 是 | 是 | 音频焦点模型。 |
......@@ -721,6 +720,7 @@ setDisplaySurface(surfaceId: string, callback: AsyncCallback\<void>): void
**示例:**
```js
let surfaceId = null;
videoPlayer.setDisplaySurface(surfaceId, (err) => {
if (err == null) {
console.info('setDisplaySurface success!');
......@@ -755,6 +755,7 @@ setDisplaySurface(surfaceId: string): Promise\<void>
**示例:**
```js
let surfaceId = null;
videoPlayer.setDisplaySurface(surfaceId).then(() => {
console.info('setDisplaySurface success');
}).catch((error) => {
......@@ -1061,8 +1062,7 @@ seek(timeMs: number, mode:SeekMode, callback: AsyncCallback\<number>): void
```js
import media from '@ohos.multimedia.media'
let seekTime = 5000;
let seekMode = media.SeekMode.SEEK_NEXT_SYNC;
videoPlayer.seek(seekTime, seekMode, (err, result) => {
videoPlayer.seek(seekTime, media.SeekMode.SEEK_NEXT_SYNC, (err, result) => {
if (err == null) {
console.info('seek success!');
} else {
......@@ -1095,6 +1095,7 @@ seek(timeMs: number, mode?:SeekMode): Promise\<number>
**示例:**
```js
import media from '@ohos.multimedia.media'
let seekTime = 5000;
videoPlayer.seek(seekTime).then((seekDoneTime) => { // seekDoneTime表示seek完成后的时间点
console.info('seek success');
......@@ -1102,7 +1103,7 @@ videoPlayer.seek(seekTime).then((seekDoneTime) => { // seekDoneTime表示seek完
console.info(`video catchCallback, error:${error}`);
});
videoPlayer.seek(seekTime, seekMode).then((seekDoneTime) => {
videoPlayer.seek(seekTime, media.SeekMode.SEEK_NEXT_SYNC).then((seekDoneTime) => {
console.info('seek success');
}).catch((error) => {
console.info(`video catchCallback, error:${error}`);
......@@ -1161,7 +1162,7 @@ setVolume(vol: number): Promise\<void>
```js
let vol = 0.5;
videoPlayer.setVolume(vol).then() => {
videoPlayer.setVolume(vol).then(() => {
console.info('setVolume success');
}).catch((error) => {
console.info(`video catchCallback, error:${error}`);
......@@ -1211,7 +1212,7 @@ release(): Promise\<void>
**示例:**
```js
videoPlayer.release().then() => {
videoPlayer.release().then(() => {
console.info('release success');
}).catch((error) => {
console.info(`video catchCallback, error:${error}`);
......@@ -1244,7 +1245,7 @@ function printfDescription(obj) {
}
videoPlayer.getTrackDescription((error, arrlist) => {
if (arrlist) != null) {
if ((arrlist) != null) {
for (let i = 0; i < arrlist.length; i++) {
printfDescription(arrlist[i]);
}
......@@ -1350,7 +1351,7 @@ setSpeed(speed:number): Promise\<number>
import media from '@ohos.multimedia.media'
let speed = media.PlaybackSpeed.SPEED_FORWARD_2_00_X;
videoPlayer.setSpeed(speed).then() => {
videoPlayer.setSpeed(speed).then(() => {
console.info('setSpeed success');
}).catch((error) => {
console.info(`video catchCallback, error:${error}`);
......@@ -1409,7 +1410,7 @@ selectBitrate(bitrate:number): Promise\<number>
```js
let bitrate = 1024000;
videoPlayer.selectBitrate(bitrate).then() => {
videoPlayer.selectBitrate(bitrate).then(() => {
console.info('selectBitrate success');
}).catch((error) => {
console.info(`video catchCallback, error:${error}`);
......@@ -1612,30 +1613,24 @@ videoPlayer.on('availableBitratesCollect', (bitrates) => {
## MediaDescription<sup>8+</sup>
### [key : string] : Object
通过key-value方式获取媒体信息。
**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.Core。
| 名称 | 类型 | 说明 |
| ----- | ------ | ------------------------------------------------------------ |
| key | string | 通过key值获取对应的value。key值具体可见[MediaDescriptionKey](#mediadescriptionkey8)。 |
| value | any | 对应key值得value。其类型可为任意类型,具体key对应value的类型可参考[MediaDescriptionKey](#mediadescriptionkey8)的描述信息。 |
**示例:**
```js
import media from '@ohos.multimedia.media'
function printfItemDescription(obj, key) {
let property = obj[key];
console.info('audio key is ' + key);
console.info('audio value is ' + property);
console.info('audio key is ' + key); // 通过key值获取对应的value。key值具体可见[MediaDescriptionKey]
console.info('audio value is ' + property); //对应key值得value。其类型可为任意类型,具体key对应value的类型可参考[MediaDescriptionKey]
}
let audioPlayer = media.createAudioPlayer();
audioPlayer.getTrackDescription((error, arrlist) => {
if (arrlist != null) {
for (let i = 0; i < arrlist.length; i++) {
printfItemDescription(arrlist[i], MD_KEY_TRACK_TYPE); //打印出每条轨道MD_KEY_TRACK_TYPE的值
printfItemDescription(arrlist[i], media.MediaDescriptionKey.MD_KEY_TRACK_TYPE); //打印出每条轨道MD_KEY_TRACK_TYPE的值
}
} else {
console.log(`audio getTrackDescription fail, error:${error}`);
......@@ -1807,7 +1802,7 @@ on(type: 'prepare' | 'start' | 'pause' | 'resume' | 'stop' | 'release' | 'reset'
**示例:**
```js
let audiorecorder = media.createAudioRecorder(); // 创建一个音频录制实例
let audioRecorder = media.createAudioRecorder(); // 创建一个音频录制实例
let audioRecorderConfig = {
audioEncoder : media.AudioEncoder.AAC_LC, ,
audioEncodeBitRate : 22050,
......@@ -1863,10 +1858,19 @@ on(type: 'error', callback: ErrorCallback): void
**示例:**
```js
let audioRecorderConfig = {
audioEncoder : media.AudioEncoder.AAC_LC, ,
audioEncodeBitRate : 22050,
audioSampleRate : 22050,
numberOfChannels : 2,
format : media.AudioOutputFormat.AAC_ADTS,
uri : 'fd://xx', // 文件需先由调用者创建,并给予适当的权限
location : { latitude : 30, longitude : 130},
}
audioRecorder.on('error', (error) => { // 设置'error'事件回调
console.info(`audio error called, error: ${error}`);
});
audioRecorder.prepare(); // prepare不设置参数,触发'error'事件
audioRecorder.prepare(audioRecorderConfig); // prepare不设置参数,触发'error'事件
```
## AudioRecorderConfig
......@@ -2057,18 +2061,17 @@ media.createVideoRecorder().then((recorder) => {
if (recorder != null) {
videoRecorder = recorder;
console.info('createVideoRecorder success');
videoRecorder.prepare(videoConfig).then(() => {
console.info('prepare success');
}).catch((err) => {
console.info('prepare failed and catch error is ' + err.message);
});
} else {
console.info('createVideoRecorder failed');
}
}).catch((err) => {
console.info('catch err error message is ' + err.message);
});
videoRecorder.prepare(videoConfig).then(() => {
console.info('prepare success');
}).catch((err) => {
console.info('prepare failed and catch error is ' + err.message);
});
```
### getInputSurface<sup>9+</sup>
......@@ -2483,6 +2486,7 @@ on(type: 'error', callback: ErrorCallback): void
```js
videoRecorder.on('error', (error) => { // 设置'error'事件回调
console.info(`audio error called, error: ${error}`);
}
// 当获取videoRecordState接口出错时通过此订阅事件上报
});
```
......@@ -2515,7 +2519,7 @@ videoRecorder.on('error', (error) => { // 设
| profile | [VideoRecorderProfile](#videorecorderprofile9) | 是 | 视频录制的profile。 |
| rotation | number | 否 | 录制视频的旋转角度。 |
| location | [Location](#location) | 否 | 录制视频的地理位置。 |
| url | string | 是 | 视频输出URL:fd://xx&nbsp;(fd&nbsp;number)<br/>![](figures/zh-cn_image_url.png) <br/>**需要权限:** ohos.permission.READ_MEDIA; |
| url | string | 是 | 视频输出URL:fd://xx&nbsp;(fd&nbsp;number)<br/>![](figures/zh-cn_image_url.png) <br/> |
## AudioSourceType<sup>9+</sup>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册