uni-app live-pusher uni.createLivePusherContext("livePusher", this);调用start()部分手机在app端闪退

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

uni-app live-pusher uni.createLivePusherContext(“livePusher”, this);调用start()部分手机在app端闪退

操作步骤:

uni.createLivePusherContext(“livePusher”, this); 执行start()就闪退


### 预期结果:

不闪退

实际结果:

闪退


### bug描述:

/**
* 开始推流
*/
const startPushing = async () => {
if (!livePusherContext?.value) return
livePusherContext?.value.start()
}
执行就闪退
信息类别 信息内容
产品分类 uniapp/App
PC开发环境 Windows
PC版本号 w10
手机系统 Android
手机版本号 Android 12
手机厂商 OPPO
手机机型 oppo
页面类型 vue
vue版本 vue3
打包方式 云端
项目创建方式 CLI
CLI版本号 8.11.0

1 回复

在处理 uni-applive-pusher 组件的 start() 方法导致的闪退问题时,我们首先需要确保所有必要的权限和配置都已正确设置。闪退可能是由于多种原因引起的,包括设备兼容性、内存不足、权限被拒绝、或者 live-pusher 配置不当等。以下是一些可能的解决方案和代码示例,帮助你排查和修复这个问题。

1. 检查并请求必要的权限

在调用 start() 方法之前,确保应用已经获得了摄像头和麦克风的权限。以下是一个简单的权限请求示例(注意,这需要在原生代码中进行,例如使用 HBuilderX 的 manifest.json 配置或者原生插件):

// 假设你使用的是 HBuilderX,可以在 manifest.json 中配置权限
"plus": {
    "distribute": {
        "android": {
            "permissions": [
                "android.permission.CAMERA",
                "android.permission.RECORD_AUDIO"
            ]
        },
        "ios": {
            "plist": [
                "NSCameraUsageDescription",
                "NSMicrophoneUsageDescription"
            ]
        }
    }
}

在代码中动态请求权限(针对 Android,iOS 通常通过 Info.plist 自动处理):

if (uni.getSystemInfoSync().platform === 'android') {
    plus.android.requestPermissions(['android.permission.CAMERA', 'android.permission.RECORD_AUDIO'], function(event) {
        if (event.deniedAlways.length > 0 || event.denied.length > 0) {
            console.error('权限被拒绝');
        } else {
            startLivePusher();
        }
    });
} else {
    startLivePusher();
}

function startLivePusher() {
    const livePusherContext = uni.createLivePusherContext("livePusher", this);
    livePusherContext.start({
        success: function() {
            console.log('直播开始');
        },
        fail: function(error) {
            console.error('直播开始失败', error);
        }
    });
}

2. 检查设备兼容性

某些老旧设备可能不支持特定的视频编码格式或分辨率。尝试调整 live-pusher 的配置参数,如 videoBitrate, frameRate, resolution 等,看是否能解决问题。

<live-pusher
    id="livePusher"
    url="rtmp://your_rtmp_server/live/stream"
    mode="RTC"
    autoplay
    beauty="1"
    whiteness="0"
    thinness="0"
    aspect="9:16"
    min-bitrate="500"
    audio-quality="high"
    video-bitrate="1500"
    frame-rate="30"
    resolution="1280x720"
    object-fit="contain">
</live-pusher>

3. 内存和资源管理

确保应用在启动直播前释放不必要的资源,避免内存溢出。同时,检查是否有其他后台进程或应用占用了大量资源。

通过上述步骤,你应该能够定位并解决部分手机在调用 start() 方法时闪退的问题。如果问题依然存在,建议查看设备的日志输出,获取更详细的错误信息。

回到顶部