uni-app ios端video组件播放rtmp直播流地址时,连接蓝牙耳机仍扬声播放,音频只在iphone设备中输出。

uni-app ios端video组件播放rtmp直播流地址时,连接蓝牙耳机仍扬声播放,音频只在iphone设备中输出。

开发环境

项目 版本/信息
产品分类 uniapp/App
PC操作系统 Windows
PC操作系统版本 Windows7 旗舰版 Service Pack 1
HBuilderX类型 正式
HBuilderX版本 3.2.3
手机系统 iOS
手机系统版本 IOS 14
手机厂商 苹果
手机机型 iphone xsMax, iphone11, iphone12
页面类型 nvue
打包方式 云端
项目创建方式 HBuilderX

示例代码

<template>  
    <view>  
        <video id="myVideo" ref="myVideo" class="myVideo" :style="'width:'+windowWidth+'px;height:'+windowHeight+'px'"  
            :autoplay="true" :src="liveUrl" :muted="muted" :controls='false' :object-fit="objectFit">  
        </video>  

    </view>  
</template>  

<script>  
import http from '@/utils/request.js'  
export default {  
    data() {  
        return {  
            windowHeight: 0,  
            windowWidth: 0,  
            btnTop:60,  
            btnButtom:800,  
            dmButtom:0,  
            ftbot:230,  
            muted:false,  
            liveUrl:"",  
            liveList:'',  
            liveState:'START',  
            objectFit:'cover',  
        }  
    },  
    onLoad(options) {  
        console.log('进入页面')  
        // 点播地址  
        this.liveUrl = 'http://video.xmhhtkd.cn/10%E5%BC%80%E5%8F%91%E9%99%A2%E7%AC%AC%E5%8D%81%E5%A5%94.mp4';  
        // 直播地址  
        this.liveUrl = 'rtmp://media3.scctv.net/live/scctv_800'  

        // 苹果安卓适配  
        if(uni.getSystemInfoSync().platform=='ios'){  
            this.objectFit = 'fill';  
        }  
        else{  
            this.objectFit = 'cover';  
        }  

    },  
    onShow(){  
        this.btnTop = uni.getSystemInfoSync().statusBarHeight+6;  
        this.btnButtom = uni.getSystemInfoSync().windowHeight-66  
        this.dmButtom = uni.getSystemInfoSync().windowHeight-346;  
        this.windowWidth = uni.getSystemInfoSync().windowWidth  
        this.windowHeight = uni.getSystemInfoSync().windowHeight  
    },  
    onReady: function(res) {  
        this.videoContext = uni.createVideoContext('myVideo', this)  
    },  
    methods: {  

    }  
}  
</script>  

操作步骤

进入页面使用点播地址播放,声音播放为已连接的音频设备,进入页面使用直播地址播放,声音播放为扬声。

预期结果

进入页面播放直播地址,ios系统和android系统一致默认使用已连接的蓝牙设备播放,音频设备里会显示已连接的蓝牙耳机设备。

实际结果

ios系统播放直播地址,已连接上的蓝牙耳机,在蓝牙里是显示已连接,但音频里没有连接的蓝牙耳机。


更多关于uni-app ios端video组件播放rtmp直播流地址时,连接蓝牙耳机仍扬声播放,音频只在iphone设备中输出。的实战教程也可以访问 https://www.itying.com/category-93-b0.html

9 回复

同样的问题,ios15 基座3.2.9版本,rtmp与flv的直播流都无法使用蓝牙耳机播放

更多关于uni-app ios端video组件播放rtmp直播流地址时,连接蓝牙耳机仍扬声播放,音频只在iphone设备中输出。的实战教程也可以访问 https://www.itying.com/category-93-b0.html


3.2.16还是有同样的问题

遇到了同样的问题顶一下

同问,没什么解决办法

同问,要解决方法吗

这玩意是没人处理了算是,这么久了还没修

再提供一个可以 播放的rtmp 我来跟进

HBuilderX alpha 3.4.13 已修复

在uni-app iOS端,video组件播放RTMP直播流时出现蓝牙耳机音频输出异常,这通常与iOS系统的音频会话(Audio Session)管理机制有关。RTMP流在iOS上可能被系统识别为“媒体播放”类别,而默认情况下,某些直播流可能未正确触发音频路由切换。

可能原因及解决方案:

  1. 音频会话配置问题
    iOS中音频输出设备的选择由AVAudioSession控制。RTMP直播流可能未主动申请蓝牙音频路由,导致系统仍使用扬声器。可尝试通过原生插件或条件编译调用iOS原生API设置音频会话类别:

    // 在App.vue或页面中,通过条件编译调用原生代码
    // #ifdef APP-PLUS
    const audioSession = plus.ios.importClass('AVAudioSession');
    const session = audioSession.sharedInstance();
    session.setCategoryError('AVAudioSessionCategoryPlayAndRecord', 0x00000001); // 允许蓝牙输出
    session.setActiveError(true);
    // #endif
    
  2. 直播流格式影响
    RTMP协议本身对音频路由的支持较弱,尤其在某些编码格式下。可尝试:

    • 检查RTMP流音频编码格式(如AAC),确保其兼容性。
    • 测试HLS(.m3u8)格式直播流,iOS对HLS的音频路由支持更稳定。
  3. video组件属性调整
    虽然示例代码中已设置muted:false,但可尝试动态控制:

    onLoad() {
      this.muted = true;
      setTimeout(() => {
        this.muted = false; // 延迟取消静音,触发音频重新路由
      }, 500);
    }
回到顶部