首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过GStreamer和Python实现RTMP

通过GStreamer和Python实现RTMP
EN

Stack Overflow用户
提问于 2012-11-23 17:39:22
回答 1查看 4K关注 0票数 2

我正在尝试将以下GStreamer命令移植到python程序中:

代码语言:javascript
复制
gst-launch-0.10 -v -m v4l2src ! queue ! ffmpegcolorspace ! queue ! x264enc pass=pass1 threads=0 bitrate=1536 tune=zerolatency ! queue ! flvmux name=mux  pulsesrc ! queue max-size-bytes=134217728 max-size-time=20000000000 max-size-buffers=1000 ! audioconvert ! lame ! audio/mpeg ! queue ! mux. mux. ! queue ! rtmpsink location='rtmp://x.x.x.x/live/myStream'

使用此命令,可以在流式传输到wowza服务器时记录和观看实况流。但是我在将这个命令移植到python时遇到了一些问题。尤其是RTMP接收器似乎会带来麻烦(因为它使用的是文件链接):

代码语言:javascript
复制
    self.pipeline = gst.Pipeline("diepipeline")

    self.src = gst.parse_launch("v4l2src")
    self.pipeline.add(self.src)

    self.videoenc = make_bin("(name=videoenc queue ! ffmpegcolorspace ! queue ! x264enc pass=pass1 threads=0 bitrate=1536 tune=zerolatency ! queue )")
    self.pipeline.add(self.videoenc)

    self.audio2src = gst.parse_launch("pulsesrc")
    self.pipeline.add(self.audio2src)

    self.audio2 = make_bin("(name=audio2 queue max-size-bytes=134217728 max-size-time=20000000000 max-size-buffers=1000 ! audioconvert ! lame ! audio/mpeg ! queue)")
    self.pipeline.add(self.audio2)
    self.audio2src.link(self.audio2)

    self.flvmux = gst.parse_launch("flvmux name=flvmux")
    self.pipeline.add(self.flvmux)
    self.videoenc.link(self.flvmux)
    self.audio2.link(self.flvmux)

    self.queue1 = gst.parse_launch("queue")
    self.rtmpsink = gst.parse_launch("rtmpsink location='rtmp://192.168.1.11/live/myStream'")
    self.pipeline.add(self.queue1, self.rtmpsink)
    gst.element_link_many(self.flvmux, self.queue1, self.rtmpsink)

    self.pipeline.set_state(gst.STATE_PLAYING)

下面是输出:

代码语言:javascript
复制
    PAUSED: /GstPipeline:diepipeline/GstQueue:queue5 (__main__.GstQueue)
PAUSED: /GstPipeline:diepipeline/GstFlvMux:flvmux (__main__.GstFlvMux)
PAUSED: /GstPipeline:diepipeline/GstBin:audio2/GstQueue:queue4 (__main__.GstQueue)
PAUSED: /GstPipeline:diepipeline/GstBin:audio2/GstCapsFilter:capsfilter0 (__main__.GstCapsFilter)
PAUSED: /GstPipeline:diepipeline/GstBin:audio2/GstLame:lame0 (__main__.GstLame)
PAUSED: /GstPipeline:diepipeline/GstBin:audio2/GstAudioConvert:audioconvert0 (__main__.GstAudioConvert)
PAUSED: /GstPipeline:diepipeline/GstBin:audio2/GstQueue:queue3 (__main__.GstQueue)
PAUSED: /GstPipeline:diepipeline/GstBin:audio2 (gst.Bin)
PAUSED: /GstPipeline:diepipeline/GstBin:videoenc/GstQueue:queue2 (__main__.GstQueue)
PAUSED: /GstPipeline:diepipeline/GstBin:videoenc/GstX264Enc:x264enc0 (__main__.GstX264Enc)
PAUSED: /GstPipeline:diepipeline/GstBin:videoenc/GstQueue:queue1 (__main__.GstQueue)
PAUSED: /GstPipeline:diepipeline/GstBin:videoenc/GstFFMpegCsp:ffmpegcsp0 (__main__.GstFFMpegCsp)
PAUSED: /GstPipeline:diepipeline/GstBin:videoenc/GstQueue:queue0 (__main__.GstQueue)
PAUSED: /GstPipeline:diepipeline/GstBin:videoenc (gst.Bin)
PAUSED: /GstPipeline:diepipeline/GstPulseSrc:pulsesrc0 (__main__.GstPulseSrc)
PAUSED: /GstPipeline:diepipeline/GstDecklinkSrc:src (__main__.GstDecklinkSrc)
PAUSED: /GstPipeline:diepipeline (gst.Pipeline)
PAUSED: /GstPipeline:diepipeline/GstFileSink:filesink0 (__main__.GstFileSink)

你知道是什么导致了这个问题吗?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-23 23:26:30

好的,在尝试了几个小时之后,我发现了我代码中的缺陷。

我不得不删除rtmp-url中的单引号:

从…

代码语言:javascript
复制
 self.rtmpsink = gst.parse_launch("rtmpsink location='rtmp://x.x.x.x/live/myStream'")

代码语言:javascript
复制
 self.rtmpsink = gst.parse_launch("rtmpsink location=rtmp://x.x.x.x/live/myStream")

有时最简单的事情也会花费你最多的时间……

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13526326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档