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-pushergetRecorderManager() 会竞争系统的音频采集资源。

问题分析:

  1. live-pusher 组件在推流时需要持续采集音频数据
  2. recorderManager.start() 启动录音时也会申请音频采集权限
  3. 当两个模块同时请求音频采集时,系统可能出现资源抢占,导致 live-pusher 的音频采集被中断,进而影响视频推流

解决方案:

方案一:使用纯视频推流(推荐) 如果您的应用场景不需要推送音频流,可以将 live-pusher 设置为纯视频推流:

<live-pusher :muted="true" :enable-麦克风="false"></live-pusher>

这样 live-pusher 就不会占用音频资源,与录音功能可以并行工作。

方案二:调整推流和录音的时序 如果必须同时进行,可以尝试:

  1. 先启动录音,再开始推流
  2. 或者确保推流稳定后再开始录音
  3. 在录音开始/停止时重新初始化 live-pusher

方案三:使用原生插件 如果需要高质量的音频视频同时采集,建议使用原生插件或自行开发原生模块,统一管理音频资源。

临时测试方案:startRecord() 方法中尝试暂停推流,录音完成后再恢复:

startRecord() {
    this.context.pause();
    this.recorderManager.start();
},
endRecord() {
    this.recorderManager.stop();
    setTimeout(() => {
        this.context.resume();
    }, 100);
}
回到顶部