Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #! /usr/bin/env python2
- #
- import os
- import datetime
- import pygst
- pygst.require("0.10")
- import gst
- import gobject
- class Recorder:
- """Class that handles the recorder gstream pipeline"""
- def __init__(self):
- self.recorder = gst.Pipeline("recorder")
- # ipcamsrcbin:
- self.source = gst.element_factory_make("souphttpsrc", "source")
- self.source.set_property("do-timestamp", "true")
- self.source.set_property("is-live", "true")
- self.source.set_property("timeout", 5)
- self.streamdemux = gst.element_factory_make("multipartdemux", "streamdemux")
- self.streamdemux.connect('pad-added', self._demuxer_callback)
- self.caps = gst.Caps('image/jpeg,width=640,height=480,framerate=1')
- self.capsfilter = gst.element_factory_make('capsfilter', 'capsfilter')
- self.capsfilter.set_property('caps', self.caps)
- self.matroskamux = gst.element_factory_make("matroskamux", "matroskamux")
- self.filesink = gst.element_factory_make("filesink", "filesink")
- self.recorder.add(self.source, self.streamdemux, self.capsfilter, self.matroskamux, self.filesink)
- gst.element_link_many(self.source, self.streamdemux)
- gst.element_link_many(self.capsfilter, self.matroskamux, self.filesink)
- self.bus = self.recorder.get_bus()
- self.bus.add_signal_watch()
- self.bus.connect("message", self._on_message)
- def set_source(self, url, user, password):
- self.source.set_property("location", url)
- self.source.set_property("user-id", user)
- self.source.set_property("user-pw", password)
- def start(self):
- self.recorder.set_state(gst.STATE_PLAYING)
- def _on_message(self, bus, message):
- t = message.type
- if t == gst.MESSAGE_EOS:
- self.recorder.set_state(gst.STATE_NULL)
- print("EOS")
- elif t == gst.MESSAGE_ERROR:
- self.recorder.set_state(gst.STATE_NULL)
- err, debug = message.parse_error()
- print "Error: %s" % err, debug
- def _demuxer_callback(self, demuxer, pad):
- if pad.get_property('template').name_template == 'src_%d':
- caps_pad = self.capsfilter.get_pad('sink')
- pad.link(caps_pad)
- def main():
- gobject.threads_init()
- recorder = Recorder()
- recorder.set_source("http://172.23.42.161/videostream.cgi?rate=15", "***", "***")
- recorder.set_output_dir("~/tmp/")
- recorder.start()
- loop = gobject.MainLoop()
- loop.run()
- if __name__ == "__main__":
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement