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

Agora Web SDK与Android App视频通话异常:Web端无法看到移动端画面

问题描述

使用Agora Web SDK与Android App进行1对1视频通话时出现异常:

  • 移动端可正常看到Web端画面
  • Web端无法看到移动端画面
  • Android端能正常接收Web端加入频道的onUserJoined回调
  • 所使用的Android SDK版本为io.agora.rtc:full-sdk:3.5.0,测试对象为Agora官方Web Demo

相关Android核心代码:

eventHandler = object : IRtcEngineEventHandler() {
    override fun onJoinChannelSuccess(channel: String?, uid: Int, elapsed: Int) {
        Log.d("VideoCall1", "channel:$channel,uid:$uid,elapsed:$elapsed")
        openScreen(ScreenType.VIDEO_CALL_SCREEN)
    }

    override fun onUserJoined(uid: Int, elapsed: Int) {
        Log.d("VideoCall1", "onUserJoined:$uid")
        viewModel.onUserJoined(uid)
    }

    override fun onUserOffline(uid: Int, reason: Int) {
        Log.d("VideoCall1", "onUserOffline:$uid")
        viewModel.onUserOffline(uid)
    }
}
rtcEngine = RtcEngine.create(this, AppConstants.AGORA_APP_ID, eventHandler)

rtcEngine.apply {
        enableVideo()
        setClientRole(0)
       // setChannelProfile(Constants.CHANNEL_PROFILE_COMMUNICATION)
        joinChannel(token, channelName, "", userId.toInt())
    }
解决方案与技术建议
  • 显式配置频道场景
    代码中注释掉了setChannelProfile(Constants.CHANNEL_PROFILE_COMMUNICATION),尽管默认场景为通信模式,但显式设置可避免版本兼容带来的隐式问题。取消注释该行代码,确保与Web端的频道场景一致:

    setChannelProfile(Constants.CHANNEL_PROFILE_COMMUNICATION)
    
  • 确保本地视频流正常发布
    enableVideo()仅开启视频模块,需额外初始化本地视频视图并启动摄像头采集,才能完成视频流发布。在rtcEngine.apply块中添加以下代码:

    // 绑定本地视频渲染视图(需提前在布局中添加SurfaceView/TextureView)
    val localVideoView = findViewById<SurfaceView>(R.id.local_surface_view)
    setupLocalVideo(VideoCanvas(localVideoView, VideoCanvas.RENDER_MODE_HIDDEN, userId.toInt()))
    // 启动本地摄像头采集
    startPreview()
    
  • 验证权限配置
    检查AndroidManifest.xml是否添加了必要权限,并确保已完成运行时权限申请:
    清单文件权限配置:

    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.INTERNET" />
    

    运行时权限申请示例:

    if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED ||
        ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO), 100)
    }
    
  • 排查本地视频流状态
    添加onLocalVideoStateChanged回调,直接查看本地视频流的发布状态与错误信息:

    override fun onLocalVideoStateChanged(localVideoState: Int, error: Int) {
        Log.d("VideoCall1", "Local video state: $localVideoState, error code: $error")
        // LOCAL_VIDEO_STATE_STARTED 表示发布成功;error非0需对照Agora错误码文档排查
    }
    
  • 升级SDK版本
    当前使用的3.5.0版本发布于2021年,与新版Web SDK可能存在协议兼容问题。建议升级至Agora Android SDK的稳定版本(如4.x系列),升级后需同步调整废弃API的调用。

内容的提问来源于stack exchange,提问作者Heet Changela

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:20:19