在Windows上,使用gst 1.8.2(从1.6开始),我使用以下gst-launch管道从多个IP摄像机创建mp4文件流式传输到单个mp4文件(我已经重新格式化了我的gst-launch命令以在这里看起来更好,但它们是单行的:
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。
答案 0 :(得分:0)
我想你忘了在开头的gst-launch中添加-e
。我测试了管道的简化版本:
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中执行pwd所以使用完整路径..
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