uni-app nvue android机型LivePusher推流,一直回调statechange,启动硬编,code 1008

uni-app nvue android机型LivePusher推流,一直回调statechange,启动硬编,code 1008

开发环境 版本号 项目创建方式
Mac 11.2.3 (20D91) HBuilderX

产品分类:uniapp/App

PC开发环境操作系统:Mac

HBuilderX类型:正式

HBuilderX版本号:3.2.16

手机系统:Android

手机系统版本号:Android 11

手机厂商:OPPO

手机机型:oppo reno 2

页面类型:nvue

vue版本:vue2

打包方式:云端

App下载地址或H5网址: www.pgyer.com/X2p2

示例代码:

<live-pusher  
id='livePusher'  
ref="livePusher"   
class="livePusher"   
:url="src"  
:mode="mode"   
:enable-camera="enableCamera"   
:auto-focus="true"   
:device-position="position"  
:beauty="beauty"   
:whiteness="whiteness"  
aspect="9:16"   
[@statechange](/user/statechange)="statechange"   
[@netstatus](/user/netstatus)="netstatus"   
[@error](/user/error) = "error"  
:style="'height: '+windowHeight+'px;'"  
style="width: 750rpx;"></live-pusher>

参数
{
"mode": "FHD",
"position": "back",
"beauty": 0,
"whiteness": 0
}
通过以上代码,onReady开始推流

onReady() {  
    this.context = uni.createLivePusherContext('livePusher', this)  
    this.startPreview()  
    // 开始推流  
    this.start()  
},  
// 开始推流  
start(){  
    this.context.start({  
        success:() =>{  
            this.isStart = true  
            $H.post('/changestatus',{  
                id:this.detail.id,  
                type:"play"  
            },{  
                userUuid:this.vuex_userInfo.userUuid,  
                sessionid: this.vuex_userInfo.sessionid  
            }).then(res=>{  
                console.log('changestatus', res);  
                this.joinOrLeaveLive('join')  
            }).catch(err=>{  
                console.log(err);  
            })  
        }  
    })  
},

更多关于uni-app nvue android机型LivePusher推流,一直回调statechange,启动硬编,code 1008的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

我这边也是ios没问题,安卓死活有问题 小米8会出现TCP连接错误 小米10推流没问题,但是拉出来的流数据是异常的,会卡在一帧上
现在打算不使用livepusher, 自己找人封装推流工具,比如七牛的推流SDK

更多关于uni-app nvue android机型LivePusher推流,一直回调statechange,启动硬编,code 1008的实战教程也可以访问 https://www.itying.com/category-93-b0.html


加一

请问各位大神解决了吗

我这边遇到了几乎一样的问题,可能是重复调用了太多次 startPreview

根据您提供的信息,这是一个典型的LivePusher硬编码器初始化失败问题。code 1008错误通常表示硬件编码器初始化失败,导致反复触发statechange回调。

问题分析:

  1. 硬件编码器兼容性问题:OPPO Reno 2(Android 11)的硬件编码器可能不支持您设置的mode: "FHD"(全高清)参数
  2. 分辨率/码率不匹配:FHD模式(通常为1920x1080)可能超出了该设备硬编支持的范围
  3. 资源占用冲突:可能与其他正在使用摄像头的应用冲突

解决方案:

  1. 降低视频参数
// 将FHD改为HD或SD模式
{
  "mode": "HD",  // 或 "SD"
  "position": "back",
  "beauty": 0,
  "whiteness": 0
}
  1. 添加自定义视频配置
this.context.start({
  success: () => {
    // 成功回调
  },
  fail: (err) => {
    console.error('推流失败:', err)
  }
})
  1. 检查设备兼容性
// 在onReady中添加设备能力检测
onReady() {
  // 先检查设备支持情况
  this.startPreview()
  // 延迟开始推流,确保预览稳定
  setTimeout(() => {
    this.start()
  }, 1000)
}
  1. 尝试软编码(性能较差但兼容性好): 目前uni-app LivePusher主要使用硬编,如果问题持续,可能需要:
  • 更新HBuilderX到最新版本
  • 检查自定义基座配置
  • 测试其他Android机型确认是否为设备特定问题

临时处理: 在statechange回调中添加错误处理:

statechange(e) {
  if (e.detail.code === 1008) {
    console.log('硬编失败,尝试降低画质')
    // 自动降级到HD模式
    this.mode = "HD"
    this.restartPush()
  }
}
回到顶部