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

!22792 媒体子系统播放框架示例代码规范整改

Merge pull request !22792 from FULIZHONG/master
...@@ -64,9 +64,10 @@ ...@@ -64,9 +64,10 @@
import media from '@ohos.multimedia.media'; import media from '@ohos.multimedia.media';
import fs from '@ohos.file.fs'; import fs from '@ohos.file.fs';
import common from '@ohos.app.ability.common'; import common from '@ohos.app.ability.common';
import { BusinessError } from '@ohos.base';
export class AVPlayerDemo { export class AVPlayerDemo {
private avPlayer; private avPlayer: media.AVPlayer;
private count: number = 0; private count: number = 0;
private isSeek: boolean = true; // 用于区分模式是否支持seek操作 private isSeek: boolean = true; // 用于区分模式是否支持seek操作
private fileSize: number = -1; private fileSize: number = -1;
...@@ -74,28 +75,24 @@ export class AVPlayerDemo { ...@@ -74,28 +75,24 @@ export class AVPlayerDemo {
// 注册avplayer回调函数 // 注册avplayer回调函数
setAVPlayerCallback() { setAVPlayerCallback() {
// seek操作结果回调函数 // seek操作结果回调函数
this.avPlayer.on('seekDone', (seekDoneTime) => { this.avPlayer.on('seekDone', (seekDoneTime: number) => {
console.info(`AVPlayer seek succeeded, seek time is ${seekDoneTime}`); console.info(`AVPlayer seek succeeded, seek time is ${seekDoneTime}`);
}) })
// error回调监听函数,当avPlayer在操作过程中出现错误时调用reset接口触发重置流程 // error回调监听函数,当avPlayer在操作过程中出现错误时调用 reset接口触发重置流程
this.avPlayer.on('error', (err) => { this.avPlayer.on('error', (err: BusinessError) => {
console.error(`Invoke avPlayer failed, code is ${err.code}, message is ${err.message}`); console.error(`Invoke avPlayer failed, code is ${err.code}, message is ${err.message}`);
this.avPlayer.reset(); // 调用reset重置资源,触发idle状态 this.avPlayer.reset(); // 调用reset重置资源,触发idle状态
}) })
// 状态机变化回调函数 // 状态机变化回调函数
this.avPlayer.on('stateChange', async (state, reason) => { this.avPlayer.on('stateChange', async (state: string, reason: media.StateChangeReason) => {
switch (state) { switch (state) {
case 'idle': // 成功调用reset接口后触发该状态机上报 case 'idle': // 成功调用reset接口后触发该状态机上报
console.info('AVPlayer state idle called.'); console.info('AVPlayer state idle called.');
this.avPlayer.release(); // 调用release接口销毁实例对象 this.avPlayer.release(); // 调用release接口销毁实例对象
break; break;
case 'initialized': // avplayer 设置播放源后触发该状态上报 case 'initialized': // avplayer 设置播放源后触发该状态上报
console.info('AVPlayerstate initialized called.'); console.info('AVPlayer state initialized called.');
this.avPlayer.prepare().then(() => { this.avPlayer.prepare();
console.info('AVPlayer prepare succeeded.');
}, (err) => {
console.error(`Invoke prepare failed, code is ${err.code}, message is ${err.message}`);
});
break; break;
case 'prepared': // prepare调用成功后上报该状态机 case 'prepared': // prepare调用成功后上报该状态机
console.info('AVPlayer state prepared called.'); console.info('AVPlayer state prepared called.');
...@@ -166,9 +163,11 @@ export class AVPlayerDemo { ...@@ -166,9 +163,11 @@ export class AVPlayerDemo {
// 返回类型为{fd,offset,length},fd为HAP包fd地址,offset为媒体资源偏移量,length为播放长度 // 返回类型为{fd,offset,length},fd为HAP包fd地址,offset为媒体资源偏移量,length为播放长度
let context = getContext(this) as common.UIAbilityContext; let context = getContext(this) as common.UIAbilityContext;
let fileDescriptor = await context.resourceManager.getRawFd('01.mp3'); let fileDescriptor = await context.resourceManager.getRawFd('01.mp3');
let avFileDescriptor: media.AVFileDescriptor =
{ fd: fileDescriptor.fd, offset: fileDescriptor.offset, length: fileDescriptor.length };
this.isSeek = true; // 支持seek操作 this.isSeek = true; // 支持seek操作
// 为fdSrc赋值触发initialized状态机上报 // 为fdSrc赋值触发initialized状态机上报
this.avPlayer.fdSrc = fileDescriptor; this.avPlayer.fdSrc = avFileDescriptor;
} }
// 以下demo为使用fs文件系统打开沙箱地址获取媒体文件地址并通过dataSrc属性进行播放(seek模式)示例 // 以下demo为使用fs文件系统打开沙箱地址获取媒体文件地址并通过dataSrc属性进行播放(seek模式)示例
...@@ -178,9 +177,9 @@ export class AVPlayerDemo { ...@@ -178,9 +177,9 @@ export class AVPlayerDemo {
// 创建状态机变化回调函数 // 创建状态机变化回调函数
this.setAVPlayerCallback(); this.setAVPlayerCallback();
// dataSrc播放模式的的播放源地址,当播放为Seek模式时fileSize为播放文件的具体大小,下面会对fileSize赋值 // dataSrc播放模式的的播放源地址,当播放为Seek模式时fileSize为播放文件的具体大小,下面会对fileSize赋值
let src = { let src: media.AVDataSrcDescriptor = {
fileSize: -1, fileSize: -1,
callback: (buf, length, pos) => { callback: (buf: ArrayBuffer, length: number, pos: number) => {
let num = 0; let num = 0;
if (buf == undefined || length == undefined || pos == undefined) { if (buf == undefined || length == undefined || pos == undefined) {
return -1; return -1;
...@@ -196,7 +195,7 @@ export class AVPlayerDemo { ...@@ -196,7 +195,7 @@ export class AVPlayerDemo {
// 通过UIAbilityContext获取沙箱地址filesDir,以Stage模型为例 // 通过UIAbilityContext获取沙箱地址filesDir,以Stage模型为例
let pathDir = context.filesDir; let pathDir = context.filesDir;
let path = pathDir + '/01.mp3'; let path = pathDir + '/01.mp3';
await fs.open(path).then((file) => { await fs.open(path).then((file: fs.File) => {
this.fd = file.fd; this.fd = file.fd;
}) })
// 获取播放文件的大小 // 获取播放文件的大小
...@@ -213,9 +212,9 @@ export class AVPlayerDemo { ...@@ -213,9 +212,9 @@ export class AVPlayerDemo {
// 创建状态机变化回调函数 // 创建状态机变化回调函数
this.setAVPlayerCallback(); this.setAVPlayerCallback();
let context = getContext(this) as common.UIAbilityContext; let context = getContext(this) as common.UIAbilityContext;
let src: object = { let src: media.AVDataSrcDescriptor = {
fileSize: -1, fileSize: -1,
callback: (buf, length, pos) => { callback: (buf: ArrayBuffer, length: number) => {
let num = 0; let num = 0;
if (buf == undefined || length == undefined) { if (buf == undefined || length == undefined) {
return -1; return -1;
...@@ -230,7 +229,7 @@ export class AVPlayerDemo { ...@@ -230,7 +229,7 @@ export class AVPlayerDemo {
// 通过UIAbilityContext获取沙箱地址filesDir,以Stage模型为例 // 通过UIAbilityContext获取沙箱地址filesDir,以Stage模型为例
let pathDir = context.filesDir; let pathDir = context.filesDir;
let path = pathDir + '/01.mp3'; let path = pathDir + '/01.mp3';
await fs.open(path).then((file) => { await fs.open(path).then((file: fs.File) => {
this.fd = file.fd; this.fd = file.fd;
}) })
this.isSeek = false; // 不支持seek操作 this.isSeek = false; // 不支持seek操作
......
...@@ -73,9 +73,10 @@ ...@@ -73,9 +73,10 @@
import media from '@ohos.multimedia.media'; import media from '@ohos.multimedia.media';
import fs from '@ohos.file.fs'; import fs from '@ohos.file.fs';
import common from '@ohos.app.ability.common'; import common from '@ohos.app.ability.common';
import { BusinessError } from '@ohos.base';
export class AVPlayerDemo { export class AVPlayerDemo {
private avPlayer; private avPlayer: media.AVPlayer;
private count: number = 0; private count: number = 0;
private surfaceID: string; // surfaceID用于播放画面显示,具体的值需要通过Xcomponent接口获取,相关文档链接见上面Xcomponent创建方法 private surfaceID: string; // surfaceID用于播放画面显示,具体的值需要通过Xcomponent接口获取,相关文档链接见上面Xcomponent创建方法
private isSeek: boolean = true; // 用于区分模式是否支持seek操作 private isSeek: boolean = true; // 用于区分模式是否支持seek操作
...@@ -84,29 +85,25 @@ export class AVPlayerDemo { ...@@ -84,29 +85,25 @@ export class AVPlayerDemo {
// 注册avplayer回调函数 // 注册avplayer回调函数
setAVPlayerCallback() { setAVPlayerCallback() {
// seek操作结果回调函数 // seek操作结果回调函数
this.avPlayer.on('seekDone', (seekDoneTime) => { this.avPlayer.on('seekDone', (seekDoneTime: number) => {
console.info(`AVPlayer seek succeeded, seek time is ${seekDoneTime}`); console.info(`AVPlayer seek succeeded, seek time is ${seekDoneTime}`);
}) })
// error回调监听函数,当avPlayer在操作过程中出现错误时调用reset接口触发重置流程 // error回调监听函数,当avPlayer在操作过程中出现错误时调用reset接口触发重置流程
this.avPlayer.on('error', (err) => { this.avPlayer.on('error', (err: BusinessError) => {
console.error(`Invoke avPlayer failed, code is ${err.code}, message is ${err.message}`); console.error(`Invoke avPlayer failed, code is ${err.code}, message is ${err.message}`);
this.avPlayer.reset(); // 调用reset重置资源,触发idle状态 this.avPlayer.reset(); // 调用reset重置资源,触发idle状态
}) })
// 状态机变化回调函数 // 状态机变化回调函数
this.avPlayer.on('stateChange', async (state, reason) => { this.avPlayer.on('stateChange', async (state: string, reason: media.StateChangeReason) => {
switch (state) { switch (state) {
case 'idle': // 成功调用reset接口后触发该状态机上报 case 'idle': // 成功调用reset接口后触发该状态机上报
console.info('AVPlayer state idle called.'); console.info('AVPlayer state idle called.');
this.avPlayer.release(); // 调用release接口销毁实例对象 this.avPlayer.release(); // 调用release接口销毁实例对象
break; break;
case 'initialized': // avplayer 设置播放源后触发该状态上报 case 'initialized': // avplayer 设置播放源后触发该状态上报
console.info('AVPlayerstate initialized called.'); console.info('AVPlayer state initialized called.');
this.avPlayer.surfaceId = this.surfaceID; // 设置显示画面,当播放的资源为纯音频时无需设置 this.avPlayer.surfaceId = this.surfaceID; // 设置显示画面,当播放的资源为纯音频时无需设置
this.avPlayer.prepare().then(() => { this.avPlayer.prepare();
console.info('AVPlayer prepare succeeded.');
}, (err) => {
console.error(`Invoke prepare failed, code is ${err.code}, message is ${err.message}`);
});
break; break;
case 'prepared': // prepare调用成功后上报该状态机 case 'prepared': // prepare调用成功后上报该状态机
console.info('AVPlayer state prepared called.'); console.info('AVPlayer state prepared called.');
...@@ -177,9 +174,11 @@ export class AVPlayerDemo { ...@@ -177,9 +174,11 @@ export class AVPlayerDemo {
// 返回类型为{fd,offset,length},fd为HAP包fd地址,offset为媒体资源偏移量,length为播放长度 // 返回类型为{fd,offset,length},fd为HAP包fd地址,offset为媒体资源偏移量,length为播放长度
let context = getContext(this) as common.UIAbilityContext; let context = getContext(this) as common.UIAbilityContext;
let fileDescriptor = await context.resourceManager.getRawFd('H264_AAC.mp4'); let fileDescriptor = await context.resourceManager.getRawFd('H264_AAC.mp4');
let avFileDescriptor: media.AVFileDescriptor =
{ fd: fileDescriptor.fd, offset: fileDescriptor.offset, length: fileDescriptor.length };
this.isSeek = true; // 支持seek操作 this.isSeek = true; // 支持seek操作
// 为fdSrc赋值触发initialized状态机上报 // 为fdSrc赋值触发initialized状态机上报
this.avPlayer.fdSrc = fileDescriptor; this.avPlayer.fdSrc = avFileDescriptor;
} }
// 以下demo为使用fs文件系统打开沙箱地址获取媒体文件地址并通过dataSrc属性进行播放(seek模式)示例 // 以下demo为使用fs文件系统打开沙箱地址获取媒体文件地址并通过dataSrc属性进行播放(seek模式)示例
...@@ -189,9 +188,9 @@ export class AVPlayerDemo { ...@@ -189,9 +188,9 @@ export class AVPlayerDemo {
// 创建状态机变化回调函数 // 创建状态机变化回调函数
this.setAVPlayerCallback(); this.setAVPlayerCallback();
// dataSrc播放模式的的播放源地址,当播放为Seek模式时fileSize为播放文件的具体大小,下面会对fileSize赋值 // dataSrc播放模式的的播放源地址,当播放为Seek模式时fileSize为播放文件的具体大小,下面会对fileSize赋值
let src = { let src: media.AVDataSrcDescriptor = {
fileSize: -1, fileSize: -1,
callback: (buf, length, pos) => { callback: (buf: ArrayBuffer, length: number, pos: number) => {
let num = 0; let num = 0;
if (buf == undefined || length == undefined || pos == undefined) { if (buf == undefined || length == undefined || pos == undefined) {
return -1; return -1;
...@@ -207,7 +206,7 @@ export class AVPlayerDemo { ...@@ -207,7 +206,7 @@ export class AVPlayerDemo {
// 通过UIAbilityContext获取沙箱地址filesDir,以Stage模型为例 // 通过UIAbilityContext获取沙箱地址filesDir,以Stage模型为例
let pathDir = context.filesDir; let pathDir = context.filesDir;
let path = pathDir + '/H264_AAC.mp4'; let path = pathDir + '/H264_AAC.mp4';
await fs.open(path).then((file) => { await fs.open(path).then((file: fs.File) => {
this.fd = file.fd; this.fd = file.fd;
}) })
// 获取播放文件的大小 // 获取播放文件的大小
...@@ -224,9 +223,9 @@ export class AVPlayerDemo { ...@@ -224,9 +223,9 @@ export class AVPlayerDemo {
// 创建状态机变化回调函数 // 创建状态机变化回调函数
this.setAVPlayerCallback(); this.setAVPlayerCallback();
let context = getContext(this) as common.UIAbilityContext; let context = getContext(this) as common.UIAbilityContext;
let src: object = { let src: media.AVDataSrcDescriptor = {
fileSize: -1, fileSize: -1,
callback: (buf, length, pos) => { callback: (buf: ArrayBuffer, length: number) => {
let num = 0; let num = 0;
if (buf == undefined || length == undefined) { if (buf == undefined || length == undefined) {
return -1; return -1;
...@@ -241,7 +240,7 @@ export class AVPlayerDemo { ...@@ -241,7 +240,7 @@ export class AVPlayerDemo {
// 通过UIAbilityContext获取沙箱地址filesDir,以Stage模型为例 // 通过UIAbilityContext获取沙箱地址filesDir,以Stage模型为例
let pathDir = context.filesDir; let pathDir = context.filesDir;
let path = pathDir + '/H264_AAC.mp4'; let path = pathDir + '/H264_AAC.mp4';
await fs.open(path).then((file) => { await fs.open(path).then((file: fs.File) => {
this.fd = file.fd; this.fd = file.fd;
}) })
this.isSeek = false; // 不支持seek操作 this.isSeek = false; // 不支持seek操作
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册