RTMPSrc 到 v4l2sink

RTMPSrc to v4l2sink

我想接收一个 rtmp 流并创建一个以 v4l2sink 作为输出的管道

 gst-launch rtmpsrc location="rtmp://localhost/live/test" ! "video/x-raw-yuv,width=640,height=480,framerate=30/1,format=(fourcc)YUY2" ! videorate ! v4l2sink device=/dev/video1

但我只有绿屏:https://www.dropbox.com/s/yq9oqi9m62c5afo/screencast1422465570.webm?dl=0

您的管道告诉 GStreamer 将编码的、多路复用的 RTMP 数据视为 YUV 视频缓冲区。

相反,您需要解析、解复用和解码 RTMP 数据的视频部分。我没有要测试的示例流,但您可以只使用 decodebin(无论出于何种原因,在 GStreamer 0.10 中它被称为 decodebin2)。您还需要将视频速率重新排序为在帧速率上限之前,以便它知道要转换成什么。

暗中狂刺:

gst-launch rtmpsrc location="rtmp://localhost/live/test" ! decodebin2 ! videoscale ! ffmpegcolorspace ! videorate ! "video/x-raw-yuv,width=640,height=480,framerate=30/1,format=(fourcc)YUY2" ! v4l2sink device=/dev/video1

现在可以使用了:

gst-launch rtmpsrc location="rtmp://localhost/live/test" ! decodebin2 ! videoscale ! ffmpegcolorspace ! videorate ! "video/x-raw-yuv,width=1920,height=1080,framerate=30/1,format=(fourcc)YUY2" ! v4l2sink device=/dev/video1