From 6db3115f98846791cc258d257c3f922d11e5dfea Mon Sep 17 00:00:00 2001 From: =?utf8?q?David=20Test=C3=A9?= Date: Fri, 4 Mar 2016 23:38:16 +0100 Subject: [PATCH] Starting implementation of the backup feed (USB webcam based) --- stream_2016/gstconf.py | 45 +++++++++++++++++++++++++++++++++++------- 1 file changed, 38 insertions(+), 7 deletions(-) diff --git a/stream_2016/gstconf.py b/stream_2016/gstconf.py index a48c8fc..2f564fa 100755 --- a/stream_2016/gstconf.py +++ b/stream_2016/gstconf.py @@ -28,6 +28,7 @@ PATHNAME = '' AUDIO_DEFAULT = PATHNAME + 'AUDIO_DEFAULT' RAWVIDEO_DEFAULT = PATHNAME + 'RAWVIDEO_DEFAULT' STREAM_DEFAULT = PATHNAME + 'STREAM_DEFAULT' +WEBCAMUSB_DEFAULT = '/dev/video1' class New_user_pipeline(): @@ -41,6 +42,8 @@ class New_user_pipeline(): self.videosrc = Gst.ElementFactory.make('rtspsrc', 'videosrc') self.videosrc.set_property('location', 'rtsp://192.168.48.2:554') self.videosrc.set_property('latency', 0) +## self.videosrc = Gst.ElementFactory.make('v4l2src', 'videosrc') +## self.videosrc.set_property('device', '/dev/video1') def create_audio_sources(self): """Create audio inputs from various sources.""" @@ -56,6 +59,11 @@ class New_user_pipeline(): sinkpad = self.queuev_1.get_static_pad('sink') pad.link(sinkpad) + def create_audiolevel_plugin(self): + """Create audio level plugin to feed a vu-meter.""" + self.audiolevel = Gst.ElementFactory.make('level', 'audiolevel') + self.audiolevel.set_property('interval', 200000000) + def create_filesink(self): """Create storable output elements.""" self.disksink_rawvideo = Gst.ElementFactory.make('filesink') @@ -170,6 +178,7 @@ class New_user_pipeline(): self.create_video_sources() self.create_audio_sources() # Middle elements: + self.create_audiolevel_plugin() self.create_payloader_elements() self.create_depayloader_elements() self.create_encoder_elements() @@ -184,12 +193,21 @@ class New_user_pipeline(): print('created') - def add_elements_to_pipeline(self): - print('Pipeline creation state: adding elements... ', end='') + def add_elements_to_pipeline(self, feed='main'): + print('Pipeline creation state: adding elements... ', end='') + + if feed == 'main': + pass + # Add here the elments associated with the RTSP feed + elif feed == 'backup': + pass + # Add here the elments associated with the WEBCAM feed + # Inputs elements: self.streampipe.add(self.videosrc) self.streampipe.add(self.audiosrc) # Middle elements: + self.streampipe.add(self.audiolevel) self.streampipe.add(self.rtpjpegdepay) self.streampipe.add(self.jpegdec) self.streampipe.add(self.tee_rawvideo) @@ -226,9 +244,17 @@ class New_user_pipeline(): self.streampipe.add(self.icecastsink_stream) print('added') - def link_pipeline_elements(self): + def link_pipeline_elements(self, feed='main'): """Link all elements with static pads.""" print('Pipeline creation state: linking elements... ', end='') + + if feed == 'main': + pass + # linking here RTSP feed + elif feed == 'backup': + pass + # linking here backup feed (WEBCAM) + # Video feed: self.queuev_1.link(self.rtpjpegdepay) self.connect_tee(self.tee_rawvideo, @@ -244,7 +270,8 @@ class New_user_pipeline(): self.scaling,) self.queuev_3.link(self.screensink) # Audio feed: - self.audiosrc.link(self.queuea_1) + self.audiosrc.link(self.audiolevel) + self.audiolevel.link(self.queuea_1) self.queuea_1.link(self.vorbisenc) self.connect_tee(self.tee_rawaudio, self.vorbisenc, @@ -289,17 +316,21 @@ class New_user_pipeline(): print('Pipeline creation state: successfully done.') return self.streampipe + + def create_gstreamer_backup_pipeline(self): + """Creates a backup pipeline based on a webcam feed.""" + print("CREATE HERE A BACKUP PIPELINE") def on_message(self, bus, message): t = message.type if t == Gst.MessageType.EOS: - self.pipeol.set_state(Gst.State.NULL) + self.streampipe.set_state(Gst.State.NULL) self.stream_button.set_label('Stream') elif t == Gst.MessageType.ERROR: err, debug = message.parse_error() print ("Error: %s" % err, debug) - self.pipel.set_state(Gst.State.NULL) - self.stream_button.set_label('Stream') + self.streampipe.set_state(Gst.State.NULL) + self.create_gstreamer_backup_pipeline() def stream_play(self): self.streampipe.set_state(Gst.State.PLAYING) -- 2.25.1