收藏
回答

BackgroundAudioManager iOS 真机后台播放 MP3 直播流不稳定

问题类型 API/组件名称 微信版本 基础库版本
Bug BackgroundAudioManager 8.0.75 3.16.2

诉求:

BackgroundAudioManager 在 iOS 真机锁屏/后台场景下,增强对网络电台直播直连流的支持。


现象:

同一 MP3 直播流在 InnerAudioContext 前台可正常播放;

切换到 BackgroundAudioManager 后,在 iOS 真机后台/锁屏场景出现 onPlay/onCanplay 后无声音、onWaiting/onPause 反复触发,无法稳定收到 onTimeUpdate。


环境:

iPhone 14 Pro

iOS 26.5

微信 8.0.75

基础库 3.16.2


示例源:

https://lhttp-hw.qtfm.cn/live/5022379/64k.mp3


期望:

BackgroundAudioManager 能稳定支持这类连续 MP3/AAC 直播音频流,或明确文档说明后台音频支持的流媒体协议、Content-Type、ICY metadata、Transfer-Encoding 等要求。


补充:

开发者工具模拟器可播,真机表现不同。

InnerAudioContext 前台可播,锁屏后不可靠。

回答关注问题邀请回答
收藏

2 个回答

  • 龙海
    龙海
    星期四 14:08

    1. 完整报错信息

    没有明确 onError 报错。
    
    iOS 真机使用 BackgroundAudioManager 播放 MP3 直播直连流时,控制台表现为:
    
    [Audio] Event: onCanplay
    [Audio] Event: onPlay
    随后长时间无法稳定播放,或出现:
    [Audio] Event: onWaiting
    [Audio] Event: onPause
    [Audio] Event: onPlay
    [Audio] Event: onWaiting
    
    业务侧以 onTimeUpdate 作为真实播放成功标志,BackgroundAudioManager 场景下无法稳定收到 onTimeUpdate,表现为锁屏/后台播放无声或中断。
    
    同一 URL 在 InnerAudioContext 前台播放可正常出声。
    开发者工具模拟器中 BackgroundAudioManager 也可播放。
    问题主要发生在 iOS 真机微信客户端。
    

    2. 问题触发流程

    环境:
    iPhone 14 Pro
    iOS 26.5
    微信 8.0.75
    基础库 3.16.2
    网络:Wi-Fi
    
    复现步骤:
    1. 在小程序中使用 wx.getBackgroundAudioManager() 创建后台音频播放器。
    2. 设置 title/singer/epname 等后台音频必填信息。
    3. 设置 protocol = "http"。
    4. 设置 src 为 MP3 直播直连流,例如:
       https://lhttp-hw.qtfm.cn/live/5022379/64k.mp3
    5. 开始播放,并观察 onCanplay、onPlay、onWaiting、onPause、onTimeUpdate 等事件。
    6. 在 iOS 真机上播放,随后锁屏或切后台。
    
    实际表现:
    - onCanplay/onPlay 会触发;
    - 但后台/锁屏场景下无法稳定播放,可能无声、中断,或反复触发 onWaiting/onPause/onPlay;
    - 无法稳定收到 onTimeUpdate。
    
    对比表现:
    - 同一 MP3 直播直连流在 InnerAudioContext 前台播放可以正常出声;
    - 开发者工具模拟器中使用 BackgroundAudioManager 也可以播放;
    - 只有 iOS 真机 BackgroundAudioManager 后台/锁屏场景不稳定。
    
    期望表现:
    BackgroundAudioManager 能稳定支持这类连续 MP3/AAC 网络电台直播流;或者文档明确说明后台音频对直播直连流的协议、Header、Content-Type、Transfer-Encoding、ICY metadata 等限制。
    

    3. 可复现代码片段

    const bgm = wx.getBackgroundAudioManager();
    
    bgm.title = 'STAR RADIO';
    bgm.singer = 'Test';
    bgm.epname = 'Test Radio';
    bgm.protocol = 'http';
    
    bgm.onCanplay(() => {
      console.log('[Audio] onCanplay');
    });
    
    bgm.onPlay(() => {
      console.log('[Audio] onPlay');
    });
    
    bgm.onWaiting(() => {
      console.log('[Audio] onWaiting');
    });
    
    bgm.onPause(() => {
      console.log('[Audio] onPause');
    });
    
    bgm.onStop(() => {
      console.log('[Audio] onStop');
    });
    
    bgm.onTimeUpdate(() => {
      console.log('[Audio] onTimeUpdate', bgm.currentTime);
    });
    
    bgm.onError((err) => {
      console.error('[Audio] onError', err);
    });
    
    bgm.src = 'https://lhttp-hw.qtfm.cn/live/5022379/64k.mp3';
    

    补充:

    同一 URL 使用 wx.createInnerAudioContext() 前台播放可正常出声,但锁屏/后台音频能力只能依赖 Background
    


    星期四 14:08
    有用
    回复
  • 智能回答 智能回答 本次回答由AI生成
    星期四 13:07
    有用
    回复
登录 后发表内容