diff options
author | MaZderMind <github@mazdermind.de> | 2015-05-10 20:59:37 +0200 |
---|---|---|
committer | MaZderMind <github@mazdermind.de> | 2015-05-10 20:59:37 +0200 |
commit | ff90df796c715ee9c95fb8a2152cea2698fe92ab (patch) | |
tree | 626e514d66c9433ea156af1d684337dacbc24087 | |
parent | e104284f309b4492325931c5b47a16505e44a9a1 (diff) |
implement mixer & test-output
-rw-r--r-- | voctocore/default-config.ini | 2 | ||||
-rw-r--r-- | voctocore/lib/pipeline.py | 21 | ||||
-rw-r--r-- | voctocore/lib/video/mix.py | 41 | ||||
-rw-r--r-- | voctocore/lib/video/rawoutput.py | 2 | ||||
-rw-r--r-- | voctocore/lib/video/src.py | 2 | ||||
-rwxr-xr-x | voctocore/scripts/audio-source-cam1.sh (renamed from voctocore/scripts/test-audio-cam1.sh) | 0 | ||||
-rwxr-xr-x | voctocore/scripts/video-play-cam1-mirror.sh (renamed from voctocore/scripts/play-cam1-mirror.sh) | 0 | ||||
-rwxr-xr-x | voctocore/scripts/video-play-cam2-mirror.sh | 5 | ||||
-rwxr-xr-x | voctocore/scripts/video-play-mixer-output.sh | 5 | ||||
-rwxr-xr-x | voctocore/scripts/video-source-cam1.sh (renamed from voctocore/scripts/test-video-cam1.sh) | 0 | ||||
-rwxr-xr-x | voctocore/scripts/video-source-cam2.sh | 7 |
11 files changed, 75 insertions, 10 deletions
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/test-audio-cam1.sh b/voctocore/scripts/audio-source-cam1.sh index 0ca10d8..0ca10d8 100755 --- a/voctocore/scripts/test-audio-cam1.sh +++ b/voctocore/scripts/audio-source-cam1.sh diff --git a/voctocore/scripts/play-cam1-mirror.sh b/voctocore/scripts/video-play-cam1-mirror.sh index 75e65c7..75e65c7 100755 --- a/voctocore/scripts/play-cam1-mirror.sh +++ b/voctocore/scripts/video-play-cam1-mirror.sh 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/test-video-cam1.sh b/voctocore/scripts/video-source-cam1.sh index e920c43..e920c43 100755 --- a/voctocore/scripts/test-video-cam1.sh +++ b/voctocore/scripts/video-source-cam1.sh 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 |