HarmonyOS 鸿蒙Next 使用AVPlayer播放在线mp3时怎么设置资源
HarmonyOS 鸿蒙Next 使用AVPlayer播放在线mp3时怎么设置资源
在使用AVplayer播放在线MP3音频时需要设置dataSrc属性,这边只有一个mp3的播放地址,请问如何生成AVDataSrcDescriptor并设置到dataSrc上进行播放。
2 回复
HarmonyOS 鸿蒙Next 使用AVPlayer播放在线mp3时设置资源可以 参考以下demo实现,mp3文件放在rawfile目录
// audio3.ets 第一部分
import media from '[@ohos](/user/ohos).multimedia.media';
import { BusinessError } from '[@ohos](/user/ohos).base';
import common from '[@ohos](/user/ohos).app.ability.common';
// 音频播放
export class AVPlayerDemo {
public curAudioPath: string = '';
public avFileDescriptor4: media.AVFileDescriptor| undefined = undefined ;
// 注册avplayer回调函数
setAVPlayerCallback(avPlayer: media.AVPlayer): void {
// seek操作结果回调函数
avPlayer.on('seekDone', (seekDoneTime: number) => {
console.info(`AVPlayer seek succeeded, seek time is ${seekDoneTime}`);
})
// error回调监听函数,当avPlayer在操作过程中出现错误时调用 reset接口触发重置流程
avPlayer.on('error', (err: BusinessError) => {
console.error(`Invoke avPlayer failed, code is ${err.code}, message is ${err.message}`);
avPlayer.reset(); // 调用reset重置资源,触发idle状态
})
// 状态机变化回调函数
avPlayer.on('stateChange', async (state: string, _: media.StateChangeReason) => {
switch (state) {
case 'idle': // 成功调用reset接口后触发该状态机上报
console.info('AVPlayer state idle called.');
avPlayer.release(); // 调用release接口销毁实例对象
break;
case 'initialized': // avplayer 设置播放源后触发该状态上报
console.info('AVPlayer state initialized called.');
avPlayer.prepare();
break;
case 'prepared': // prepare调用成功后上报该状态机
console.info('AVPlayer state prepared called.');
avPlayer.play(); // 调用播放接口开始播放
break;
case 'playing': // play成功调用后触发该状态机上报
console.info('AVPlayer state playing called.');
break;
case 'paused': // pause成功调用后触发该状态机上报
console.info('AVPlayer state paused called.');
avPlayer.play(); // 再次播放接口开始播放
break;
case 'completed': // 播放结束后触发该状态机上报
console.info('AVPlayer state completed called.');
avPlayer.stop(); //调用播放结束接口
break;
// audio3.ets 第二部分
case 'stopped': // stop接口成功调用后触发该状态机上报
console.info('AVPlayer state stopped called.');
avPlayer.reset(); // 调用reset接口初始化avplayer状态
break;
case 'released':
console.info('AVPlayer state released called.');
break;
default:
console.info('AVPlayer state unknown called.');
break;
}
})
}
async play(audioPath:string): Promise<void> {
// 创建avPlayer实例对象
try {
const avPlayer: media.AVPlayer = await media.createAVPlayer();
avPlayer.audioRendererInfo
// 创建状态机变化回调函数
await this.setAVPlayerCallback(avPlayer);
// 通过UIAbilityContext获取沙箱地址filesDir,以Stage模型为例
const context = getContext(this) as common.UIAbilityContext;
if(this.curAudioPath != audioPath) {
let fileDescriptor = await context.resourceManager.getRawFd(audioPath);
this.avFileDescriptor4 =
{ fd: fileDescriptor.fd, offset: fileDescriptor.offset, length: fileDescriptor.length };
this.curAudioPath = audioPath;
}
// 为fdSrc赋值触发initialized状态机上报
avPlayer.fdSrc = this.avFileDescriptor4;
} catch (e) {
console.error("=============hwj===" + e)
// Logger.error("=============hwj===" + e)
}
}
}
[@Entry](/user/Entry)
[@Component](/user/Component)
export struct Audio3 {
AVplaer = new AVPlayerDemo();
build() {
Column() {
Button('播放音频-多个avPlayer')
.onClick(() => {
this.AVplaer.play('muyu0.mp3');
}).width(200)
}
.width('100%')
}
}
更多关于HarmonyOS 鸿蒙Next 使用AVPlayer播放在线mp3时怎么设置资源的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next系统中,使用AVPlayer播放在线MP3时,设置资源的方法通常涉及指定媒体资源的URI(统一资源标识符)。以下是如何设置资源的基本步骤:
-
创建AVPlayer实例: 首先,你需要创建一个
AVPlayer
实例。这可以通过调用AVPlayer
的构造函数来完成。 -
设置媒体源URI: 使用
AVPlayer
的setSource
方法或类似功能(具体方法名可能因版本而异),将在线MP3的URI作为参数传入。确保URI是有效的,并且指向一个可访问的MP3文件。 -
准备和播放: 设置完资源后,调用
prepare
或prepareAsync
方法准备播放。准备完成后,可以调用start
方法开始播放。 -
错误处理: 在播放过程中,应监听播放状态及错误信息,以便及时响应播放错误或状态变化。
示例代码(伪代码,具体实现需参考官方API文档):
AVPlayer player = new AVPlayer();
String mp3Uri = "http://example.com/music.mp3";
player.setSource(Uri.parse(mp3Uri));
player.prepareAsync();
player.addOnPreparedListener(() -> {
player.start();
});
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html