0

我从本地端口接收仅包含 RGB 有效负载(视频流)的 UDP 数据包。

如何使用 ffmpeg 或 vlc 显示 RGB?

4

1 回答 1

2

我希望这些帮助,即使他们没有直接回答你的问题。它们给出了使用 ffmpeg 和 gstreamer 处理原始 rgb 数据所需的命令行选项的指针。

  1. 我曾经需要从连接到另一台计算机的网络摄像头接收 rgb 帧。

  2. 无法使用 UDP,因为没有成帧,数据包被丢弃,帧变得不完整,行不同步。因此 TCP(使用 UDP 是一个问题或更改命令中的那个词)。

与 ffmpeg、gstreamer、mencoder、mplayer 和 vlc 的斗争产生了以下解决方案。

“建筑学”:

[LINUX V4L2 网络摄像头捕获] -> [THEORA 视频压缩] -> [RTP 流@端口 1233] -> [接收主机] -> [THEORA 视频解压缩] -> [RAW 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
于 2013-05-16T08:57:05.027 回答