GStreamer 播放多视频 mp4 文件

GStreamer play multi-video mp4 file

在 Windows,使用 gst 1.8.2(从 1.6 开始),我使用以下 gst-launch 管道从多个 IP 摄像机流式传输到单个 mp4 文件创建 mp4 文件(我重新格式化了我的 gst-启动命令在这里看起来更好,但它们是单行的):

mp4mux name=m ! filesink location=file.mp4   
rtspsrc location="rtsp://x" latency=0 name=Camera1 ! rtph264depay ! h264parse ! tee name=t1 
   t1. ! queue ! m.video_1 
   t1. ! queue ! decodebin ! autovideosink name=video1   
rtspsrc location="rtsp://y" latency=0 name=Camera2 ! rtph264depay ! h264parse ! tee name=t2 
   t2. ! queue ! m.video_2 
   t2. ! queue ! decodebin ! autovideosink name=video2

我可以使用 VLC 媒体播放器播放生成的文件,但我无法使用 gstreamer 播放该文件。当我创建像

这样的管道时
gst-launch-1.0 uridecodebin name=u uri=file:/file.mp4 
   u.src_0 ! queue ! autovideosink 
   u.src_1 ! queue ! autovideosink

它从不播放。在等待视频的时候,我看到了

Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
Redistribute latency...
Redistribute latency...

然后当我按 ctrl-c 时,响应是

handling interrupt.
Interrupt: Stopping pipeline ...
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
Freeing pipeline ...

一位同事在他的 Mac 上尝试相同的命令并得到相同的结果。

我设置了环境变量来生成 "DOT" 管道图文件。它们没有显示正确的视频格式、宽度或高度;我想它永远不会走那么远。我遵循了 otopolsky 的食谱,并且使用了一个命令行示例和我的程序,一个相机就可以工作。

有人有什么想法吗?

谢谢。

-reilly.

我想你忘了在开始时将 -e 添加到 gst-launch 中。我用你的管道的简化版本进行了测试:

gst-launch-1.0 -e mp4mux name=m ! filesink location=file.mp4 videotestsrc ! x264enc ! m.video_1 videotestsrc ! x264enc ! m.video_2

然后这样玩。您的 uri 错误..您需要提供完整路径或使用 filesrc(位置可以是相对的)和 decodebin 代替..

这是正确的管道 - 不确定如何在 windows 中输入密码,因此请使用完整路径..

gst-launch-1.0 uridecodebin name=u uri=file://`pwd`/file.mp4 ! video/x-raw ! queue ! videoconvert ! autovideosink u. ! video/x-raw ! queue ! videoconvert ! autovideosink