uni-app live-pusher组件在ios16.4系统上初次打开APP推流失败

发布于 1周前 作者 wuwangju 来自 Uni-App

uni-app live-pusher组件在ios16.4系统上初次打开APP推流失败

操作步骤:

  1. 创建一个nvue页面,添加一个live-pusher组件
  2. 云打包后使用ios16.4系统运行APP
  3. 打开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     |

6 回复

推流失败并出现状态码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组件的urlmode等属性配置正确,并且组件已经正确初始化。在mounted钩子中调用requestPermissions方法以确保在组件渲染前获取权限。

3. 系统兼容性与Bug

如果上述方法仍然无法解决问题,可能是iOS 16.4系统的特定Bug或uni-app框架的兼容性问题。建议:

  • 检查uni-app的官方文档和社区,看是否有关于iOS 16.4的兼容性说明。
  • 尝试更新uni-app框架到最新版本。
  • 在开发者社区或GitHub上提交issue,寻求官方或社区的帮助。

希望这些解决方案能帮助你解决在iOS 16.4系统上初次打开APP推流失败的问题。

回到顶部