Sinch端对端视频通话:未调用call.answer()前能否显示来电视频?
在Sinch中实现接听前预览来电方视频(类似Google Duo)
首先直接给你答案:可以实现,但需要用到Sinch的早期媒体(Early Media)功能——默认情况下不开启这个的话,接听前是无法获取到来电方视频流的。
你提到的示例项目里onVideoTrackAdded在未接听时不触发,是因为Sinch的默认行为是:只有当你调用call.answer()完成通话建立后,才会建立完整的媒体连接,此时才会触发视频轨道添加的回调。要实现类似Duo的来电预览,得按以下步骤调整:
关键实现步骤
- 发起方配置:发起视频通话的一端,在调用
call.call()前,需要创建CallOptions并开启早期媒体发送选项(比如设置enableEarlyMedia(true),具体参数以Sinch SDK文档为准),这样发起方会在呼叫发起后立即开始发送视频流,无需等待接收方接听。 - 接收方处理逻辑:
- 收到来电通知后,先确保已获取相机、麦克风权限(哪怕还没接听,也要有权限才能接收和显示视频流)。
- 不要立即调用
call.answer(),而是先调用call.enableEarlyMedia()(如果SDK支持这个方法),这会让接收方在接听前就建立媒体通道,开始接收远程视频流。 - 此时
onVideoTrackAdded回调就会被触发,你可以在这个回调里调用addRemoteView()来加载并显示来电方的视频画面,实现预览效果。 - 当用户点击接听按钮时,再调用
call.answer(),通话会平滑过渡到正常通话状态。
额外注意事项
- 早期媒体功能可能需要你的Sinch账号套餐支持,要先确认账号是否有权限使用该功能。
- 开启早期媒体会提前消耗带宽,建议考虑用户的移动数据使用情况,最好提供关闭预览的选项。
- 不同版本的Sinch Android SDK可能API略有差异,建议参考官方最新文档确认具体方法参数。
回到你提到的示例项目,你可以修改IncomingCallActivity的逻辑:在收到来电后先处理权限,调用早期媒体启用方法,然后在onVideoTrackAdded回调里显示远程视频,而非只显示视频通话图标。
内容的提问来源于stack exchange,提问作者Ales Erzen
相关产品推荐
相关产品推荐

