HarmonyOS鸿蒙Next中api播放mp3音频时没有声音,求助音频播放的参数怎么配置

HarmonyOS鸿蒙Next中api播放mp3音频时没有声音,求助音频播放的参数怎么配置

/**

  • 播放音频

  • @param file */ private void startPlayer(File file) { AudioDeviceDescriptor player = null; AudioDeviceDescriptor[] devices = AudioManager.getDevices(AudioDeviceDescriptor.DeviceFlag.OUTPUT_DEVICES_FLAG); for (AudioDeviceDescriptor device : devices) { // 扬声器 if (AudioDeviceDescriptor.DeviceType.SPEAKER == device.getType()) { player = device; break; } }

    if (player == null) { player = devices[0]; }

    if (player == null) { // 没有获取到音频播放设备 return; }

    AudioStreamInfo audioStreamInfo = new AudioStreamInfo.Builder() // 16kHz .sampleRate(16000) .audioStreamFlag(AudioStreamInfo.AudioStreamFlag.AUDIO_STREAM_FLAG_MAY_DUCK) .encodingFormat(AudioStreamInfo.EncodingFormat.ENCODING_MP3) // 默认声道 单声道 .channelMask(AudioStreamInfo.ChannelMask.CHANNEL_OUT_DEFAULT) // 媒体类音频 .streamUsage(AudioStreamInfo.StreamUsage.STREAM_USAGE_MEDIA) .build();

    AudioRendererInfo audioRendererInfo = new AudioRendererInfo.Builder() .audioStreamInfo(audioStreamInfo) // raw 格式的输出流 .audioStreamOutputFlag(AudioRendererInfo.AudioStreamOutputFlag.AUDIO_STREAM_OUTPUT_FLAG_DIRECT_PCM) .bufferSizeInBytes(1024) .deviceId(player.getId()) // false表示分段传输buffer并播放,true表示整个音频流一次性传输到HAL层播放 .isOffload(false) .build();

    AudioRenderer audioRenderer = new AudioRenderer(audioRendererInfo, PlayMode.MODE_STREAM); // 开始播放 audioRenderer.start(); try { FileInputStream fis = new FileInputStream(file); byte[] buf = new byte[1024]; int i = 0; while ((i = fis.read(buf)) != -1) { audioRenderer.write(buf, 0, i); } fis.close(); audioRenderer.release(); } catch (IOException ie) { ie.printStackTrace(); } }


---------------------------------------------------

请问 `AudioStreamInfo` 和 `AudioRendererInfo` 怎么配置?

更多关于HarmonyOS鸿蒙Next中api播放mp3音频时没有声音,求助音频播放的参数怎么配置的实战教程也可以访问 https://www.itying.com/category-93-b0.html

17 回复

你的代码中的AudioDeviceDescriptor不是支持音视频播放的接口类。

目前鸿蒙提供的可播放mp3格式的sdk接口是harmonyos.media.player.Player

示例代码如下:

try (FileInputStream in = new FileInputStream(new File(PLAYER_TEST_FILE))) {
    FileDescriptor fd = in.getFD();
    Source source = new Source(fd);
    Player impl = new Player();
    impl.setSource(source);
    impl.prepare();
    impl.play();
} catch (IOException e) {
    // ...
}

你可在鸿蒙开源API中查阅次API用法.

更多关于HarmonyOS鸿蒙Next中api播放mp3音频时没有声音,求助音频播放的参数怎么配置的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


感谢,

基本信息
姓名: 张三
职位: 软件工程师
技能: Python, Java, C++

感谢帮助,目前的官方文档没有说清楚。

现在音频播放的地方还是没有说MP3需要使用Player

还有 现在使用本地音视频文件的时候只能调用rawfile文件夹内的资源,而文档给出的media文件夹下的资源使用就会报错。

Player播放视频的文档例子,没有写surface需要onCreate回调完成后才能放入player,这个我是看了别人的代码和参照安卓代码才发现的问题,按照文档给出的例子肯定是失败的。

还有诸如播放成功,但是退出的时候程序卡死,player release也是没用

setSource需要在异步做,不然会卡死或者报-19之类的错误

setSource之后才能设置surface不然也会报错

所有模拟器似乎都不能发出声音

在线视频加载时间特别长,似乎是全加载后才能播放

等等问题,多媒体这部分感觉还有很大提高空间

音频文档参照 https://developer.harmonyos.com/cn/docs/documentation/doc-guides/media-audio-playback-0000000000031734

主要问题在于audioRender初始化一直失败,返回-38,api文档查不到原因

2021-02-18 16:02:46.836 26150-26150/com.example.myapplication W/audio: initPlayer

2021-02-18 16:02:46.842 26150-26150/com.example.myapplication E/libdnetwork: GetLocalBasicInfo: get local node basic info binder invoke failed

2021-02-18 16:02:46.844 26150-26150/com.example.myapplication E/IAudioFlinger: createTrack returned error -38

2021-02-18 16:02:46.845 26150-26150/com.example.myapplication E/InputEventReceiver: Exception dispatching input event.

2021-02-18 16:02:46.845 26150-26150/com.example.myapplication E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback

2021-02-18 16:02:46.846 26150-26150/com.example.myapplication E/MessageQueue-JNI: java.lang.IllegalArgumentException: Initial AudioRenderer Failed.

另外还有avsession 连接不上avBrowser,完全按照文档写的,连接回调没有任何反应,错误码都没有,在我另一个帖子贴了代码

你好,目前模拟器不支持音频开发

AudioRender我也是初始化失败

有帖子说是用电视模拟器可以跑,但是不会有声音

刚做完player播放视频demo,player也是一地鸡毛,官方文档照着写都有问题,而且返回的errorcode并不能帮助定位错误

开发者你好,你参考的文档是哪一篇?能提供具体的errocode吗?

请问你音频播放这块还有问题吗,我这边按照官方文档使用接口audiorender初始化都会报错(远程模拟器运行)。后面看到你的这篇把参数改成和你一致的也是一样。也使用了player一样有问题。请问音频播放你最终是怎么解决的,怎么实现的。不知道你是真机运行还是远程模拟器,有没有代码可以参考下。我是按照官方文档一步步写的,真不知道问题出在哪里

用Player可以播放MP3。

你好,我使用Player进行播放,但是模拟器是没有声音的,包括模拟器的自带音乐应用都没声音。

请问JS API中如何播放音频呢?我用<audio src="路径"></audio>

预览器和模拟器都没动静!!!

你的这个做出来了吗 实在是搞不懂这个

亲爱滴开发者 ,这个问题已经在处理中啦,稍后答复你哟 ,么么哒

在HarmonyOS鸿蒙Next中,使用AudioPlayer播放MP3音频时,若没有声音,需检查以下参数配置:

  1. 初始化AudioPlayer:确保正确初始化AudioPlayer实例。

    let audioPlayer = media.createAudioPlayer();
    
  2. 设置音频源:使用src属性指定音频文件路径。

    audioPlayer.src = 'path/to/your/audio.mp3';
    
  3. 配置播放参数:设置loopvolume等参数。

    audioPlayer.loop = false;
    audioPlayer.volume = 1.0;
    
  4. 监听播放状态:通过on('play')on('error')监听播放状态和错误。

    audioPlayer.on('play', () => {
        console.log('Audio is playing');
    });
    audioPlayer.on('error', (error) => {
        console.error('Audio playback error:', error);
    });
    
  5. 开始播放:调用play()方法开始播放。

    audioPlayer.play();
    
  6. 权限检查:确保应用已获取ohos.permission.MICROPHONEohos.permission.READ_MEDIA权限。

  7. 音频文件验证:确认音频文件未损坏且格式支持。

  8. 设备音量检查:确保设备音量未静音或调至最低。

若以上配置正确且问题仍存在,需进一步排查系统或硬件问题。

在HarmonyOS鸿蒙Next中播放MP3音频时没有声音,可能是由于音频参数配置不正确或音频资源路径问题。请检查以下配置:

  • 音频资源路径:确保音频文件路径正确,且文件存在。
  • 音频播放器初始化:使用AudioPlayer类初始化播放器,并设置正确的音频源。
  • 音频格式支持:确认设备支持MP3格式。
  • 音量设置:检查系统音量和播放器音量是否被静音或调至最低。
  • 权限申请:确保应用已获取音频播放权限。

示例代码:

AudioPlayer audioPlayer = new AudioPlayer();
audioPlayer.setSource(ResourceTable.Media_sample_mp3);
audioPlayer.prepare();
audioPlayer.play();

如问题仍未解决,请检查日志输出以获取更多错误信息。

回到顶部