webrtc h264视频乱码铬

问题描述 投票:2回答:1

[嗨,我正在尝试设置相机的实时流以流向chrome浏览器。我来自相机的流是用h264编码的,因此我想使用gstreamers webrtcbin元素将其直接发送到浏览器。我可以将视频推送到屏幕上,但问题是视频出现乱码。我已经用videotestsrc对其进行了测试,以查看是否直接对其进行编码并将其发送到浏览器会有所启发。

这是我看到的:

enter image description here

这是管道:

PIPELINE_DESC = '''
webrtcbin name=sendrecv bundle-policy=max-bundle
 videotestsrc is-live=true pattern=snow ! videoconvert ! queue ! x264enc ! rtph264pay !
 queue ! application/x-rtp,media=video,encoding-name=H264,payload=96 ! sendrecv.
 audiotestsrc is-live=true wave=red-noise ! audioconvert ! audioresample ! queue ! opusenc ! rtpopuspay !
 queue ! application/x-rtp,media=audio,encoding-name=OPUS,payload=96 ! sendrecv.
'''

我缺少什么吗?

EDIT:有趣的是,当尝试其他模式(例如球)时,输出看起来和表现良好:

enter image description here

EDIT2:该视频在Firefox中播放正常... hrmm ... chrome在显示h264时是否出现问题?

与关键帧有关系吗?

EDIT3:在本地运行管道时,可以完美地看到它。可能是我丢包了吗?

EDIT4:当我在笔记本电脑上运行相同的代码时,它可以正常工作。但是,在我的Pi上,我会出现乱码。会是什么?

  • cpu占70-100%(pi有4个核心,所以有时我得到的比100%)
  • 网络问题?
  • 关键帧迷路了?
  • 还有其他东西吗?

我想我真正要问的是如何使用gstreamer通过webrtc将h264流发送到浏览器?

google-chrome webrtc gstreamer h.264
1个回答
0
投票

您正在将白噪声作为视频pattern=snow发送,编码器无法压缩。白噪声在信号中几乎没有冗余,因此编码器无法很好地处理它。 (尤其是在实时流传输情况下)。

如果是球形,它对您有用,因为大多数视频都是黑色的(意味着信号中有很多冗余),并且编码器很容易将其压缩。

我想您的连接(数据通道)不够好,因此您看到的视频质量很差。从屏幕截图中您可以清楚地看到,视频在左上角看起来应该像它,然后按照光栅扫描顺序降低了质量。

总结:

  • 可能是丢包/网络问题
  • 编码器在笔记本电脑上做得更好(根据您的Edit 4,因此在这种情况下发送的数据较少。
  • 您可以尝试调整编码器参数(而不仅仅是使用默认参数)以使其起作用
  • 发送白噪声通常不是您想要执行的操作。首先在您的real内容上对其进行测试。尝试查找移动很多的最坏情况真实内容,看看问题是否仍然出现。
© www.soinside.com 2019 - 2024. All rights reserved.