WebRTC iOS本机SDK长期冻结

问题描述

我正在开发一个使用WebRTC本地SDK的iOS应用,以提供对来自不同摄像机的流的访问。使用的编解码器是H264 / AVC。

尽管大多数相机流都可以正常工作,但是有些流在首次启动时始终会冻结。看起来帧没有被解码,但是我不确定如何解决它。

启用调试日志记录后,在WebRTC的日志中会看到很多以下内容

(rtp_frame_reference_finder.cc:240):数据包范围为[21170,21170]的通用帧没有GoP丢弃帧。 (rtp_frame_reference_finder.cc:240):数据包范围为[21169,21169]的通用帧没有GoP丢弃帧。 (video_receive_stream.cc:699):200毫秒内没有可解码帧,正在请求关键帧。
(video_receive_stream.cc:699):200毫秒内没有可解码帧,正在请求关键帧。

冻结时,永远不会调用 video_broadcaster.cc 上的 Videobroadcaster :: OnFrame ,这会阻止整个流开始。当我在Xcode上测试并暂停/取消调试器时,几乎所有流都将开始工作,并且我看到 Videobroadcaster :: OnFrame 被触发并且帧开始被解码。因此,暂停/取消暂停过程可以解决此问题并启动流程。

在iOS SDK上,永远不会设置编码器。我使用了SDK提供的 RTCVideoEncoderFactoryH264 编码器。我提供了接口/协议 RTCVideoEncoderFactory 的实现,还尝试覆盖SDK中的编码器。在所有这些情况下,都不会调用 createEncoder()函数。解码器没有问题,但是设置正确。

RTCInboundRTPVideoStream 统计报告中, PLICount NACKCount 稳步增长。我的理解是,接收方正在让另一方知道编码视频中存在图片丢失。

由于我不知道到底是什么阻止了帧的解码,所以当PLICount或NACKCount增加时,我想重新启动流。

如何在不完成整个SDP提供/答复过程的情况下执行此操作?我看到的唯一方法是切换 RTcmediaStreamTrack 上的 isEnabled 标志,但这不能为我解决问题。

我可以更新任何编码/解码参数来重新启动流吗?
暂停/取消暂停调试器以解决问题的原因可能是什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...