我正在尝试以mp4格式播放视频,但无法正常播放。
在控制台中我执行此行并且它可以工作:
gst-launch playbin uri=rtmp://localhost:1935/files/video.mp4
但是,如果我更改为版本1.0,则只能使用音频:
gst-launch-1.0 playbin uri=rtmp://localhost:1935/files/video.mp4
在python中的我有以下代码:
self.player = Gst.Pipeline.new("player")
source = Gst.ElementFactory.make("filesrc", "file-source")
demuxer = Gst.ElementFactory.make("mp4mux", "demuxer")
demuxer.connect("pad-added", self.demuxer_callback)
self.video_decoder = Gst.ElementFactory.make("x264enc", "video-decoder")
self.audio_decoder = Gst.ElementFactory.make("vorbisdec", "audio-decoder")
audioconv = Gst.ElementFactory.make("audioconvert", "converter")
audiosink = Gst.ElementFactory.make("autoaudiosink", "audio-output")
videosink = Gst.ElementFactory.make("autovideosink", "video-output")
self.queuea = Gst.ElementFactory.make("queue", "queuea")
self.queuev = Gst.ElementFactory.make("queue", "queuev")
colorspace = Gst.ElementFactory.make("videoconvert", "colorspace")
self.player.add(source)
self.player.add(demuxer)
self.player.add(self.video_decoder)
self.player.add(self.audio_decoder)
self.player.add(audioconv)
self.player.add(audiosink)
self.player.add(videosink)
self.player.add(self.queuea)
self.player.add(self.queuev)
self.player.add(colorspace)
source.link(demuxer)
self.queuev.link(self.video_decoder)
self.video_decoder.link(colorspace)
colorspace.link(videosink)
self.queuea.link(self.audio_decoder)
self.audio_decoder.link(audioconv)
audioconv.link(audiosink)
但我收到此错误: 错误:内部数据流出错。 gstbasesrc.c(2865):gst_base_src_loop():/ GstPipeline:player / GstFileSrc:file-source: 流媒体任务已暂停,原因未链接(-1)
会发生什么?我觉得我解密不好
答案 0 :(得分:1)
您缺少将解复用器焊盘链接到队列。解复方者有时会'垫,所以你需要听取它们的pad添加信号并在此回调中链接。一旦得到它们,请记得检查垫帽并链接到管道的相应分支。
您可以在此处阅读有关动态打击垫的信息:http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/chapter-pads.html#section-pads-dynamic
答案 1 :(得分:0)
您的代码中包含:
demuxer = Gst.ElementFactory.make("mp4mux", "demuxer")
demuxer.connect("pad-added", self.demuxer_callback)
我希望这是一个剪切/粘贴错误,因为使用多路复用器进行解复用不起作用。我相信一个.mp4文件,正常的解复用器(如果你手动选择一个)是qtdemux。
您也可以使用decodebin为您解码文件。