diff options
Diffstat (limited to 'voctocore')
-rw-r--r-- | voctocore/videomix.py | 59 |
1 files changed, 45 insertions, 14 deletions
diff --git a/voctocore/videomix.py b/voctocore/videomix.py index 4ed9d25..e67a7b1 100644 --- a/voctocore/videomix.py +++ b/voctocore/videomix.py @@ -7,11 +7,37 @@ class Videomix: mixerpads = [] def __init__(self): - self.pipeline = Gst.parse_launch(""" + self.pipeline = Gst.Pipeline() + + # create audio and video mixer + mixerbin = self.createMixer() + self.pipeline.add(mixerbin) + + # create camera sources + for camberabin in self.createDummyCamSources(): + # link camerasource to the mixers + self.pipeline.add(camberabin) + camberabin.get_by_name('video_src').link(self.pipeline.get_by_name('livevideo')) + camberabin.get_by_name('audio_src').link(self.pipeline.get_by_name('liveaudio')) + + # demonstrate some control + liveaudio = self.pipeline.get_by_name('liveaudio') + liveaudio.set_property('active-pad', liveaudio.get_static_pad('sink_0')) + + livevideo = self.pipeline.get_by_name('livevideo') + pad = livevideo.get_static_pad('sink_1') + pad.set_property('alpha', 0.5) + + self.pipeline.set_state(Gst.State.PLAYING) + + def createMixer(self): + return Gst.parse_bin_from_description(""" videomixer name=livevideo ! autovideosink input-selector name=liveaudio ! autoaudiosink - """) - + """, False) + + + def createDummyCamSources(self): uris = ('file:///home/peter/122.mp4', 'file:///home/peter/10025.mp4',) for idx, uri in enumerate(uris): # create a bin for camera input @@ -24,17 +50,22 @@ class Videomix: # configure camera input camberabin.get_by_name('input').set_property('uri', uri) - # add to pipeline and link to mixers - self.pipeline.add(camberabin) - camberabin.get_by_name('video_src').link(self.pipeline.get_by_name('livevideo')) - camberabin.get_by_name('audio_src').link(self.pipeline.get_by_name('liveaudio')) + # pass bin upstream + yield camberabin - # demonstrate some control - liveaudio = self.pipeline.get_by_name('liveaudio') - liveaudio.set_property('active-pad', liveaudio.get_static_pad('sink_0')) - livevideo = self.pipeline.get_by_name('livevideo') - pad = livevideo.get_static_pad('sink_1') - pad.set_property('alpha', 0.5) - self.pipeline.set_state(Gst.State.PLAYING) + def createCamSources(self): + for cam in range(2): + # create a bin for camera input + camberabin = Gst.parse_bin_from_description(""" + decklinksrc name=input input=sdi input-mode=1080p25 + input. ! videoconvert ! videoscale ! videorate ! video/x-raw,width=1920,height=1080,framerate=25/1 ! identity name=video_src + input. ! audioconvert name=audio_src + """, False) + + # configure camera input + camberabin.get_by_name('input').set_property('subdevice', cam) + + # pass bin upstream + yield camberabin |