You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 13:14:58