问题描述
我正在开发一个使用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 (将#修改为@)