This shows you the differences between two versions of the page.
Next revision | Previous revision Last revision Both sides next revision | ||
http_api_lua [2017/02/17 16:41] johnw created |
http_api_lua [2018/08/10 22:21] rlancaster [HTTP API for HE4K-01 / HE4K-R4 / MVE-150 / MVE-100R / SME-01 / DME-02/03/04] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== HTTP API ====== | + | ====== HTTP API for HE4K-01 / HE4K-R4 / MVE-150 / MVE-100R / SME-01 / DME-02/03/04 ====== |
+ | |||
+ | For Camera/Sensor based products <font 12.8px/arial;;#000000;;#ffffff>(Z3Cam/FXXX)</font> and the HE1080/DME-10 use [[:http_api|Z3-Camera_Solutions-http_api]] | ||
===== Configuration API Syntax ===== | ===== Configuration API Syntax ===== | ||
Line 32: | Line 34: | ||
import requests | import requests | ||
- | server_url='http://192.168.81.68/cgi-bin/control.cgi' | + | server_url='http://192.168.0.120/cgi-bin/control.cgi' |
r = requests.post(server_url, 'C1_enc_port=22222') | r = requests.post(server_url, 'C1_enc_port=22222') | ||
Line 81: | Line 83: | ||
import requests, json, sys | import requests, json, sys | ||
- | server_url='http://192.168.81.68/cgi-bin/control.cgi' | + | server_url='http://192.168.0.120/cgi-bin/control.cgi' |
global_cfg = requests.get(server_url, params='ctrl=sys&chn=null') | global_cfg = requests.get(server_url, params='ctrl=sys&chn=null') | ||
Line 89: | Line 91: | ||
print enc_cfg.json() | print enc_cfg.json() | ||
</code> | </code> | ||
+ | |||
+ | |||
+ | ==== Persistent Configuration ==== | ||
+ | |||
+ | If you want the current configuration to be saved for future startups, | ||
+ | you must explicitly perform the "SaveUser" action. | ||
+ | |||
+ | |||
+ | Python example code for saving configuration to persistent storage: | ||
+ | |||
+ | <code> | ||
+ | #! /usr/bin/env python | ||
+ | |||
+ | import requests, json, sys | ||
+ | from time import sleep | ||
+ | |||
+ | |||
+ | server_url='http://192.168.81.7/cgi-bin/control.cgi' | ||
+ | |||
+ | payload='action=SaveUser' | ||
+ | r = requests.post(server_url, payload) | ||
+ | print r | ||
+ | print r.json() | ||
+ | </code> | ||
+ | |||
+ | |||
===== Global Configuration ===== | ===== Global Configuration ===== | ||
Line 280: | Line 308: | ||
Possible values: off, on | Possible values: off, on | ||
+ | |||
+ | |||
+ | C1_enc_pcrinterval | ||
+ | |||
+ | Description: Interval between PCR packets in milliseconds. | ||
+ | |||
+ | Possible values: 30 - 100 | ||
+ | |||
+ | ==== C1_enc_auxonoff ==== | ||
+ | |||
+ | Describe: Enable AUXillary file recording in UDP mode – allows simultaneous UDP streaming and TS file recording on the same channel. Only valid if transport is UDP and tslowlat is off | ||
+ | |||
+ | The path to storage is set by the “storage” parameter. | ||
+ | |||
+ | The filename is set by the “fprefix” parameter. The default value is “MOV1_%F_%T”. The ”%F” specifier inserts a date stamp, and the ”%T” specifier inserts a time stamp. | ||
+ | |||
+ | The recording file size is set by the “filesize” parameter. When the file reaches this size, a new file will be created. | ||
+ | |||
+ | ==== C1_enc_fprefix ==== | ||
+ | |||
+ | Description: Relative filename for TSFILE or AUX file recording. Note that “fprefix” does NOT include the absolute media path – the “storage” parameter is the proper place to specify the absolute media path. | ||
+ | |||
+ | |||
+ | ==== C1_enc_storage ==== | ||
+ | |||
+ | Absolute path to mounted media device (e.g. /media/sda1/) | ||
+ | |||
</file> | </file> | ||
+ | |||
+ | |||
+ | ===== Encoder Audio Configuration ===== | ||
==== C1_enc_audchan1_enable ==== | ==== C1_enc_audchan1_enable ==== | ||
Line 372: | Line 430: | ||
Possible values: adts | Possible values: adts | ||
+ | |||
+ | |||
+ | ===== Encoder Text Overlay Configuration (only for DME-02/03/04, SBE264-01, SBE264-DVR-13) ===== | ||
+ | |||
+ | ==== C1_enc_ovlglobalalpha ==== | ||
+ | |||
+ | Description: Global alpha blending setting | ||
+ | |||
+ | Possible values: 0 (totally transparent) to 100 (totally opaque) | ||
+ | |||
+ | ==== C1_enc_ovltext ==== | ||
+ | |||
+ | Description: ASCII Text to draw | ||
+ | |||
+ | ==== C1_enc_ovltextenable ==== | ||
+ | |||
+ | Description: Enable or disable text overlay | ||
+ | |||
+ | Possible values: on, off | ||
+ | |||
+ | ==== C1_enc_ovltextlocation ==== | ||
+ | |||
+ | Description: Set position of overlay text onscreen | ||
+ | |||
+ | Possible values: top_left, top_right, top_center, bottom_left, bottom_right, bottom_center | ||
Line 386: | Line 469: | ||
actionname='StartChannel' | actionname='StartChannel' | ||
- | server_url='http://192.168.81.68' | + | server_url='http://192.168.0.120' |
control_cgi_url = server_url + '/cgi-bin/control.cgi' | control_cgi_url = server_url + '/cgi-bin/control.cgi' | ||
Line 417: | Line 500: | ||
channel = channel[1:] | channel = channel[1:] | ||
print actionname, ' ', opmode, 'channel', channel | print actionname, ' ', opmode, 'channel', channel | ||
- | payload = 'action='+actionname+'&'+ 'chn=' +channel; | + | payload = 'action='+actionname+'&'+ 'chn=' +channel+'&' + 'loadfromdb=true'; |
+ | headers={'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'} | ||
r = requests.post(control_cgi_url, payload) | r = requests.post(control_cgi_url, payload) | ||
print r.text | print r.text | ||
Line 438: | Line 523: | ||
+ | |||
+ | ==== GetStorage ==== | ||
+ | |||
+ | Reads the device files and mount points of available storage. | ||
+ | The following example shows an SD card device /dev/mmcblk0p1 | ||
+ | mounted at the directory /media/mmcblk0p1 | ||
+ | and a USB device /dev/sda1 mounted at the directory /media/sda1 | ||
+ | |||
+ | <code> | ||
+ | import requests, json, sys | ||
+ | |||
+ | payload='action=GetStorage' | ||
+ | r = requests.post(server_url, payload) | ||
+ | print r | ||
+ | print r.json() | ||
+ | </code> | ||
+ | |||
+ | Output: | ||
+ | <Response [200]> | ||
+ | {u'mounts': u'/dev/mmcblk0p1 /media/mmcblk0p1/,/dev/sda1 /media/sda1/,', u'ret': u'0'} | ||
+ | |||
+ | |||
+ | ==== Dynamic ==== | ||
+ | |||
+ | |||
+ | Set a dynamic parameter after encoding has already started | ||
+ | |||
+ | |||
+ | <code> | ||
+ | chn='1' | ||
+ | variable='auxfile' | ||
+ | value='off' | ||
+ | payload='action=Dynamic&chn=' + chn + '&var=' + variable + '&val=' + value | ||
+ | |||
+ | r = requests.post(server_url, payload) | ||
+ | print r | ||
+ | print r.json() | ||
+ | </code> | ||
+ | |||
+ | |||
+ | <code> | ||
+ | vratediv Set video frame rate divider | ||
+ | vrate Set bitrate | ||
+ | auxfile Dynamically start/stop auxfile recording (value is either on or off) | ||
+ | </code> | ||
+ | |||
+ | The auxfile command will return a status from the table below. | ||
+ | |||
+ | ^Auxfile status ^Number | | ||
+ | | VCAP_VENC_ERR_NO_SPACE | -26 | | ||
+ | | VCAP_VENC_ERR_THREAD_ERR | -25 | | ||
+ | | VCAP_VENC_ERR_BAD_MOUNTPOINT | -24 | | ||
+ | | VCAP_VENC_ERR_STOPPING_AUDIO | -23 | | ||
+ | | VCAP_VENC_ERR_MTS_INVALID_DEST | -22 | | ||
+ | | VCAP_VENC_ERR_MTS_BAD_UDP_DEST | -21 | | ||
+ | | VCAP_VENC_ERR_INSUFFICIENT_TS_RATE | -20 | | ||
+ | | VCAP_VENC_ERR_NO_SPARE_MTS_BW | -19 | | ||
+ | | VCAP_VENC_ERR_MTS_START_FAILURE | -18 | | ||
+ | | VCAP_VENC_ERR_MTS_DUPLICATE_DEST | -17 | | ||
+ | | VCAP_VENC_ERR_MTS_DUPLICATE_NAME | -16 | | ||
+ | | VCAP_VENC_ERR_MTS_TEARDOWN_FAILURE | -15 | | ||
+ | | VCAP_VENC_ERR_MTS_NAME_NOT_FOUND | -14 | | ||
+ | | VCAP_VENC_ERR_MTS_CREATE_FAILURE | -13 | | ||
+ | | VCAP_VENC_ERR_MTS_RATE_MISMATCH | -12 | | ||
+ | | VCAP_VENC_ERR_MTS_NO_FREE_INFO | -11 | | ||
+ | | VCAP_VENC_ERR_NOT_IMPLEMENTED | -10 | | ||
+ | | VCAP_VENC_ERR_AUDIO_CAPTURE_SINK | -8 | | ||
+ | | VCAP_VENC_ERR_NO_FREE_AUDIO_STREAM | -7 | | ||
+ | | VCAP_VENC_ERR_VIDEO_FILE_NAME_PARSE | -6 | | ||
+ | | VCAP_VENC_ERR_STREAM_NOT_RUNNING | -5 | | ||
+ | | VCAP_VENC_ERR_STREAM_HAS_CHILDREN | -4 | | ||
+ | | VCAP_VENC_ERR_AUDIO_CAPTURE_SOURCE | -3 | | ||
+ | | VCAP_VENC_ERR_STARTING_AUDIO | -2 | | ||
+ | | VCAP_VENC_ERR_BAD_DESTINATION | -1 | | ||
+ | | VCAP_VENC_SUCCESS | 0 | | ||
+ | | VCAP_VENC_WARN_ALREADY_STARTED | 1 | | ||
+ | |||
+ | |||
+ | \\ | ||
==== EncoderStatus ==== | ==== EncoderStatus ==== | ||
Line 474: | Line 638: | ||
To read the result, you need to POST the “stats” control as shown\\ | To read the result, you need to POST the “stats” control as shown\\ | ||
in the Python example code below. | in the Python example code below. | ||
+ | |||
===== Reading Statistics ===== | ===== Reading Statistics ===== | ||
Line 483: | Line 648: | ||
<code> | <code> | ||
import requests, json, sys | import requests, json, sys | ||
- | server_url='http://192.168.81.68/cgi-bin/control.cgi' | + | server_url='http://192.168.0.120/cgi-bin/control.cgi' |
requests.post(server_url, 'action=EncoderStatus&chn=1') | requests.post(server_url, 'action=EncoderStatus&chn=1') |