Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # create a pipeline
- self.pipeline = Gst.parse_launch('rtspsrc name=source latency=150 ! rtph264depay name=demux ! tee name=fork fork. ! queue name=delay ! mpegtsmux name=mux ! tcpserversink host=0.0.0.0 port=0 name=stream timeout=4000000000 fork. ! queue ! h264parse ! matroskamux ! multifilesink name=persist aggregate-gops=true post-messages=true next-file=5')
- # find key elements and set properties done in separate function, returns pipeline or None if error.
- source = pipeline.get_by_name('source')
- demux = pipeline.get_by_name('demux')
- mux = pipeline.get_by_name('mux')
- pers_sink = pipeline.get_by_name('persist')
- stream_sink = pipeline.get_by_name('stream')
- os.makedirs(self.tempdir)
- tlocation = os.path.join(self.tempdir,'%05d')
- if username and password:
- source.set_property('user-id', username)
- source.set_property('user-pw', password)
- source.set_property('location',location)
- pers_sink.set_property('location',tlocation)
- #setup message bus and start the pipeline
- self.bus = self.pipeline.get_bus()
- self.bus.add_signal_watch()
- self.bus.connect('message',self.message_handler)
- self.sink = self.pipeline.get_by_name('stream')
- self.writer = self.pipeline.get_by_name('persist')
- self.sink.connect('client-added',self.add_client)
- self.sink.connect('client-socket-removed', self.remove_client)
- self.pipeline.set_state(Gst.State.READY)
- self.pipeline.get_state(1*Gst.SECOND)
- self.port = self.sink.get_property('current-port')
- self.http_type = self.get_http_content_type(self.mux_type)
- self.pipeline.set_state(Gst.State.PLAYING)
- self.mainloop.run()
- # Free the pipeline on eos, error on when requested. Done in kill() and __del__
- if self.pipeline:
- self.sink.emit('clear')
- self.bus.remove_signal_watch()
- name = self.pipeline.get_property('name')
- self.pipeline.set_state(Gst.State.NULL)
- state = self.pipeline.get_state(timeout=1*Gst.SECOND)
- while state[1] != Gst.State.NULL:
- self.sink.emit('clear')
- state = self.pipeline.get_state(timeout=1*Gst.SECOND)
- self.mainloop.quit()
Advertisement
Add Comment
Please, Sign In to add comment