Expo React Native启用相机时出现getstream无视频发布权限错误
解决Expo React Native视频通话相机启用权限问题
每次调用call?.camera.enable()启用相机进行视频通话时,都会收到以下错误:
No permission to publish VIDEO
能正常加入通话,但无法显示视频。
相关代码
创建通话的代码
const myCall = client.call("default", cast(callId));
await myCall.getOrCreate({ data: { members: [ { user_id: String(user.user?.id), role: "call_member" }, { user_id: String(recipientId), role: "call_member" }, ], settings_override: { video: { camera_default_on: isVideoCall, target_resolution: { bitrate: 400000, height: 640, width: 360, }, }, }, }, });
重试加入通话的函数
export const joinWithRetry = async ( call: Call, options: JoinCallData = {}, retries = 3, ) => { for (let attempt = 1; attempt <= retries; attempt++) { try { await call.join(options); return; } catch (error: any) { if (error?.code === 16 && attempt < retries) { await new Promise((res) => setTimeout(res, 300 * attempt)); } else { throw error; } } } };
调用重试函数的代码
await joinWithRetry(call, { create: initiate === "true", });
问题排查与解决步骤
先确认相机权限是否获取
在Expo环境中,必须先申请相机权限才能使用相机。添加权限申请逻辑:import { Camera } from 'expo-camera'; const requestCameraPermission = async () => { const { status } = await Camera.requestCameraPermissionsAsync(); if (status !== 'granted') { alert('需要授予相机权限才能进行视频通话'); } }; // 在初始化通话前调用该函数 await requestCameraPermission();检查通话角色的权限配置
确认通话服务端的call_member角色是否拥有发布视频流的权限。如果使用第三方通话服务(如Stream),需要在服务端控制台中将角色的publish_video权限设为允许。加入通话时显式声明视频需求
调用joinWithRetry时,明确传入视频开启参数,让服务端知晓你需要发布视频:await joinWithRetry(call, { create: initiate === "true", video: true, });调整相机启用时机
确保在权限获取成功后再调用call?.camera.enable(),避免权限未就绪时触发错误:const permissionStatus = await Camera.requestCameraPermissionsAsync(); if (permissionStatus.status === 'granted') { await call?.camera.enable(); }
内容的提问来源于stack exchange,提问作者Victor Ezekiel
相关产品推荐
相关产品推荐

