From ff90df796c715ee9c95fb8a2152cea2698fe92ab Mon Sep 17 00:00:00 2001 From: MaZderMind Date: Sun, 10 May 2015 20:59:37 +0200 Subject: implement mixer & test-output --- voctocore/default-config.ini | 2 +- voctocore/lib/pipeline.py | 21 ++++++++++---- voctocore/lib/video/mix.py | 41 +++++++++++++++++++++++++++- voctocore/lib/video/rawoutput.py | 2 +- voctocore/lib/video/src.py | 2 +- voctocore/scripts/audio-source-cam1.sh | 6 ++++ voctocore/scripts/play-cam1-mirror.sh | 5 ---- voctocore/scripts/test-audio-cam1.sh | 6 ---- voctocore/scripts/test-video-cam1.sh | 7 ----- voctocore/scripts/video-play-cam1-mirror.sh | 5 ++++ voctocore/scripts/video-play-cam2-mirror.sh | 5 ++++ voctocore/scripts/video-play-mixer-output.sh | 5 ++++ voctocore/scripts/video-source-cam1.sh | 7 +++++ voctocore/scripts/video-source-cam2.sh | 7 +++++ 14 files changed, 93 insertions(+), 28 deletions(-) create mode 100755 voctocore/scripts/audio-source-cam1.sh delete mode 100755 voctocore/scripts/play-cam1-mirror.sh delete mode 100755 voctocore/scripts/test-audio-cam1.sh delete mode 100755 voctocore/scripts/test-video-cam1.sh create mode 100755 voctocore/scripts/video-play-cam1-mirror.sh create mode 100755 voctocore/scripts/video-play-cam2-mirror.sh create mode 100755 voctocore/scripts/video-play-mixer-output.sh create mode 100755 voctocore/scripts/video-source-cam1.sh create mode 100755 voctocore/scripts/video-source-cam2.sh (limited to 'voctocore') diff --git a/voctocore/default-config.ini b/voctocore/default-config.ini index ccf80b5..802e1af 100644 --- a/voctocore/default-config.ini +++ b/voctocore/default-config.ini @@ -8,7 +8,7 @@ encode_previews=true [sources] ; tcp-ports will be 10000,10001 ; video=cam1,cam2,grabber -video=cam1 +video=cam1,cam2 ; tcp-ports will be 20000,20001 audio=cam1,cam2 diff --git a/voctocore/lib/pipeline.py b/voctocore/lib/pipeline.py index 5687573..fb9b846 100644 --- a/voctocore/lib/pipeline.py +++ b/voctocore/lib/pipeline.py @@ -18,12 +18,21 @@ class Pipeline(object): vsources = [] vmirrors = [] vpreviews = [] + vmixer = None + vmixerout = None def __init__(self): + self.initVideo() + + def initVideo(self): caps = Config.get('mix', 'videocaps') self.log.info('Video-Caps configured to: %s', caps) - for idx, name in enumerate(Config.getlist('sources', 'video')): + names = Config.getlist('sources', 'video') + if len(names) < 1: + raise RuntimeException("At least one Video-Source must be configured!") + + for idx, name in enumerate(names): port = 10000 + idx self.log.info('Creating Video-Source %s at tcp-port %u', name, port) @@ -37,9 +46,9 @@ class Pipeline(object): mirror = VideoRawOutput('video_%s_mirror' % name, port, caps) self.vmirrors.append(mirror) - # self.log.debug('Creating Video-Mixer') - # self.videomixer = VideoMix() + self.log.debug('Creating Video-Mixer') + self.videomixer = VideoMix() - # port = 11000 - # self.log.debug('Creating Video-Mixer-Output at tcp-port %u', port) - # mirror = VideoRawOutput('video_mix', port, caps) + port = 11000 + self.log.debug('Creating Video-Mixer-Output at tcp-port %u', port) + self.vmixerout = VideoRawOutput('video_mix', port, caps) diff --git a/voctocore/lib/video/mix.py b/voctocore/lib/video/mix.py index 2d73d7b..8bb7036 100644 --- a/voctocore/lib/video/mix.py +++ b/voctocore/lib/video/mix.py @@ -7,9 +7,48 @@ from lib.config import Config class VideoMix(object): log = logging.getLogger('VideoMix') + mixingPipeline = None + def __init__(self): caps = Config.get('mix', 'videocaps') names = Config.getlist('sources', 'video') self.log.info('Configuring Mixer for %u Sources', len(names)) - #for idx, name in enumerate(): + + pipeline = """ + videomixer name=mix ! + {caps} ! + textoverlay text=mixer halignment=left valignment=top ypad=175 ! + intervideosink channel=video_mix + """.format( + caps=caps + ) + + for idx, name in enumerate(names): + pipeline += """ + intervideosrc channel=video_{name}_mixer ! + {caps} ! + videoscale ! + capsfilter name=caps_{idx} ! + mix. + """.format( + name=name, + caps=caps, + idx=idx + ) + + self.log.debug('Launching Mixing-Pipeline:\n%s', pipeline) + self.mixingPipeline = Gst.parse_launch(pipeline) + self.mixingPipeline.set_state(Gst.State.PLAYING) + + mixerpad = self.mixingPipeline.get_by_name('mix').get_static_pad('sink_0') + mixerpad.set_property('alpha', 0.5) + mixerpad.set_property('xpos', 64) + mixerpad.set_property('ypos', 64) + + mixerpad = self.mixingPipeline.get_by_name('mix').get_static_pad('sink_1') + mixerpad.set_property('alpha', 0.2) + + capsilter = self.mixingPipeline.get_by_name('caps_1') + capsilter.set_property('caps', Gst.Caps.from_string( + 'video/x-raw,width=320,height=180')) diff --git a/voctocore/lib/video/rawoutput.py b/voctocore/lib/video/rawoutput.py index ecdb1ba..bb9efc4 100644 --- a/voctocore/lib/video/rawoutput.py +++ b/voctocore/lib/video/rawoutput.py @@ -40,7 +40,7 @@ class VideoRawOutput(object): pipeline = """ intervideosrc channel={channel} ! {caps} ! - textoverlay text={channel} halignment=left valignment=top ypad=125 ! + textoverlay text={channel} halignment=left valignment=top ypad=225 ! gdppay ! fdsink fd={fd} """.format( diff --git a/voctocore/lib/video/src.py b/voctocore/lib/video/src.py index dbbe12d..404b60f 100644 --- a/voctocore/lib/video/src.py +++ b/voctocore/lib/video/src.py @@ -66,7 +66,7 @@ class VideoSrc(object): fdsrc fd={fd} ! gdpdepay ! {caps} ! - textoverlay text=video_{name}_fd halignment=left valignment=top ypad=175 ! + textoverlay text=video_{name}_fd halignment=left valignment=top ypad=125 ! intervideosink channel=video_{name}_in """.format( fd=conn.fileno(), diff --git a/voctocore/scripts/audio-source-cam1.sh b/voctocore/scripts/audio-source-cam1.sh new file mode 100755 index 0000000..0ca10d8 --- /dev/null +++ b/voctocore/scripts/audio-source-cam1.sh @@ -0,0 +1,6 @@ +#!/bin/sh +gst-launch-1.0 \ + audiotestsrc !\ + audio/x-raw,format=S16LE,channels=2,layout=interleaved,rate=48000 !\ + gdppay !\ + tcpclientsink host=localhost port=20000 diff --git a/voctocore/scripts/play-cam1-mirror.sh b/voctocore/scripts/play-cam1-mirror.sh deleted file mode 100755 index 75e65c7..0000000 --- a/voctocore/scripts/play-cam1-mirror.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh -gst-launch-1.0 \ - tcpclientsrc host=localhost port=13000 !\ - gdpdepay !\ - xvimagesink diff --git a/voctocore/scripts/test-audio-cam1.sh b/voctocore/scripts/test-audio-cam1.sh deleted file mode 100755 index 0ca10d8..0000000 --- a/voctocore/scripts/test-audio-cam1.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -gst-launch-1.0 \ - audiotestsrc !\ - audio/x-raw,format=S16LE,channels=2,layout=interleaved,rate=48000 !\ - gdppay !\ - tcpclientsink host=localhost port=20000 diff --git a/voctocore/scripts/test-video-cam1.sh b/voctocore/scripts/test-video-cam1.sh deleted file mode 100755 index e920c43..0000000 --- a/voctocore/scripts/test-video-cam1.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh -gst-launch-1.0 \ - videotestsrc !\ - video/x-raw,format=I420,width=1280,height=720,framerate=25/1,pixel-aspect-ratio=1/1 !\ - timeoverlay valignment=bottom !\ - gdppay !\ - tcpclientsink host=localhost port=10000 diff --git a/voctocore/scripts/video-play-cam1-mirror.sh b/voctocore/scripts/video-play-cam1-mirror.sh new file mode 100755 index 0000000..75e65c7 --- /dev/null +++ b/voctocore/scripts/video-play-cam1-mirror.sh @@ -0,0 +1,5 @@ +#!/bin/sh +gst-launch-1.0 \ + tcpclientsrc host=localhost port=13000 !\ + gdpdepay !\ + xvimagesink diff --git a/voctocore/scripts/video-play-cam2-mirror.sh b/voctocore/scripts/video-play-cam2-mirror.sh new file mode 100755 index 0000000..75e65c7 --- /dev/null +++ b/voctocore/scripts/video-play-cam2-mirror.sh @@ -0,0 +1,5 @@ +#!/bin/sh +gst-launch-1.0 \ + tcpclientsrc host=localhost port=13000 !\ + gdpdepay !\ + xvimagesink diff --git a/voctocore/scripts/video-play-mixer-output.sh b/voctocore/scripts/video-play-mixer-output.sh new file mode 100755 index 0000000..c33b8f3 --- /dev/null +++ b/voctocore/scripts/video-play-mixer-output.sh @@ -0,0 +1,5 @@ +#!/bin/sh +gst-launch-1.0 \ + tcpclientsrc host=localhost port=11000 !\ + gdpdepay !\ + xvimagesink diff --git a/voctocore/scripts/video-source-cam1.sh b/voctocore/scripts/video-source-cam1.sh new file mode 100755 index 0000000..e920c43 --- /dev/null +++ b/voctocore/scripts/video-source-cam1.sh @@ -0,0 +1,7 @@ +#!/bin/sh +gst-launch-1.0 \ + videotestsrc !\ + video/x-raw,format=I420,width=1280,height=720,framerate=25/1,pixel-aspect-ratio=1/1 !\ + timeoverlay valignment=bottom !\ + gdppay !\ + tcpclientsink host=localhost port=10000 diff --git a/voctocore/scripts/video-source-cam2.sh b/voctocore/scripts/video-source-cam2.sh new file mode 100755 index 0000000..403b852 --- /dev/null +++ b/voctocore/scripts/video-source-cam2.sh @@ -0,0 +1,7 @@ +#!/bin/sh +gst-launch-1.0 \ + videotestsrc pattern=ball !\ + video/x-raw,format=I420,width=1280,height=720,framerate=25/1,pixel-aspect-ratio=1/1 !\ + timeoverlay valignment=bottom !\ + gdppay !\ + tcpclientsink host=localhost port=10001 -- cgit v1.2.3