HarmonyOS 鸿蒙Next 使用AVPlayer播放在线mp3时怎么设置资源

发布于 1周前 作者 sinazl 来自 鸿蒙OS

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(统一资源标识符)。以下是如何设置资源的基本步骤:

  1. 创建AVPlayer实例: 首先,你需要创建一个AVPlayer实例。这可以通过调用AVPlayer的构造函数来完成。

  2. 设置媒体源URI: 使用AVPlayersetSource方法或类似功能(具体方法名可能因版本而异),将在线MP3的URI作为参数传入。确保URI是有效的,并且指向一个可访问的MP3文件。

  3. 准备和播放: 设置完资源后,调用prepareprepareAsync方法准备播放。准备完成后,可以调用start方法开始播放。

  4. 错误处理: 在播放过程中,应监听播放状态及错误信息,以便及时响应播放错误或状态变化。

示例代码(伪代码,具体实现需参考官方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

回到顶部