Axis Camera DBusPosted: April 4, 2011 Related pages on www.mikekohn.net: mjpeg_webserver, Linux PTZ Control, j2me ipcamview, Axis DBus Introduction So I recently needed the ability to get an Axis camera to stream video to a Wowza Media Server without Wowza requesting the video. The idea being as soon as the camera is turned on, video starts playing. First I tried a small script that would make a socket connection to the camera and in the SETUP using the Transport: header to give it a new destination. The camera didn't like this. Next I played the idea of a little redirection program using my libkohn_rtsp.so that could be compiled to run on the camera. While putting this on the camera, I found the camera has Gstreamer, a Gstreamer plugin for their video (libgstartpec.so), and an executable called monolith that uses Gstreamer for the RTSP. After picking around in the monolith executable I realized it exposes control methods through DBus. Disclaimer So I should probably say that I don't work for Axis or am associated with them in any way, except that I'm a big fan of their cameras :). Since I didn't find any easily available documentation on the DBus interface in the camera on Axis's site, I hope Axis doesn't mind I'm posting this. I can't imagine it would be a problem anyway since being able to control video on a camera using DBus should be a pretty big selling point. Cameras So DBus doesn't seem to be available on cameras with firmware lower than 5.x. I've tested this on the following: Axis M1114, Axis M1031-W Commands Find out what destinations are available on the DBus. dbus-send --system --print-reply --dest=org.freedesktop.DBus --type=method_call /org/freedesktop/DBus org.freedesktop.DBus.ListNames Find out what objects are available on your camera through DBus: dbus-send --system --print-reply --dest=com.axis.Streamer --type=method_call /com/axis/Streamer org.freedesktop.DBus.Introspectable.Introspect
Find out what methods are available for the RTP object:
dbus-send --system --print-reply --dest=com.axis.Streamer --type=method_call /com/axis/Streamer/RTP org.freedesktop.DBus.Introspectable.Introspect
Create an RTP object
dbus-send --system --print-reply --dest=com.axis.Streamer --type=method_call /com/axis/Streamer/RTP com.axis.Streamer.RTP.CreatePipeline string:'/axis-media/media.amp' string:'&vcodec=h264' string:'192.168.1.104' int32:10000 int32:1
Check what RTP objects are created: dbus-send --system --print-reply --dest=com.axis.Streamer --type=method_call /com/axis/Streamer/RTP/Pipeline org.freedesktop.DBus.Introspectable.Introspect Check what methods are available for my new RTP object: dbus-send --system --print-reply --dest=com.axis.Streamer --type=method_call /com/axis/Streamer/RTP/Pipeline/2601122334 org.freedesktop.DBus.Introspectable.Introspect Start video playing on this object: dbus-send --system --print-reply --dest=com.axis.Streamer --type=method_call /com/axis/Streamer/RTP/Pipeline/2601122334 com.axis.Streamer.RTP.Pipeline.Play Stop video playing on this object and destroy it: dbus-send --system --print-reply --dest=com.axis.Streamer --type=method_call /com/axis/Streamer/RTP/Pipeline/2601122334 com.axis.Streamer.RTP.Pipeline.Destroy For both audio and video, it seems they have to be started separately: dbus-send --system --print-reply --dest=com.axis.Streamer --type=method_call /com/axis/Streamer/RTP com.axis.Streamer.RTP.CreatePipeline string:'/axis-media/media.amp/trackID=1' string:'&vcodec=h264' string:'192.168.1.104' int32:10002 int32:1 And dbus-send --system --print-reply --dest=com.axis.Streamer --type=method_call /com/axis/Streamer/RTP com.axis.Streamer.RTP.CreatePipeline string:'/axis-media/media.amp/trackID=2' string:'&vcodec=h264' string:'192.168.1.104' int32:10004 int32:1 To get an object's properties: dbus-send --system --print-reply --dest=com.axis.Streamer --type=method_call /com/axis/Streamer/RTP org.freedesktop.DBus.Properties.Get string:com.axis.Streamer.RTP string:TTL
Copyright 1997-2024 - Michael Kohn
|