<div dir="ltr"><div><div><div><div>Hi,<br><br></div>I'm trying to write the buffer timestamps (buf.pts) of a webcam steam to a text file. I use appsink and a little callable function. This works fine when I stream h.264 (apart from non-monotonical timestamps). But, it fails if I stream raw or mpeg. I see no errors or warnings, but the stream freezes/pauses after two frames (i.e. 2 timestamps written to file). When streaming h.264 h264parse is necessary otherwise it too freezes after 2 frames. I tried using videoparse, but this crashes python, and jpegparse does not make any difference. <br><br></div>Does anyone have advice?<br><br></div>Scripts (unfortunately not gst-launch since I do not know how to combine that with the callback)<br>- - - - - - - - - - - - - - - - - -<br><br></div>Streaming h.264 (WORKS):<br><br>
<p style="margin:0px;text-indent:0px"><span style="font-family:monospace,monospace">class Webcam_ts_h264:</span></p><span style="font-family:monospace,monospace">
</span><p style="margin:0px 0px 0px 40px;text-indent:0px"><span style="font-family:monospace,monospace"> def __init__(self, video_dev='/dev/video0', fps=15):</span></p><div style="margin-left:40px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> """</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> """</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> ts_log_fname = 'ts_test.log'</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"> </p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.ts_log = open(ts_log_fname, 'w')</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.ts_log.write('n_buf, buf.pts\n')</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.n_frames = 0</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.pipeline = Gst.Pipeline()</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"> </p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> def on_new_sample(appsink):</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 120px;text-indent:0px"><span style="font-family:monospace,monospace"> """</span></p><div style="margin-left:120px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 120px;text-indent:0px"><span style="font-family:monospace,monospace"> Function called from the pipeline by appsink.</span></p><div style="margin-left:120px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 120px;text-indent:0px"><span style="font-family:monospace,monospace"> Writes the timestampes of frame capture to a log file.</span></p><div style="margin-left:120px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 120px;text-indent:0px"><span style="font-family:monospace,monospace"> """</span></p><div style="margin-left:120px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 120px;text-indent:0px"><span style="font-family:monospace,monospace"> # Get the buffer</span></p><div style="margin-left:120px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 120px;text-indent:0px"><span style="font-family:monospace,monospace"> smp = appsink.emit('pull-sample')</span></p><div style="margin-left:120px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 120px;text-indent:0px"><span style="font-family:monospace,monospace"> buf = smp.get_buffer()</span></p><div style="margin-left:120px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 120px;text-indent:0px"><span style="font-family:monospace,monospace"> self.n_frames += 1</span></p><div style="margin-left:120px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 120px;text-indent:0px"><span style="font-family:monospace,monospace"> self.ts_log.write('%d,%0.9f\n' % </span></p><div style="margin-left:120px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 120px;text-indent:0px"><span style="font-family:monospace,monospace"> (self.n_frames, np.float64(1e-9) * buf.pts))</span></p><div style="margin-left:120px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 120px;text-indent:0px"><span style="font-family:monospace,monospace"> return Gst.FlowReturn.OK</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"><br></span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> # Video source:</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.v4l2src = Gst.ElementFactory.make('v4l2src', None)</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.v4l2src.set_property('device', video_dev)</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.v4l2src.set_property('do-timestamp', 'true')</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> # Formats available from C920 camera: </span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> # 'image/jpeg', 'video/x-h264', 'video/x-raw'</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> vid_caps = Gst.Caps.from_string('video/x-h264,'</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> 'width=%d,height=%d,'</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> 'framerate=%d/1' % (640, 480, fps))</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.vid_filter = Gst.ElementFactory.make('capsfilter', None)</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.vid_filter.set_property('caps', vid_caps)</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.vid_parse = Gst.ElementFactory.make('h264parse', None)</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.ts_sink = Gst.ElementFactory.make('appsink', None)</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> # Setting properties of appsink</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> # Tell sink to emit signals</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.ts_sink.set_property('emit-signals', True)</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.ts_sink.set_property('sync', False) # No sync</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> # Connect appsink to my function (writing timestamps)</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.ts_sink.connect('new-sample', on_new_sample)</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"><br></span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> # Add elements to the pipeline</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.pipeline.add(self.v4l2src)</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.pipeline.add(self.vid_filter)</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.pipeline.add(self.vid_parse)</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.pipeline.add(self.ts_sink)</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"><br></span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> # link</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.v4l2src.link(self.vid_filter)</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.vid_filter.link(self.vid_parse)</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.vid_parse.link(self.ts_sink)</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"> </p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 40px;text-indent:0px"><span style="font-family:monospace,monospace"> def run(self):</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.pipeline.set_state(Gst.State.PLAYING)</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"><br></span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 40px;text-indent:0px"><span style="font-family:monospace,monospace"> def quit(self):</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.pipeline.set_state(Gst.State.NULL)</span></p><div style="margin-left:80px"><span style="font-family:monospace,monospace">
</span></div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.ts_log.close()</span></p><p style="margin:0px 0px 0px 80px;text-indent:0px"><br><span style="font-family:monospace,monospace"></span></p><p style="margin-top:0px;margin-right:0px;margin-bottom:0px;text-indent:0px"><span style="font-family:arial,helvetica,sans-serif">Streaming raw (FAILS):</span><span style="font-family:monospace,monospace"></span></p><p style="margin-top:0px;margin-right:0px;margin-bottom:0px;text-indent:0px"><br>
</p><p style="margin:0px;text-indent:0px"><span style="font-family:monospace,monospace">class Webcam_ts_raw:</span></p><span style="font-family:monospace,monospace">
</span><p style="margin:0px 0px 0px 40px;text-indent:0px"><span style="font-family:monospace,monospace"> def __init__(self, video_dev='/dev/video0', fps=15):</span></p><div style="margin-left:40px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> """</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> """</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> ts_log_fname = 'ts_test.log'</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"> </p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.ts_log = open(ts_log_fname, 'w')</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.ts_log.write('n_buf, buf.pts\n')</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.n_frames = 0</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.pipeline = Gst.Pipeline()</span></p><div style="margin-left:80px">
</div><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"> </p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> def on_new_sample(appsink):</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 120px;text-indent:0px"><span style="font-family:monospace,monospace"> """</span></p><div style="margin-left:120px">
</div><p style="margin:0px 0px 0px 120px;text-indent:0px"><span style="font-family:monospace,monospace"> Function called from the pipeline by appsink.</span></p><div style="margin-left:120px">
</div><p style="margin:0px 0px 0px 120px;text-indent:0px"><span style="font-family:monospace,monospace"> Writes the timestampes of frame capture to a log file.</span></p><div style="margin-left:120px">
</div><p style="margin:0px 0px 0px 120px;text-indent:0px"><span style="font-family:monospace,monospace"> """</span></p><div style="margin-left:120px">
</div><p style="margin:0px 0px 0px 120px;text-indent:0px"><span style="font-family:monospace,monospace"> # Get the buffer</span></p><div style="margin-left:120px">
</div><p style="margin:0px 0px 0px 120px;text-indent:0px"><span style="font-family:monospace,monospace"> smp = appsink.emit('pull-sample')</span></p><div style="margin-left:120px">
</div><p style="margin:0px 0px 0px 120px;text-indent:0px"><span style="font-family:monospace,monospace"> buf = smp.get_buffer()</span></p><div style="margin-left:120px">
</div><p style="margin:0px 0px 0px 120px;text-indent:0px"><span style="font-family:monospace,monospace"> self.n_frames += 1</span></p><div style="margin-left:120px">
</div><p style="margin:0px 0px 0px 120px;text-indent:0px"><span style="font-family:monospace,monospace"> self.ts_log.write('%d,%0.9f\n' % </span></p><div style="margin-left:120px">
</div><p style="margin:0px 0px 0px 120px;text-indent:0px"><span style="font-family:monospace,monospace"> (self.n_frames, np.float64(1e-9) * buf.pts))</span></p><div style="margin-left:120px">
</div><p style="margin:0px 0px 0px 120px;text-indent:0px"><span style="font-family:monospace,monospace"> return Gst.FlowReturn.OK</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"><br></span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> # Video source:</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.v4l2src = Gst.ElementFactory.make('v4l2src', None)</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.v4l2src.set_property('device', video_dev)</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.v4l2src.set_property('do-timestamp', 'true')</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> # Formats available from C920 camera: </span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> # 'image/jpeg', 'video/x-h264', 'video/x-raw'</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> vid_caps = Gst.Caps.from_string('video/x-raw,'</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> 'width=%d,height=%d,'</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> 'framerate=%d/1' % (640, 480, fps))</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.vid_filter = Gst.ElementFactory.make('capsfilter', None)</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.vid_filter.set_property('caps', vid_caps)</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> #self.vid_parse = Gst.ElementFactory.make('jpegparse', None)</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.ts_sink = Gst.ElementFactory.make('appsink', None)</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> # Setting properties of appsink</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> # Tell sink to emit signals</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.ts_sink.set_property('emit-signals', True)</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.ts_sink.set_property('sync', False) # No sync</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> # Connect appsink to my function (writing timestamps)</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.ts_sink.connect('new-sample', on_new_sample)</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"><br></span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> # Add elements to the pipeline</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.pipeline.add(self.v4l2src)</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.pipeline.add(self.vid_filter)</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> #self.pipeline.add(self.vid_parse)</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.pipeline.add(self.ts_sink)</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"><br></span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> # link</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.v4l2src.link(self.vid_filter)</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.vid_filter.link(self.ts_sink)</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> #self.vid_filter.link(self.vid_parse)</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> #self.vid_parse.link(self.ts_sink)</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"> </p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 40px;text-indent:0px"><span style="font-family:monospace,monospace"> def run(self):</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.pipeline.set_state(Gst.State.PLAYING)</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"><br></span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 40px;text-indent:0px"><span style="font-family:monospace,monospace"> def quit(self):</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.pipeline.set_state(Gst.State.NULL)</span></p><div style="margin-left:80px">
</div><p style="margin:0px 0px 0px 80px;text-indent:0px"><span style="font-family:monospace,monospace"> self.ts_log.close() </span></p><br><div><div><div><div>Best regards,<br></div><div>Hjalmar<br></div></div></div></div></div>