android - 调用 onAddStream() 时不加载远程视频
问题描述
我正在实现一个webRTC
android 应用程序,我正在与之通信的服务器是一个信令服务器(通过 websockets)和一个 kurento 媒体服务器。
时间顺序是:
- 客户端订阅服务器
- 每个客户发送
sdpOffer
- 每个客户都发送了所有
iceCandidate
将被创建的内容 - 信令服务器向
iceCandidate
每个客户端发送 - 信令服务器向客户端发送
sdpAnswers
源自 kurento 媒体服务器的消息
我的移动客户端订阅服务器并发送他们的sdpOffers
. 在ice trickle
信令服务器发回sdpAnswers
来自 kurento 媒体服务器之后。
因此,我收到了消息,并且使用来自 kurento 媒体服务器startCommunication
成功设置了远程描述。sdpAnswers
我已经检查了我所有的 sdp 和 ice 包,它们都符合预期,并且所有webRTC
相关回调都成功。
设置好remoteDescription
后peerConnection
,
被onAddStream()
调用了,我得到了videoTrack
。但是视频没有渲染..
我的 onAddStream:
override fun onAddStream(p0: MediaStream?) {
super.onAddStream(p0)
p0?.videoTracks?.get(0)?.addSink(remote_view)
Log.d(TAG, "on add stream" + p0?.videoTracks?.size )
Log.d(TAG,App.rtcClient.peerConnection?.iceConnectionState().toString())
Log.d(TAG,App.rtcClient.peerConnection?.iceGatheringState().toString())
}
远程视图的初始化:
fun initSurfaceView(view: SurfaceViewRenderer) = view.run {
setMirror(true)
setEnableHardwareScaler(true)
init(rootEglBase.eglBaseContext, null)
}
....
App.rtcClient.initSurfaceView(remote_view)
远程视图的xml:
<org.webrtc.SurfaceViewRenderer
android:id="@+id/remote_view"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/local_view" />
我没有收到任何错误,并且我的本地流正在完美呈现。
所以,我在不知道下一步去哪里的情况下调试应用程序,因为不清楚这个问题来自哪里。
这里存在这个确切的问题,但没有答案,它是 5 年
如果您需要任何其他信息,请发表评论。
更新:在iOS版本中也存在完全相同的行为 - 没有视频渲染。
解决方案
推荐阅读
- google-apps-script - 使用 Google Apps 脚本将图像从 Google 表格复制到 Google 文档
- reactjs - 使用三个 JS 和 React JS 加载 GLTF 模型
- java - triggereventlistner 的 onTrigger 方法即使在 android 中的显着运动之后也不会被调用
- java - 如何将其他 xml 文件链接到 android 中的 main_activity.xml 并访问它?
- c# - 如何在 C#7 中使用可为空的引用类型属性
- machine-learning - 在混淆矩阵中获得这些分数。有人可以指导我可能是什么原因
- reactjs - 反应和进度条。如何添加适用于我的输入和数据的进度条
- java - 为什么 SQL 查询不能直接使用类的实例
- snowflake-cloud-data-platform - 在 Snowflake 中,“加载表”功能是否需要由执行加载的同一用户/角色创建目标表?
- python - Flask WTForms,结合 TextAreaField 和 FileField