webrtc h264视频铬色

时间:2019-01-13 15:57:39

标签: google-chrome webrtc gstreamer h.264

您好,我正在尝试设置相机的实时流以流向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.
'''

有什么我想念的吗?

编辑:有趣的是,当尝试其他模式(例如球)时,输出看起来和行为都很好:

enter image description here

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

它与关键帧有关系吗?

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

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

  • cpu的使用率为70-100%(pi有4个内核,所以有时我得到的不只是 100%)
  • 网络问题?
  • 关键帧迷路了?
  • 还有别的吗?

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

1 个答案:

答案 0 :(得分:1)

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

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

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

总结:

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