您好,我正在尝试设置相机的实时流以流向chrome浏览器。我来自相机的流是用h264编码的,因此我想使用gstreamers webrtcbin元素将其直接发送到浏览器。我可以将视频推送到屏幕上,但问题是视频出现乱码。我已经使用videotestsrc对其进行了测试,以查看是否直接对其进行编码并将其发送到浏览器会带来一些启发。
这是我看到的:
这是管道:
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.
'''
有什么我想念的吗?
编辑:有趣的是,当尝试其他模式(例如球)时,输出看起来和行为都很好:
EDIT2 :视频在Firefox中播放正常... hrmm ... chrome在显示h264时是否出现问题?
它与关键帧有关系吗?
EDIT3 :在本地运行管道时,我可以完美地看到它。可能是我丢包了吗?
EDIT4 :当我在笔记本电脑上运行相同的代码时,它可以正常工作。但是,在我的Pi上,我会出现乱码。会是什么?
我想我真正要问的是如何使用gstreamer通过webrtc将h264流发送到浏览器?
答案 0 :(得分:1)
您正在将白噪声作为视频pattern=snow
发送,编码器无法压缩。白噪声在信号中几乎没有冗余,因此编码器无法很好地处理它。 (尤其是在实时流式传输情况下)。
如果是球形,它对您有用,因为大部分视频都是黑色的(意味着信号中有很多冗余),并且编码器很容易将其压缩。
我猜您的连接(数据通道)不够好,因此您看到的视频质量很差。从屏幕截图中您可以清楚地看到,视频在左上角看起来应该像它,然后按照光栅扫描顺序降低了质量。
总结: