当前位置:  开发笔记 > 程序员 > 正文

GStreamer - 从Raspberry到VLC-PC的网络摄像头流

如何解决《GStreamer-从Raspberry到VLC-PC的网络摄像头流》经验,为你挑选了1个好方法。

我正在尝试使用gstreamer 1.0将网络摄像头视频从Raspberry流式传输到VLC播放器.现在我得到了Raspberry的以下命令:

gst-launch-1.0 -vv -e v4l2src device=/dev/video0  \
! videoscale \
! "video/x-raw, \
! queue  \
! x264enc \
! h264parse \
! rtph264pay config-interval=10 pt=96 \
! udpsink host=239.255.12.42 port=5004

以下sdp文件用vlc播放流:

c=IN IP4 239.255.12.42
m=video 5004 RTP/AVP 96
a=rtpmap:96 H264/90000

当我运行gst-launch-1.0命令时,我可以看到wireshark它正在发送udp数据包但是当我尝试用vlc和sdp文件播放流时我什么也得不到.vlc日志说:

es error: cannot peek
es error: cannot peek
live555 error: no data received in 10s, aborting

我不知道出了什么问题.我可能没有正确构建管道,这就是为什么vlc不能将流识别为正确的视频流.有任何想法吗?

在此先感谢您的帮助.



1> nayana..:

VLC理解ts流与RTP协议相结合.方法是在mpegtsmux之后使用rtp payloader,它将对生成的ts缓冲区(数据包)进行有效负载.

所以不是这样的:

src ! queue ! x264enc ! h264parse ! rtph264pay ! udpsink

你可以这样做:

src ! queue ! x264enc ! h264parse ! mpegtsmux ! rtpmp2tpay ! udpsink

然后rtp://@:port在vlc中使用通过这种方式,mpegtsmux将封装有关它包含哪些流的信息

我应该注意你的方法不正确,甚至可能更有效(mpegtsmux会将视频分割成188字节数据包,但你的方法将切成~1400字节的udp数据包),但你需要为vlc提供正确的SDP文件为了流式传输它.例如像这样,但我没有这个很多经验..

所以这是你当前的管道工作:

gst-launch-1.0 -vv -e v4l2src device=/dev/video0 ! "video/x-raw,\ ! queue ! x264enc speed-preset=1 ! h264parse ! mpegtsmux ! rtpmp2tpay ! udpsink host=192.255.10.41 port=5004

使用zerolatency时,您可以获得更好的结果:

像这样x264enc tune=4它将丢弃所有其他质量参数,如速度预设等.

这是关于tune属性的文档:

tune : Preset name for non-psychovisual tuning options
       flags: readable, writable
       Flags "GstX264EncTune" Default: 0x00000000, "(none)"
       (0x00000001): stillimage       - Still image
       (0x00000002): fastdecode       - Fast decode
       (0x00000004): zerolatency      - Zero latency

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有