简体   繁体   English

用于音频视频流的python gstreamer管道

[英]python gstreamer pipeline for audio video streaming

I have my working gstreamer command ie我有我的工作 gstreamer 命令,即

v4l2src ! stamp sync-margin=1 sync-interval=1 ! videorate ! video/x-raw-yuv,width=640,height=480,framerate=30/1 ! ffmpegcolorspace ! x264enc bitrate=512 subme=4 b-pyramid=true weightb=true ! queue2 ! flvmux name=mux alsasrc ! audio/x-raw-int,rate=11025,channels=2,depth=16 ! audiorate ! queue2 max-size-buffers=600 max-size-bytes=0 max-size-time=0 ! audioconvert ! lamemp3enc target=1 bitrate=40 mono=true encoding-engine-quality=1 target=bitrate ! mux. mux. ! queue2 ! rtmpsink location="rtmp://server2"

I am now trying to make it work with python.我现在正试图让它与 python 一起工作。 So far i have done fine but i am now stuck where it says flvmux name=mux alsasrc As there is no !到目前为止,我做得很好,但我现在卡在了flvmux name=mux alsasrc因为没有! between mux and alsasrc在 mux 和 alsasrc 之间

Here is my python code.这是我的python代码。

import sys, os
import pygst
pygst.require("0.10")
import gst
import pygtk
import gtk

class Main:
     def __init__(self):

        self.pipeline = gst.Pipeline("mypipeline")

        self.src = gst.element_factory_make("v4l2src", "src")
        self.pipeline.add(self.src)

        self.stmp = gst.elemet_factory_make("stamp", "stmp")
        self.stmp.set_property("sync-margin", 1)
        self.stmp.set_property("sync-interval", 1)
        self.pipeline.add(self.stmp)
        self.src.link(self.stmp)

        self.vidrate = gst.element_factory_make("videorate", "vidrate")
        self.pipeline.add(self.vidrate)
        self.stmp.link(self.vidrate)

        self.vfilter = gst.element_factory_make("capsfilter", "vfilter")
        self.vfilter.set_property('caps', gst.caps_from_string('video/x-raw-yuv,width=320,height=240,framerate=30/1'))
        self.pipeline.add(self.vfilter)
        self.vidrate.link(self.vfilter)

        self.ffmpeg = gst.element_factory_make("ffmpegcolorspace","ffmpeg")
        self.pipeline.add(self.ffmpegcolorspace)
        self.vfilter.link(self.ffmpegcolorspace)

        self.h264 = gst.element_factory_make("x264enc","h264")
        self.h264.set_property("bitrate", 256)
        self.h264.set_property("subme", 4)
        self.h264.set_property("b-pryamid", True)
        self.h264.set_property("weightb", True)
        self.penipeline.add(self.h264)
        self.ffmpeg.link(self.h264)

        self.q2 = gst.element_factory_make("queue2","q2")
        self.pipeline.add(self.q2)
        self.h264.link(self.q2)

        self.flvmux = gst.element_factory_make("flvmux","flvmux")
        self.flvmux.set_property("name", "mux")
        #self.flvmux.set_property("alsasrc", "")
        self.pipeline.add(self.flvmux)
        self.q2.link(self.flvmux)

        self.alsasrc = gst.element_factory_make("alsasrc","alsasrc")
        self.pipeline.add(self.alsasrc)
        self.flvmux.link(self.alsasrc)

So this is the place where i am stuck and need some help.所以这是我被卡住并需要帮助的地方。

alsasrc应该连接到flvmux

self.alsasrc.link(self.flvmux)

I use the parse_launch function, but maybe that is cheating:我使用parse_launch函数,但也许这是作弊:

pipe = gst.parse_launch('v4l2src ! stamp sync-margin=1 sync-interval=1 ! videorate ! video/x-raw-yuv,width=640,height=480,framerate=30/1 ! ffmpegcolorspace ! x264enc bitrate=512 subme=4 b-pyramid=true weightb=true ! queue2 ! flvmux name=mux alsasrc ! audio/x-raw-int,rate=11025,channels=2,depth=16 ! audiorate ! queue2 max-size-buffers=600 max-size-bytes=0 max-size-time=0 ! audioconvert ! lamemp3enc target=1 bitrate=40 mono=true encoding-engine-quality=1 target=bitrate ! mux. mux. ! queue2 ! rtmpsink location="rtmp://server2" name="thesink"')

sink = pipe.get_by_name('thesink')
sink.set_property('location', 'rtmp://server3')

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM