-
-
Save mangelajo/6fa005ff3544fecdecfa to your computer and use it in GitHub Desktop.
and get_commandlist.cgi result: | |
<oishare> | |
<version>2.20</version> | |
<support func="web"/> | |
<support func="remote"/> | |
<support func="gps"/> | |
<support func="release"/> | |
<cgi name="get_connectmode"> | |
<http_method type="get"/> | |
</cgi> | |
<cgi name="switch_cammode"> | |
<http_method type="get"> | |
<cmd1 name="mode"> | |
<param1 name="rec"> | |
<cmd2 name="lvqty"> | |
<param2 name="0320x0240"/> | |
<param2 name="0640x0480"/> | |
</cmd2> | |
</param1> | |
<param1 name="play"/> | |
<param1 name="shutter"> | |
<cmd2 name="lvqty"> | |
<param2 name="0320x0240"/> | |
<param2 name="0640x0480"/> | |
</cmd2> | |
</param1> | |
</cmd1> | |
</http_method> | |
</cgi> | |
<cgi name="get_caminfo"> | |
<http_method type="get"/> | |
</cgi> | |
<cgi name="exec_pwoff"> | |
<http_method type="get"/> | |
</cgi> | |
<cgi name="get_resizeimg"> | |
<http_method type="get"> | |
<cmd1 name="DIR"> | |
<param1> | |
<cmd2 name="size"> | |
<param2 name="1024"/> | |
<param2 name="1600"/> | |
<param2 name="1920"/> | |
<param2 name="2048"/> | |
</cmd2> | |
</param1> | |
</cmd1> | |
</http_method> | |
</cgi> | |
<cgi name="get_movplaytime"> | |
<http_method type="get"> | |
<cmd1 name="DIR"/> | |
</http_method> | |
</cgi> | |
<cgi name="clear_resvflg"> | |
<http_method type="get"/> | |
</cgi> | |
<cgi name="get_rsvimglist"> | |
<http_method type="get"/> | |
</cgi> | |
<cgi name="get_imglist"> | |
<http_method type="get"> | |
<cmd1 name="DIR"/> | |
</http_method> | |
</cgi> | |
<cgi name="get_thumbnail"> | |
<http_method type="get"> | |
<cmd1 name="DIR"/> | |
</http_method> | |
</cgi> | |
<cgi name="exec_takemotion"> | |
<http_method type="get"> | |
<cmd1 name="com"> | |
<param1 name="assignafframe"> | |
<cmd2 name="point"/> | |
</param1> | |
<param1 name="releaseafframe"/> | |
<param1 name="takeready"> | |
<cmd2 name="point"/> | |
</param1> | |
<param1 name="starttake"> | |
<cmd2 name="point"> | |
<cmd3 name="exposuremin"/> | |
<cmd3 name="upperlimit"/> | |
</cmd2> | |
</param1> | |
<param1 name="stoptake"/> | |
</cmd1> | |
</http_method> | |
</cgi> | |
<cgi name="exec_takemisc"> | |
<http_method type="get"> | |
<cmd1 name="com"> | |
<param1 name="startliveview"> | |
<cmd2 name="port"/> | |
</param1> | |
<param1 name="stopliveview"/> | |
<param1 name="getrecview"/> | |
<param1 name="getlastjpg"/> | |
<param1 name="ctrlzoom"> | |
<cmd2 name="move"> | |
<param2 name="widemove"/> | |
<param2 name="telemove"/> | |
<param2 name="off"/> | |
<param2 name="wideterm"/> | |
<param2 name="teleterm"/> | |
</cmd2> | |
</param1> | |
</cmd1> | |
</http_method> | |
</cgi> | |
<cgi name="get_camprop"> | |
<http_method type="get"> | |
<cmd1 name="com"> | |
<param1 name="desc"> | |
<cmd2 name="propname"> | |
<param2 name="touchactiveframe"/> | |
<param2 name="takemode"/> | |
<param2 name="drivemode"/> | |
<param2 name="focalvalue"/> | |
<param2 name="expcomp"/> | |
<param2 name="shutspeedvalue"/> | |
<param2 name="isospeedvalue"/> | |
<param2 name="wbvalue"/> | |
<param2 name="noisereduction"/> | |
<param2 name="lowvibtime"/> | |
<param2 name="bulbtimelimit"/> | |
<param2 name="artfilter"/> | |
<param2 name="digitaltelecon"/> | |
<param2 name="desclist"/> | |
</cmd2> | |
</param1> | |
<param1 name="get"> | |
<cmd2 name="propname"> | |
<param2 name="touchactiveframe"/> | |
<param2 name="takemode"/> | |
<param2 name="drivemode"/> | |
<param2 name="focalvalue"/> | |
<param2 name="expcomp"/> | |
<param2 name="shutspeedvalue"/> | |
<param2 name="isospeedvalue"/> | |
<param2 name="wbvalue"/> | |
<param2 name="noisereduction"/> | |
<param2 name="lowvibtime"/> | |
<param2 name="bulbtimelimit"/> | |
<param2 name="artfilter"/> | |
<param2 name="digitaltelecon"/> | |
<param2 name="desclist"/> | |
</cmd2> | |
</param1> | |
</cmd1> | |
</http_method> | |
</cgi> | |
<cgi name="set_camprop"> | |
<http_method type="post"> | |
<cmd1 name="com"> | |
<param1 name="set"> | |
<cmd2 name="propname"> | |
<param2 name="takemode"/> | |
<param2 name="drivemode"/> | |
<param2 name="focalvalue"/> | |
<param2 name="expcomp"/> | |
<param2 name="shutspeedvalue"/> | |
<param2 name="isospeedvalue"/> | |
<param2 name="wbvalue"/> | |
<param2 name="artfilter"/> | |
</cmd2> | |
</param1> | |
</cmd1> | |
</http_method> | |
</cgi> | |
<cgi name="get_activate"> | |
<http_method type="get"/> | |
</cgi> | |
<cgi name="set_utctimediff"> | |
<http_method type="get"> | |
<cmd1 name="utctime"> | |
<cmd2 name="diff"/> | |
</cmd1> | |
</http_method> | |
</cgi> | |
<cgi name="get_gpsdivunit"> | |
<http_method type="get"/> | |
</cgi> | |
<cgi name="get_unusedcapacity"> | |
<http_method type="get"/> | |
</cgi> | |
<cgi name="get_dcffilenum"> | |
<http_method type="get"/> | |
</cgi> | |
<cgi name="req_attachexifgps"> | |
<http_method type="post"/> | |
</cgi> | |
<cgi name="req_storegpsinfo"> | |
<http_method type="post"> | |
<cmd1 name="mode"> | |
<param1 name="new"/> | |
<param1 name="append"/> | |
<cmd2 name="date"/> | |
</cmd1> | |
</http_method> | |
</cgi> | |
<cgi name="exec_shutter"> | |
<http_method type="get"> | |
<cmd1 name="com"> | |
<param1 name="1stpush"/> | |
<param1 name="2ndpush"/> | |
<param1 name="1st2ndpush"/> | |
<param1 name="2nd1strelease"/> | |
<param1 name="2ndrelease"/> | |
<param1 name="1strelease"/> | |
</cmd1> | |
</http_method> | |
</cgi> | |
<cgi name="exec_shuttermisc"> | |
<http_method type="get"> | |
<cmd1 name="com"> | |
<param1 name="startliveview"> | |
<cmd2 name="port"/> | |
</param1> | |
<param1 name="stopliveview"/> | |
</cmd1> | |
</http_method> | |
</cgi> | |
</oishare> |
I found a documentation to describe communication protocol:
https://opc.olympus-imaging.com/wp-content/uploads/2015/06/OPC_Communication_Protocol_EN_1.0a.zip
@mdauphin Great gist and document!
I was able to take three shots with the following sequence.
curl "http://192.168.0.10/switch_cammode.cgi?mode=shutter"
curl "http://192.168.0.10/exec_shutter.cgi?com=1st2ndpush"
curl "http://192.168.0.10/exec_shutter.cgi?com=1st2ndpush"
curl "http://192.168.0.10/exec_shutter.cgi?com=1st2ndpush"
Thanks for your documentation. I could create a ESP8266 wifi shutter button!!
My repo: https://github.com/LeeTroy/OlympusWiFiShutter
Thank for your document!
In share app
what is the code to start video record and stop?
Olympus seem to have dropped the air SDK and removed it from their site. I was wondering if anyone here per chance still has a backup copy of it they could share?
Olympus seem to have dropped the air SDK and removed it from their site.
I searched with the filename and found new one. ✨ Cc: @AngelicaPerduta
in http://www.dpreview.com/forums/thread/3579412
Andreas Rebs says
Hi Airelle,
I'm gone the same way on analysing the video stream. SOI and EOI markers were the hint that MJPEG is used. The camera transmittes around 20 images per second if a resolution of 640 x 480 pixels is used. Each image is splitted into several parts because it doesn't fit in one packet. Each packet containes a 12 byte long header at the beginning with following structure:
byte 1..2: packet type (start: 0x9060, part n: 0x8060, final: 0x80e0),
byte 3..4: consecutive number within a image to assemble packets in the right order (remeber, UDP is used),
byte 5..8: it seems to be an unique id for each transmitted image, so one can distinguish between data blocks of different images,
byte 9..12: it seems to be a kind of session id (it means an id from starting the stream until this stream will be stopped).
In orer to display such an image you have to collect all data beginning with 0xffd8 from start packet followed by data from following packets until 0xffd9. From first packet you already have cut the header and the meta data section. But you also have to cut the first 12 byte of header from all following packets. That is your mistake during your previous work.
There is a mechanism for correct assembling of data packets realized per header data within each packet. But during my tests it wasn't necessary to order the packets an no one packet was missing. This is because the server (camera) and the client (the application) uses a direct network connection. I would recommend to implement a header evaluation for your application, but for a simple test you can pass it.
Sorry for my poor english. I hope it is understandable anyway and will help you to develop your application.
Best Regards
Andreas