我从本地端口收到仅包含RGB有效载荷(视频流)的UDP数据包。
如何使用ffmpeg或vlc显示RGB ?
我希望这些帮助,即使他们没有直接回答你的问题。它们为使用ffmpeg和gstreamer处理原始rgb数据所需的命令行选项提供了指针。
-
我曾经需要从连接到另一台计算机的网络摄像头接收rgb帧。
-
不能用UDP工作,因为没有帧,数据包被丢弃,帧变得不完整,行不同步。因此TCP(使用UDP是一个问题或改变命令中的单词)。
与ffmpeg, gstreamer, mencoder, mplayer和vlc的斗争产生了以下解决方案。
"架构":
[LINUX V4L2网络摄像头捕获]-> [THEORA视频压缩]-> [RTP流@端口1233]->[接收主机]-> [THEORA视频解压]->[原始RGB/8BPP到本地主机@端口1234]
命令行:
# VIDEO STREAM SENDING SIDE
vlc -vvv -I dummy --udp-caching=0 --sout-mux-caching=0 --no-audio
v4l2:///dev/video0:width=640:height=480:caching=200:fps=10/1 :v4l2-caching=0
':sout=#transcode{vcodec=mp2v,vb=3000,acodec=none}:
rtp{mux=ts,dst=destinationhost,port=1233,caching=0}'
# VIDEO STREAM RECEIVING/FORWARDING TO TCP / ffmpeg
ffmpeg -i rtp://0.0.0.0?localport=1233
-f rawvideo -pix_fmt rgb24 -vcodec rawvideo tcp://127.0.0.1:1234
或者,一个命令可以同时完成它们(使用gstreamer):
# CAPTURE WEBCAM->FORWARD RGB GRAYSCALE TO TCP / gstreamer
gst-launch-0.10 v4l2src device=/dev/video0 ! ffmpegcolorspace
! video/x-raw-gray, width=320, height=240, 'framerate=(fraction)30/1'
! tcpclientsink host=localhost port=1234