uni-app 先开启live-pusher后调用录音时会导致推流卡住
uni-app 先开启live-pusher后调用录音时会导致推流卡住
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | win10 家庭中文版20H2 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Windows
PC开发环境操作系统版本号:win10 家庭中文版20H2
HBuilderX类型:正式
HBuilderX版本号:3.2.12
手机系统:Android
手机系统版本号:Android 7.1.1
手机机型:一体机
页面类型:nvue
vue版本:vue2
打包方式:云端
项目创建方式:HBuilderX
示例代码:
<template>
<live-pusher id='livePusher' ref="livePusher" class="livePusher" :class="{'active':isShow}" :url="url" mode="SD" :muted="true"
:enable-camera="true" :auto-focus="true" :beauty="1" whiteness="2" aspect="9:16" @statechange="statechange"
@netstatus="netstatus" @error="error">
</live-pusher>
</template>
<script>
onReady() {
········
var that = this
this.recorderManager = uni.getRecorderManager();
this.innerAudioContext = uni.createInnerAudioContext();
this.innerAudioContext.autoplay = true;
this.context = uni.createLivePusherContext("livePusher", this);
this.recorderManager.onStop(function(res) {
console.log('recorder stop' + JSON.stringify(res));
that.voicePath = res.tempFilePath;
that.saveGame()
});
},
method:{
startRecord() {
console.log('开始录音');
this.recorderManager.start();
},
endRecord() {
console.log('录音结束');
this.recorderManager.stop();
},
start: function() {
const that = this;
this.context.start({
success: (a) => {
console.log("livePusher.start:" + JSON.stringify(a));
}
});
},
}
</script>
操作步骤:
开启推流,推流成功后,开始录音,录音时推流黑屏停止,录音不受影响
预期结果:
推流和录音相不干扰
实际结果:
推流和录音相冲突干扰
bug描述:
刚开始推流时成功的,一旦开启录音,推流就会画面黑屏停止
更多关于uni-app 先开启live-pusher后调用录音时会导致推流卡住的实战教程也可以访问 https://www.itying.com/category-93-b0.html
2 回复
给个可以复现问题的示例
更多关于uni-app 先开启live-pusher后调用录音时会导致推流卡住的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这是一个典型的音频资源冲突问题。在 Android 平台上,live-pusher 和 getRecorderManager() 会竞争系统的音频采集资源。
问题分析:
live-pusher组件在推流时需要持续采集音频数据recorderManager.start()启动录音时也会申请音频采集权限- 当两个模块同时请求音频采集时,系统可能出现资源抢占,导致
live-pusher的音频采集被中断,进而影响视频推流
解决方案:
方案一:使用纯视频推流(推荐)
如果您的应用场景不需要推送音频流,可以将 live-pusher 设置为纯视频推流:
<live-pusher :muted="true" :enable-麦克风="false"></live-pusher>
这样 live-pusher 就不会占用音频资源,与录音功能可以并行工作。
方案二:调整推流和录音的时序 如果必须同时进行,可以尝试:
- 先启动录音,再开始推流
- 或者确保推流稳定后再开始录音
- 在录音开始/停止时重新初始化
live-pusher
方案三:使用原生插件 如果需要高质量的音频视频同时采集,建议使用原生插件或自行开发原生模块,统一管理音频资源。
临时测试方案:
在 startRecord() 方法中尝试暂停推流,录音完成后再恢复:
startRecord() {
this.context.pause();
this.recorderManager.start();
},
endRecord() {
this.recorderManager.stop();
setTimeout(() => {
this.context.resume();
}, 100);
}

