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
在 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