uni-app live-pusher组件在app端安卓使用,确认打开权限后,可以获取画面,但切换app到后台再打开后黑屏无画面

uni-app live-pusher组件在app端安卓使用,确认打开权限后,可以获取画面,但切换app到后台再打开后黑屏无画面

类别 信息
产品分类 uniapp/App
PC开发环境 Windows
PC开发环境版本 windows10
HBuilderX类型 正式
HBuilderX版本 3.98
手机系统 Android
手机系统版本 Android 13
手机厂商 OPPO
手机机型 K9s
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

操作步骤:

  • 开启直播,切换应用到后台,再打开app以后黑屏

预期结果:

  • 不黑屏

实际结果:

  • 黑屏

bug描述:

  • live-pusher组件在app端安卓使用,确认打开权限后,可以获取画面,退出app,再打开之后会黑屏没有画面, 页面是nvue

更多关于uni-app live-pusher组件在app端安卓使用,确认打开权限后,可以获取画面,但切换app到后台再打开后黑屏无画面的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app live-pusher组件在app端安卓使用,确认打开权限后,可以获取画面,但切换app到后台再打开后黑屏无画面的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在使用 uni-applive-pusher 组件时,如果遇到在 Android 设备上切换应用到后台再返回后出现黑屏无画面的问题,可能是由于以下原因导致的:

1. 后台处理问题

  • 当应用切换到后台时,Android 系统可能会暂停或终止应用的某些功能,包括视频采集和推流。这可能导致 live-pusher 组件在返回前台时无法自动恢复。

2. 生命周期管理

  • uni-app 的页面生命周期可能没有正确处理 live-pusher 组件的恢复。当应用从后台返回时,可能需要手动重新初始化或恢复 live-pusher 组件。

解决方案

1. 监听应用前后台切换

uni-app 中,可以通过 onShowonHide 生命周期方法来监听应用的前后台切换事件。当应用从后台返回时,可以尝试重新初始化 live-pusher 组件。

export default {
    onShow() {
        // 应用从后台返回时执行
        this.reinitializeLivePusher();
    },
    onHide() {
        // 应用进入后台时执行
    },
    methods: {
        reinitializeLivePusher() {
            // 重新初始化 live-pusher 组件
            this.$refs.livePusher.stop();
            this.$refs.livePusher.start();
        }
    }
}

2. 手动恢复推流

onShow 方法中,手动调用 live-pusherstart 方法来恢复推流。

export default {
    onShow() {
        // 应用从后台返回时执行
        this.$refs.livePusher.start();
    },
    onHide() {
        // 应用进入后台时执行
        this.$refs.livePusher.stop();
    }
}

3. 检查权限

确保在应用返回前台时,摄像头和麦克风权限仍然有效。如果权限丢失,可能会导致 live-pusher 无法正常工作。

export default {
    onShow() {
        // 检查权限
        uni.authorize({
            scope: 'scope.camera',
            success: () => {
                this.$refs.livePusher.start();
            },
            fail: () => {
                uni.showToast({
                    title: '请授权摄像头权限',
                    icon: 'none'
                });
            }
        });
    }
}

4. 使用 onResume 事件

在某些情况下,onShow 可能不足以处理复杂的恢复逻辑。可以考虑使用 onResume 事件来确保在应用恢复时执行必要的操作。

export default {
    onResume() {
        // 应用恢复时执行
        this.reinitializeLivePusher();
    },
    methods: {
        reinitializeLivePusher() {
            // 重新初始化 live-pusher 组件
            this.$refs.livePusher.stop();
            this.$refs.livePusher.start();
        }
    }
}

5. 使用 live-pusheronStateChange 事件

live-pusher 提供了 onStateChange 事件,可以监听推流状态的变化。当状态发生变化时,可以根据状态进行相应的处理。

<live-pusher ref="livePusher" [@statechange](/user/statechange)="onStateChange"></live-pusher>

export default {
    methods: {
        onStateChange(e) {
            if (e.detail.code === '1003') {
                // 状态码 1003 表示推流中断
                this.$refs.livePusher.start();
            }
        }
    }
}
回到顶部