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
相关产品推荐
相关产品推荐

