Advertisement
snah

record.py

Dec 28th, 2011
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.93 KB | None | 0 0
  1. #! /usr/bin/env python2
  2. #
  3.  
  4. import os
  5. import datetime
  6. import pygst
  7. pygst.require("0.10")
  8. import gst
  9. import gobject
  10.  
  11.  
  12. class Recorder:
  13.         """Class that handles the recorder gstream pipeline"""
  14.  
  15.         def __init__(self):
  16.                 self.recorder = gst.Pipeline("recorder")
  17.  
  18.                 # ipcamsrcbin:
  19.                 self.source = gst.element_factory_make("souphttpsrc", "source")
  20.                 self.source.set_property("do-timestamp", "true")
  21.                 self.source.set_property("is-live", "true")
  22.                 self.source.set_property("timeout", 5)
  23.  
  24.                 self.streamdemux = gst.element_factory_make("multipartdemux", "streamdemux")
  25.                 self.streamdemux.connect('pad-added', self._demuxer_callback)
  26.  
  27.                 self.caps = gst.Caps('image/jpeg,width=640,height=480,framerate=1')
  28.                 self.capsfilter = gst.element_factory_make('capsfilter', 'capsfilter')
  29.                 self.capsfilter.set_property('caps', self.caps)
  30.  
  31.                 self.matroskamux = gst.element_factory_make("matroskamux", "matroskamux")
  32.                 self.filesink = gst.element_factory_make("filesink", "filesink")
  33.  
  34.                 self.recorder.add(self.source, self.streamdemux, self.capsfilter, self.matroskamux, self.filesink)
  35.                 gst.element_link_many(self.source, self.streamdemux)
  36.                 gst.element_link_many(self.capsfilter, self.matroskamux, self.filesink)
  37.  
  38.                 self.bus = self.recorder.get_bus()
  39.                 self.bus.add_signal_watch()
  40.                 self.bus.connect("message", self._on_message)
  41.  
  42.         def set_source(self, url, user, password):
  43.                 self.source.set_property("location", url)
  44.                 self.source.set_property("user-id", user)
  45.                 self.source.set_property("user-pw", password)
  46.  
  47.         def start(self):
  48.                 self.recorder.set_state(gst.STATE_PLAYING)
  49.  
  50.         def _on_message(self, bus, message):
  51.                 t = message.type
  52.                 if t == gst.MESSAGE_EOS:
  53.                         self.recorder.set_state(gst.STATE_NULL)
  54.                         print("EOS")
  55.                 elif t == gst.MESSAGE_ERROR:
  56.                         self.recorder.set_state(gst.STATE_NULL)
  57.                         err, debug = message.parse_error()
  58.                         print "Error: %s" % err, debug
  59.  
  60.         def _demuxer_callback(self, demuxer, pad):
  61.                 if pad.get_property('template').name_template == 'src_%d':
  62.                         caps_pad = self.capsfilter.get_pad('sink')
  63.                         pad.link(caps_pad)
  64.  
  65.  
  66.  
  67. def main():
  68.         gobject.threads_init()
  69.  
  70.         recorder = Recorder()
  71.         recorder.set_source("http://172.23.42.161/videostream.cgi?rate=15", "***", "***")
  72.         recorder.set_output_dir("~/tmp/")
  73.  
  74.         recorder.start()
  75.  
  76.         loop = gobject.MainLoop()
  77.         loop.run()
  78.  
  79.  
  80. if __name__ == "__main__":
  81.         main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement