uni-app live-pusher组件在ios16.4系统上初次打开APP推流失败
uni-app live-pusher组件在ios16.4系统上初次打开APP推流失败
操作步骤:
- 创建一个nvue页面,添加一个live-pusher组件
- 云打包后使用ios16.4系统运行APP
- 打开live-pusher组件所在的页面
预期结果:
启动APP后首次推流能成功
实际结果:
启动APP后首次推流不成功,第二次推流才成功
bug描述:
nvue页面使用了live-pusher组件,云打包后然后运行在ios16.4系统上,启动APP的首次推流都会推流失败,statechange最新回调提示了1010,Capturer Living… 然后在不重启APP的情况下退出页面,再重新直播就能正常直播推流
| 信息类别 | 信息内容 |
|------------------|------------|
| 产品分类 | uniapp/App |
| PC开发环境操作系统 | Windows |
| PC开发环境操作系统版本号 | 10 |
| HBuilderX版本号 | 3.7.7 |
| 手机系统 | iOS |
| 手机系统版本号 | iOS 16 |
| 手机厂商 | 苹果 |
| 手机机型 | 16.4 |
| 页面类型 | nvue |
| vue版本 | vue3 |
| 打包方式 | 云端 |
| 项目创建方式 | CLI |
| CLI版本号 | 3.6.18 |
推流失败并出现状态码1010,通常是由于网络问题导致的。建议您检查一下以下几个方面:
确认推流地址是否正确,可以检查一下推流地址的网络情况是否良好。
检查推流的权限是否开启,可以在iOS系统的设置中找到应用程序,检查是否已经开启了摄像头和麦克风的权限。
检查网络连接是否正常,可以在设备上访问一下其他网站或者应用程序,确认网络连接是否正常。
如果您使用的是Wi-Fi网络,请尝试切换到4G网络或者使用其他Wi-Fi网络,确认是否能够正常推流。
如果以上方法都无法解决问题,可以考虑升级SDK版本或者联系SDK提供商获取帮助。
另外,如果您的应用程序中使用了多个live-pusher组件,建议您在使用完一个组件后,再销毁该组件并释放资源,避免资源占用过多导致推流失败。
谢谢解答! 1、手机网络是正常的,因为第二次推流是正常的,只有在APP启动后的首次推流才失败,推流地址在其他型号上可正常推流,无这个问题 2、推流权限也是开启的,这个已经确认 3、这个SDK是uniapp的产品,所以来这里提BUG了 4、其他页面的live-pusher组件已经销毁了
回复 2***@qq.com: 这个就应该是sdk的问题了
我也遇到这个问题了,不知道如何解决,都是要退出去在进去才能重新推流
请问这个问题解决了吗?
针对uni-app中live-pusher
组件在iOS 16.4系统上初次打开APP推流失败的问题,这通常与权限管理、组件初始化或系统兼容性问题有关。以下是一些可能的解决方案,包括相关的代码示例,以帮助你定位并解决问题。
1. 确保获取必要的权限
在iOS设备上,推流功能需要访问麦克风和摄像头的权限。确保在manifest.json
中配置了相关权限,并在代码中请求用户授权。
manifest.json配置示例:
"mp-weixin": {
"requiredPrivateInfos": ["getUserInfo", "camera", "recordAudio"]
}
请求权限代码示例(Vue语法):
<template>
<view>
<!-- live-pusher组件 -->
<live-pusher
id="livePusher"
:url="pushUrl"
mode="RTC"
autoplay
muted
@statechange="onStateChange"
></live-pusher>
</view>
</template>
<script>
export default {
data() {
return {
pushUrl: 'rtmp://your_rtmp_server/live/streamkey',
};
},
mounted() {
this.requestPermissions();
},
methods: {
async requestPermissions() {
try {
await uni.authorize({
scope: 'scope.camera',
success: () => {
console.log('Camera permission granted');
},
fail: () => {
console.error('Camera permission denied');
}
});
await uni.authorize({
scope: 'scope.record',
success: () => {
console.log('Audio recording permission granted');
},
fail: () => {
console.error('Audio recording permission denied');
}
});
} catch (error) {
console.error('Permission request failed:', error);
}
},
onStateChange(e) {
console.log('Live pusher state:', e.detail.state);
}
}
};
</script>
2. 组件初始化与配置
确保live-pusher
组件的url
、mode
等属性配置正确,并且组件已经正确初始化。在mounted
钩子中调用requestPermissions
方法以确保在组件渲染前获取权限。
3. 系统兼容性与Bug
如果上述方法仍然无法解决问题,可能是iOS 16.4系统的特定Bug或uni-app框架的兼容性问题。建议:
- 检查uni-app的官方文档和社区,看是否有关于iOS 16.4的兼容性说明。
- 尝试更新uni-app框架到最新版本。
- 在开发者社区或GitHub上提交issue,寻求官方或社区的帮助。
希望这些解决方案能帮助你解决在iOS 16.4系统上初次打开APP推流失败的问题。