├── .gitignore ├── commands ├── stop_preview_cmd.md ├── stop_live_cmd.md ├── stop_record_cmd.md ├── list_files.md ├── get_options_cmd.md ├── start_record_cmd.md ├── set_options_cmd.md ├── take_picture_cmd.md ├── overview.md ├── start_live_cmd.md ├── start_preview_cmd.md ├── connect_cmd.md └── get_image_param_cmd.md ├── state_polling.md ├── README.md ├── async_command_handling.md └── capabilities.md /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | -------------------------------------------------------------------------------- /commands/stop_preview_cmd.md: -------------------------------------------------------------------------------- 1 | ### Overview 2 | 3 | `stop_preview` command stops the preview and update the camera state. 4 | 5 | ## Request 6 | 7 | ```json 8 | { 9 | "name":"camera._stopPreview" 10 | } 11 | ``` 12 | 13 | ## Response 14 | 15 | ```json 16 | { 17 | "name":"camera._stopPreview", 18 | "state":"done" 19 | } 20 | ``` 21 | 22 | -------------------------------------------------------------------------------- /commands/stop_live_cmd.md: -------------------------------------------------------------------------------- 1 | ## Overview 2 | 3 | `stop_live` command stops the live stream and update the camera state. 4 | 5 | ## Reqeust 6 | 7 | ```json 8 | { 9 | "name":"camera._stopLive" 10 | } 11 | ``` 12 | 13 | 14 | 15 | ## Response 16 | 17 | ```json 18 | { 19 | "name":"camera._stopLive", 20 | "state":"done", 21 | "sequence":int 22 | } 23 | ``` 24 | 25 | -------------------------------------------------------------------------------- /commands/stop_record_cmd.md: -------------------------------------------------------------------------------- 1 | ## Overview 2 | 3 | `stop_record` command stops the recording and update the camera state 4 | 5 | ## Request 6 | 7 | ```json 8 | { 9 | "name":"camera._stopRecording" 10 | } 11 | ``` 12 | 13 | ## Response 14 | 15 | ```json 16 | { 17 | "name":"camera._stopRecording", 18 | "state":"done", 19 | "sequence":int 20 | } 21 | ``` 22 | 23 | -------------------------------------------------------------------------------- /commands/list_files.md: -------------------------------------------------------------------------------- 1 | ## Overview 2 | 3 | `listFiles` command let you get a file list on the camera. 4 | 5 | ## Request 6 | 7 | ```json 8 | { 9 | "name":"camera._listFiles", 10 | "parameters":{ 11 | "path":string // you could find the path of the storage in the response of state command 12 | } 13 | } 14 | ``` 15 | 16 | ## Response 17 | 18 | `listFiles` is an async command. View [Async command handling](../async_command_handling.md) to learn how to handle the result. 19 | 20 | ```json 21 | { 22 | "name": "camera._listFiles", 23 | "state": "done", 24 | "sequence":int //sequence id for async handling 25 | } 26 | ``` -------------------------------------------------------------------------------- /commands/get_options_cmd.md: -------------------------------------------------------------------------------- 1 | ## Overview 2 | 3 | `get_options` command let you retrieve options from camera. View supported options. 4 | 5 | ## Request 6 | 7 | The only parameter needed is `property`, which is the name of the options 8 | 9 | ```json 10 | { 11 | "name":"camera._getOptions", 12 | "parameters": { 13 | "property":string 14 | } 15 | } 16 | ``` 17 | 18 | 19 | 20 | ## Response 21 | 22 | The `value` may b `int`, `string`, `array`, `object`, depending on specific property. 23 | 24 | ```json 25 | { 26 | "name":"camera._getOptions", 27 | "state":"done", 28 | "results":{ 29 | "value": depends on property 30 | } 31 | } 32 | ``` 33 | 34 | -------------------------------------------------------------------------------- /commands/start_record_cmd.md: -------------------------------------------------------------------------------- 1 | ## Overview 2 | 3 | `start_record` command start recording. 4 | 5 | ## Reqeust 6 | 7 | ```json 8 | { 9 | "name": "camera._startRecording", 10 | "parameters":{ 11 | "origin": { 12 | "mime":string, 13 | "width":int,//single fisheye image width and height, eg. 3840 x 2160,3840x2880 14 | "height":int, 15 | "framerate":int, 16 | "bitrate":int, 17 | "logMode":int, 18 | "hdr":bool, 19 | "saveOrigin":bool, 20 | "storage_loc":int //0:save on TF card 1:save on main storage,default 0 21 | }, 22 | "stiching": { 23 | "mode":sting, 24 | "mime":string, 25 | "width":int,//stitched video size, no more than 4k, like 3840x1920. 26 | "height":int, 27 | "framerate":int, 28 | "bitrate":int, 29 | }, 30 | "audio":{ 31 | "mime":string, 32 | "sampleFormat":string, 33 | "channelLayout":string, 34 | "samplerate":int, 35 | "bitrate":int 36 | } 37 | } 38 | } 39 | ``` 40 | 41 | -------------------------------------------------------------------------------- /commands/set_options_cmd.md: -------------------------------------------------------------------------------- 1 | ## Overview 2 | 3 | `set_options` command let you set options to camera. The cammand support batch options setting. 4 | 5 | ## Request 6 | 7 | - Single options 8 | 9 | ```json 10 | { 11 | "name":"camera._setOptions", 12 | "parameters": { 13 | "property":string, 14 | "value"://depends on property, may be int,string,array or object 15 | } 16 | } 17 | ``` 18 | 19 | - Batch options 20 | 21 | ```json 22 | { 23 | "name":"camera._setOptions", 24 | "parameters":[ 25 | { 26 | "property":string, 27 | "value"://depends on property, may be int,string,array or object 28 | },{ 29 | "property":string, 30 | "value"://depends on property, may be int,string,array or object 31 | } 32 | ] 33 | } 34 | ``` 35 | 36 | 37 | 38 | ## Response 39 | 40 | - Single options 41 | 42 | ```json 43 | { 44 | "name":"camera._setOptions", 45 | "state":"done" 46 | } 47 | ``` 48 | 49 | - Batch options 50 | 51 | ```json 52 | { 53 | "name":"camera._setOptions", 54 | "state":"done",//if any option failed, the state is error and the detailed error is described in results. 55 | "results": { 56 | "detail":[ 57 | { 58 | "property":string, 59 | "code":int, 60 | "description":string 61 | } 62 | ] 63 | } 64 | } 65 | ``` 66 | 67 | -------------------------------------------------------------------------------- /state_polling.md: -------------------------------------------------------------------------------- 1 | ## Overview 2 | 3 | State polling is used both for heartbeat and receiving notification from camera. 4 | 5 | Camera will disconnect the client after 10s without receiving `state` command. Generally, we suggest sending `state` command every 1 second, do not send the next `state` command before the previous one respond. 6 | 7 | 8 | 9 | Except [required headers](commands/overview.md), `state` command do not needs any param. 10 | 11 | 12 | 13 | ## State Response 14 | 15 | ```json 16 | { 17 | "_battery":{ 18 | "battery_level":float, 19 | "battery_charge":bool 20 | }, 21 | "_idRes": [int], // array of finished async command sequence 22 | "_external_dev":{ 23 | "entries":[string],//array of filepath on camera main storage 24 | "save_path":string //default save_path 25 | }, 26 | "_cam_state":int, //camera state mask 27 | "_gps_state":int, //0: no device; 1: no location, 2: 2d location; 3: 3d location 28 | "_tl_info":{//information for timelapse 29 | "tl_count":int //count of pictures taken 30 | }, 31 | "_snd_state":{//microphone information 32 | "dev_name":string, //name of the microphone device 33 | "type":int, //mic type,0:none;1:built-in mic; 2: 3.5mm mic; 3: usb mic; -1: unknown 34 | "is_spatial":bool //whether it is a spatial mic 35 | }, 36 | "_left_info":{//estimated storage information 37 | "_rec_left_sec":int, //left recording time in current recording mode, in seconds. 38 | "_live_rec_left_sec":int,//left recording time in live+recording mode, in seconds. 39 | }, 40 | "fan_level":int //fan level of the camera 41 | } 42 | ``` 43 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /commands/take_picture_cmd.md: -------------------------------------------------------------------------------- 1 | ## Overview 2 | 3 | `take_picture` command handles picture taking, including normal picture, burst, HDR, bracket. 4 | 5 | ## Request 6 | 7 | ```json 8 | { 9 | "name": "camera._takePicture", 10 | "parameters":{ 11 | "origin":{ 12 | "mime":"jpeg", 13 | "width":4000, //single fisheye image width, eg. 4000 14 | "height":3000,//single fisheye image height, eg. 3000 15 | "saveOrigin":true, 16 | "storage_loc":1 //works for Titan,0:save on TF card 1:save on Main storage 17 | }, 18 | "stiching":{ 19 | "mode":"pano", 20 | "mime":"jpeg", 21 | "width":7680, //stitched image width, eg. 8000 22 | "height":3840, //stitched image height, eg.4000 23 | "map":"equirectangular", 24 | "algorithm":"normal" //on-board stitching algorithm, available values are "opticalFlow" and "normal",default "normal" 25 | }, 26 | "burst":{"enable":bool, "count":int},//available for burst mode 27 | "hdr":{"enable":bool, "count":int, "min_ev":int, "max_ev":int}, // available for hdr mode, currently only support 3 pictures 28 | "bracket":{"enable":bool, "count":int, "min_ev":int, "max_ev":int}, //available for bracket mode 29 | "delay":int,//delay in second before the camera actually execute the take picture command 30 | } 31 | } 32 | ``` 33 | 34 | 35 | 36 | ## Response 37 | 38 | `take_picture` is an async command. View [Async command handling](../async_command_handling.md) to learn how to handle the result. 39 | 40 | ```json 41 | { 42 | "name": "camera._takePicture", 43 | "state": "done", 44 | "sequence":int //sequence id for async handling 45 | } 46 | ``` 47 | 48 | -------------------------------------------------------------------------------- /commands/overview.md: -------------------------------------------------------------------------------- 1 | ## Commands Overview 2 | 3 | ### Request/Response structures 4 | 5 | Commands are executed by HTTP POST requests. Required HTTP Headers are listed below. 6 | 7 | | Name | Value | Description | 8 | | ------------ | ------------------------------------------------- | ---------------------------------------------------------- | 9 | | Fingerprint | A string value,empty string for `connect` command | Identification of the client,obtained by `connect` command | 10 | | Content-Type | application/json | | 11 | 12 | Most commands has the similar structure of request body. The root JSON object has `name` and `parameters` attributes, `name` describes which command to execute. `parameters` differs among different commands. 13 | 14 | eg. 15 | 16 | ```json 17 | { 18 | "name": "camera._connect", 19 | "parameters":{ 20 | "hw_time":"MMDDhhmm[[CC]YY][.ss]", 21 | "time_zone":"GMT+08:00/GMT-08:00" 22 | } 23 | 24 | ``` 25 | 26 | 27 | 28 | Generally, the response contains `name` and `state`. `state` indicates whether the request is successfully executed. The value is `done` on success, `exception` or `error` otherwise. 29 | 30 | eg. 31 | 32 | **On success** 33 | 34 | ```json 35 | { 36 | "name":"camera._connect", 37 | "state":"done", 38 | "results":{ //results contains the data returned by the command. 39 | ... 40 | } 41 | } 42 | ``` 43 | 44 | 45 | 46 | **On failure** 47 | 48 | ```json 49 | { 50 | "name":"camera._connect", 51 | "state":"exception", 52 | "error":{ //error object contains the detailed error 53 | "code":-1, //error code 54 | "description":"The camera has been taken by another client." //error description 55 | } 56 | } 57 | ``` 58 | 59 | -------------------------------------------------------------------------------- /commands/start_live_cmd.md: -------------------------------------------------------------------------------- 1 | ## Overview 2 | 3 | Insta360 Pro series camera has 2 live mode, `normal` and `origin live`. 4 | 5 | For `normal` mode, the camera push a single stitched equirectangular/cube mapped stream. This is the most commonly used live mode, but with a maximum resolution of 3840x3840 due to on-board stitching limit. 6 | 7 | For `origin live` mode, the camera push multiple fisheye stream(one for each lens). This mode is mainly used for out-camera stitching, and the resolution goes up to 8K, and even 11k for titan (requires the client hardware be able to do the stitching real-time). 8 | 9 | 10 | 11 | ## Request 12 | 13 | `stiching` is only available in `normal` mode, do not pass `stiching` in `origin live` mode 14 | 15 | ```json 16 | { 17 | "name": "camera._startLive", 18 | "parameters":{ 19 | "origin":{ 20 | "mime":string, 21 | "width":int, 22 | "height":int, 23 | "framerate":float, 24 | "bitrate":int, 25 | "logMode":int, 26 | "liveUrl":string,//only available in origin live mode, pass rtmp url without stream name. eg. rtmp://127.0.0.1/live 27 | "saveOrigin":bool 28 | }, 29 | "stiching":{ //stitching is only needed in normal mode, do not pass this param for origin live mode 30 | "mode":sting, 31 | "mime":string, 32 | "width":int, 33 | "height":int, 34 | "framerate":int, 35 | "bitrate":int, 36 | "map":string, 37 | "_liveUrl":string, //rtmp url, like rtmp://127.0.0.1/live/test 38 | "liveOnHdmi":bool, 39 | "fileSave":bool //save live stream on the camera. 40 | }, 41 | "audio":{ 42 | "mime":string, 43 | "sampleFormat":string, 44 | "channelLayout":string, 45 | "samplerate":int, 46 | "bitrate":int 47 | } 48 | }, 49 | "autoConnect":{ 50 | "enable":bool, 51 | "interval":int, // retry delay in ms. 52 | "count":int //count = -1 means always try to reconnect 53 | } 54 | “stabilization”:bool 55 | } 56 | ``` 57 | 58 | 59 | 60 | ## Response 61 | 62 | ```json 63 | { 64 | "name":"camera._startLive", 65 | “state”:"done", 66 | "results":{"_liveUrl":string} 67 | } 68 | ``` 69 | 70 | For `origin live` mode, if the `liveUrl` you specified is rtmp://{host}/{app_name}, then you could access streams by the url rtmp://{host}/{app_name}/origin{i} where i=1,2,3,4,5,6,(7,8 for titan). -------------------------------------------------------------------------------- /commands/start_preview_cmd.md: -------------------------------------------------------------------------------- 1 | ## Overview 2 | 3 | `start_preview` command tells the camera to push an rtmp preview stream. 4 | 5 | ## Request 6 | 7 | For any capture command, `origin` , `stiching` and `audio` are three common params. 8 | 9 | `origin` describes the capture options of each lens. Generally, it looks like this: 10 | 11 | ```json 12 | { 13 | "mime":string,//mime type of the output, might be "h264","h265" for video, "jpeg","raw" for image, 14 | "width":int, 15 | "height":int, 16 | "framerate":float, 17 | "bitrate":float, //bitrate in Kbps 18 | "saveOrigin":bool //whether to save the separated fisheye origin video/image. 19 | } 20 | ``` 21 | 22 | `stiching` describes the output of on-board stitching 23 | 24 | ```json 25 | { 26 | "mode":string,//stitching mode,"pano" for mono 360 video,"3d_top_left" for stereo 360 with top/bottom layout, left eye on top. "3d_top_right" for stereo 360 with top/bottom layout, right eye on top. 27 | "mime":string,//mime type of the output, "h264" for video,"jpeg" for image 28 | "width":int, 29 | "height":int, 30 | "framerate":float, 31 | "bitrate":float//bitrate in Kbps 32 | } 33 | ``` 34 | 35 | **NOTE**: The name of the attribute is `stiching`, not `stitching`. I know it is a typo, for compatiblility consideration, we kept it. 36 | 37 | `audio` describes the audio options 38 | 39 | ```json 40 | { 41 | "mime":'aac', 42 | "sampleFormat":'s16', 43 | "channelLayout":'stereo', 44 | "samplerate":48000, 45 | "bitrate":128 46 | } 47 | ``` 48 | 49 | `stiching` for `start_preveiw` is required. Here is the sample of `start_preview` request 50 | 51 | ```json 52 | { 53 | "name": "camera._startPreview", 54 | "parameters":{ 55 | "origin":{ 56 | "mime":"h264", 57 | "width":1920, 58 | "height":1440, 59 | "framerate":30, 60 | "bitrate":20480 //Kbps 61 | }, 62 | "stiching":{ 63 | "mode":"pano", 64 | "mime":"h264", 65 | "width":3840, 66 | "height":1920, 67 | "framerate":30, //should be the same as origin.framerate 68 | "bitrate":10240 //Kbps 69 | }, 70 | }, 71 | "stabilization":true //whether apply stabilization on preview. 72 | } 73 | ``` 74 | 75 | 76 | 77 | ## Response 78 | 79 | The response contains the absolute rtmp url for playnback. 80 | 81 | ```json 82 | { 83 | "name":"camera._startPreview", 84 | "state":"done", 85 | "results":{ 86 | "_previewUrl":string 87 | } 88 | } 89 | ``` 90 | 91 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Overview 2 | 3 | Insta360 Pro Camera API defines a set of commands to control Insat360 Pro series cameras, supported cameras are listed below. 4 | 5 | | Model | Link | 6 | | :------------- | ------------------------------------------- | 7 | | Insta360 Pro | http://insta360.com/product/insta360-pro/ | 8 | | Insta360 Pro 2 | http://insta360.com/product/insta360-pro2/ | 9 | | Insta360 Titan | http://insta360.com/product/insta360-titan/ | 10 | 11 | The commands are transferred via http request/response, the data is encoded in JSON format. 12 | 13 | ### About Built-in Http Server 14 | 15 | Camera supporting Insta360 Pro Camera API has a built-in http server. You could get ip address from the screen of the camera. Here are url routers. 16 | 17 | | Name | URL Pattern | Function | 18 | | --------------------------------------------- | ------------------------------------------------------- | --------------------------------------------- | 19 | | `command` | http://{camera_ip}:20000/osc/commands/execute | Execute commands | 20 | | `state` | http://{camera_ip}:20000/osc/state | Poll state, also for notification from camera to client | 21 | | `file` | http://{camera_ip}:8000/{fileuri} | Access Image/Video file from camera | 22 | | `preview` | rtmp://{camera_ip}:1935/live/preview | rtmp stream of preview | 23 | 24 | 25 | 26 | ## Documentations 27 | 28 | + [State Polling](state_polling.md) 29 | 30 | + [Async Command Handling](async_command_handling.md) 31 | 32 | + [Commands](commands/overview.md) 33 | 34 | + [camera._connect](commands/connect_cmd.md) 35 | 36 | + [camera._setOptions](commands/set_options_cmd.md) 37 | 38 | + [camera._getOptions](commands/get_options_cmd.md) 39 | 40 | + [camera._getImageParam](commands/get_image_param_cmd.md) 41 | 42 | + [camera._startPreview](commands/start_preview_cmd.md) 43 | 44 | + [camera._stopPreview](commands/stop_preview_cmd.md) 45 | 46 | + [camera._takePicture](commands/take_picture_cmd.md) 47 | 48 | + [camera._startRecording](commands/start_record_cmd.md) 49 | 50 | + [camera._stopRecording](commands/stop_record_cmd.md) 51 | 52 | + [camera._startLive](commands/start_live_cmd.md) 53 | 54 | + [camera._stopLive](commands/stop_live_cmd.md) 55 | 56 | + [camera._listFiles](commands/list_files.md) 57 | + [Capabilities](capabilities.md) 58 | -------------------------------------------------------------------------------- /async_command_handling.md: -------------------------------------------------------------------------------- 1 | ## Async command handling 2 | 3 | In most case, we could simply send a http request to execute command, and get result from the http response. However, this is not a good way for time-consuming command, such as `take_picture` , `stop_record` and so on. 4 | 5 | Pro Camera API provide a way to execute command asynchronously. Take `take_picture` command as an example, the http response looks like this 6 | 7 | ```json 8 | { 9 | "name":"camera._takePicture", 10 | "state":"done", 11 | "sequence":int 12 | } 13 | ``` 14 | 15 | There is no result in the response. Instead, there is a `sequence` value. The `sequence` acts as an asynchronous task token, which identifis this `take_picture` command and could be used to get the actual result later. 16 | 17 | In [State polling](state_polling.md), we introduced the response of `state` command, where there is a `_idRes` atrribute. The value of `_idRes` attributes is an array of such `sequence` whose corresponding async task has finished executing. So once the `sequence` of `take_picture` command is listed in `_idRes` , we could then get the actual result of the command. 18 | 19 | ## `get_result` command 20 | 21 | `get_result` command is designed to get actual result of async command. 22 | 23 | ### Request 24 | 25 | ```json 26 | { 27 | "name":"camera._getResult", 28 | "parameters": { 29 | "list_ids":[int] //array of sequence you want to get result. 30 | } 31 | } 32 | ``` 33 | 34 | 35 | 36 | ### Response 37 | 38 | ```json 39 | { 40 | "name":"camera._getResult", 41 | "results":{ 42 | "res_array":[ 43 | { 44 | "id":int, //the sequence id 45 | "name":string, //name of the async command 46 | "results":{ //the sync command results 47 | "state":"done", 48 | ... 49 | } 50 | } 51 | ] 52 | } 53 | } 54 | ``` 55 | 56 | 57 | 58 | eg. If we send an `get_result` command with a `take_picture` sequence id. The response looks like this 59 | 60 | ```json 61 | { 62 | "name":"camera._getResult", 63 | "results":{//results of get_result command 64 | "res_array":[ 65 | { 66 | "id":int, //the sequence stop_record command 67 | "name":"camera._stopRecording", //name of the async command 68 | "results":{ //the origin command response 69 | "state":"done", 70 | "results": {//the origin command results 71 | "_picUrl":string 72 | } 73 | } 74 | } 75 | ] 76 | } 77 | } 78 | ``` 79 | 80 | 81 | 82 | -------------------------------------------------------------------------------- /commands/connect_cmd.md: -------------------------------------------------------------------------------- 1 | ## Overview 2 | 3 | `connect` is the first command to execute. On success, a session between camera and the client is established, during which any other client is not able to connect to this camera. 4 | 5 | ## Request 6 | 7 | `connect` needs the client to sync time with the camera. 8 | 9 | ```json 10 | { 11 | "name":"camera._connect", 12 | "parameters":{ 13 | "hw_time":"MMDDhhmm[[CC]YY][.ss]",// utc time 14 | "time_zone":"GTM time zone str" 15 | } 16 | } 17 | ``` 18 | 19 | ### Response 20 | 21 | In the response, the camera returns basic information like `machine`(model name), `sys_info`(mostly version info), and information of current camera action, like recording options,stitching options, preview options, audio options and etc. 22 | 23 | ```json 24 | { 25 | "name":"camera._connect", 26 | "state":"done", 27 | "machine":"pro2",//indicates camera model. this attribute is not presented in Pro, possible value are "pro2" and "titan" 28 | "results":{ 29 | "Fingerprint":string, //identification of the session, should be passed in header in the following commands 30 | "_cam_state":int, 31 | "url_list":{ 32 | "_liveUrl": string, 33 | "_previewUrl": string, 34 | "_recordUrl": string 35 | }, 36 | "last_info":{ //last_info contains basic camera information and information of current camera action, like preview/recording/living. 37 | "state":string, 38 | "version":string, 39 | "moduleVersion":string, 40 | "origin":{ //options of unstitched origin fisheye 41 | "width":int, 42 | "height":int, 43 | "framerate":int, 44 | "bitrate":int, 45 | "mime":string, 46 | "saveOrigin":bool 47 | }, 48 | "preview":{ //options of stitched preview stream 49 | "width":int, 50 | "height":int, 51 | "framerate":int, 52 | "bitrate":int, 53 | "mime":string 54 | }, 55 | "live":{ //options of stitched live stream 56 | "width":int, 57 | "height":int, 58 | "framerate":int, 59 | "bitrate":int, 60 | "mime":string, 61 | "url":string, 62 | “timePast”:int, 63 | "timeLeft":int, 64 | "liveOnHdmi":bool 65 | }, 66 | "record":{ //options of stitched record stream 67 | "width":int, 68 | "height":int, 69 | "framerate":int, 70 | "bitrate":int, 71 | "mime":string, 72 | “url”:string, 73 | “timePast”:int, 74 | "timeLeft":int 75 | }, 76 | “audio”:{// options for audio 77 | "mime":string, 78 | "sampleFormat":string, 79 | "channelLayout":string, 80 | "samplerate":int, 81 | "bitrate":int 82 | }, 83 | "sys_info":{ //basic camera information 84 | "k_v": "6.0", //kernel version 85 | "r_v":"'000", //rom version 86 | "p_v":"'1.00May 192017", 87 | "sn":"'xxxxxx",//serial number 88 | "h_v":"V0.9.0_2017.5.16" //http service version 89 | } 90 | } 91 | } 92 | } 93 | ``` 94 | 95 | 96 | 97 | -------------------------------------------------------------------------------- /commands/get_image_param_cmd.md: -------------------------------------------------------------------------------- 1 | ## Overview 2 | 3 | `get_image_param` command let you get all the image params at one time. 4 | 5 | ### Request 6 | 7 | No parameter is need. 8 | 9 | ```json 10 | { 11 | "name":"camera._getImageParam" 12 | } 13 | ``` 14 | 15 | 16 | 17 | ### Response 18 | 19 | ```json 20 | { 21 | "name":"camera._getImageParam", 22 | "state":"done", 23 | "results":{ 24 | "aaa_mode":int, 25 | “wb”:int, 26 | "iso_value":int, 27 | "shutter_value":int, 28 | "brightness":int, 29 | "contrast":int, 30 | "saturation":int, 31 | "hue":int, 32 | "sharpness":int, 33 | "ev_bias":int, 34 | "ae_meter":int, 35 | "dig_effect":int, 36 | "flicker":int 37 | } 38 | } 39 | ``` 40 | 41 | ## Image Param 42 | 43 | - `aaa_mode`, 3A mode of the camera, available values: 44 | 45 | + Auto Mode = 1 46 | + Manual Mode = 0 47 | + WDR Mode = 2 48 | + Shutter Priority Mode = 3 49 | + ISO Priority Mode = 4 50 | 51 | - `wb`, white balance, available values: 52 | 53 | | White balance | param value | 54 | | ------------- | ----------- | 55 | | Auto | 0 | 56 | | 2700K | 1 | 57 | | 3200K | 6 | 58 | | 4000K | 2 | 59 | | 5000K | 3 | 60 | | 6500K | 4 | 61 | | 7500K | 5 | 62 | 63 | - `iso_value`, available values: 64 | 65 | | iso | param value | 66 | | ---- | ----------- | 67 | | 100 | 1 | 68 | | 125 | 2 | 69 | | 160 | 3 | 70 | | 200 | 4 | 71 | | 250 | 5 | 72 | | 320 | 6 | 73 | | 400 | 7 | 74 | | 500 | 8 | 75 | | 640 | 9 | 76 | | 800 | 10 | 77 | | 1000 | 11 | 78 | | 1250 | 12 | 79 | | 1600 | 13 | 80 | | 2000 | 14 | 81 | | 2500 | 15 | 82 | | 3200 | 16 | 83 | | 4000 | 17 | 84 | | 5000 | 18 | 85 | | 6400 | 19 | 86 | 87 | - `shutter_value`, value tables: 88 | 89 | | Shutter | Param value | 90 | | ------- | ----------- | 91 | | 2s | 1 | 92 | | 1s | 4 | 93 | | 1/2s | 7 | 94 | | 1/3s | 9 | 95 | | 1/4s | 10 | 96 | | 1/5s | 11 | 97 | | 1/8s | 13 | 98 | | 1/10s | 14 | 99 | | 1/15s | 16 | 100 | | 1/20s | 17 | 101 | | 1/25s | 18 | 102 | | 1/30s | 19 | 103 | | 1/40s | 20 | 104 | | 1/50s | 21 | 105 | | 1/60s | 22 | 106 | | 1/80s | 23 | 107 | | 1/100s | 24 | 108 | | 1/120s | 25 | 109 | | 1/160s | 26 | 110 | | 1/200s | 27 | 111 | | 1/240s | 28 | 112 | | 1/320s | 29 | 113 | | 1/400s | 30 | 114 | | 1/500s | 31 | 115 | | 1/640s | 32 | 116 | | 1/800s | 33 | 117 | | 1/1000s | 34 | 118 | | 1/1250s | 35 | 119 | | 1/1600s | 36 | 120 | | 1/2000s | 37 | 121 | | 1/2500s | 38 | 122 | | 1/3200s | 39 | 123 | | 1/4000s | 40 | 124 | | 1/5000s | 41 | 125 | | 1/6400s | 42 | 126 | | 1/8000s | 43 | 127 | 128 | - `brightness`, -255~255, default 0. 129 | - `contrast` , 0~255, default 64. 130 | - `saturation`, 0~255, default 64. 131 | - `hue`, -15~15 132 | - `sharpness`,0~6,default 3. 133 | - `ev_bias`, -255~255, default 0. 134 | 135 | -------------------------------------------------------------------------------- /capabilities.md: -------------------------------------------------------------------------------- 1 | ## Resolutions 2 | 3 | Here are some common capabilities of Insta360 Pro, Insta360 Pro2, Insta360 Titan 4 | 5 | - The max resolution for on-board stitching is 4K (3840x1920 for pano, 3840x3840 for 3D) 6 | - The max resolution for on-board live is 4K (3840x1920 for pano, 3840x3840 for 3D) 7 | - Single lens resolution with aspect ratial 4:3 support 3D output, while 16:9 does not. 8 | 9 | 10 | 11 | #### Resolution Table 12 | 13 | - Insta360 Pro 14 | 15 | | Single Lens Resolution | Max Output Resolution | Support Real-time Stitching | Support 3D Output | Single Lens Bitrate | 16 | | ---------------------- | ---------------------------- | :-------------------------: | :---------------: | ------------------- | 17 | | 4000x3000 (Photo Only) | 8000x4000
8000x8000(3D) | ✓ | ✓ | - | 18 | | 3840x2160@30fps | 7680x3840 | ✗ | ✗ | 1~40Mbps | 19 | | 3200x2400@30fps | 6400x3200
6400x6400(3D) | ✗ | ✓ | 1~40Mbps | 20 | | 2560x1440@30fps | 5280x2560 | ✓ | ✗ | 1~40Mbps | 21 | | 1920x1440@30fps | 3840x1920
3840x3840(3D) | ✓ | ✓ | 1~40Mbps | 22 | | 1920x1440@60fps | 3840x1920
3840x3840(3D) | ✗ | ✓ | 1~40Mbps | 23 | | 1920x1080@120fps | 3840x1920 | ✗ | ✗ | 1~40Mbps | 24 | 25 | 26 | 27 | - Insta360 Pro2 28 | 29 | | Single Lens Resolution | Max Output Resolution | Support Real-time Stitching | Support 3D Output | Support HDR | Single Lens Bitrate | 30 | | ---------------------- | ------------------------------- | :---------------------: | :---------------: | :---------: | --------- | 31 | | 4000x3000 (Photo Only) | 8000x4000
8000x8000(3D) | ✓ | ✓ | ✗ | - | 32 | | 3840x2880@30fps | 7680x3840
7680x7680(3D) | ✗ | ✓ | ✓ | 1~120Mbps | 33 | | 3840x2160@30fps | 7680x3840 | ✓ | ✗ | ✗ | 1~120Mbps | 34 | | 3840x2160@60fps | 7680x3840 | ✗ | ✗ | ✗ | 1~120Mbps | 35 | | 3840x1920@60fps | 7680x3840 | ✗ | ✗ | ✗ | 1~120Mbps | 36 | | 3200x2400@30fps | 6400x3200
6400x6400(3D) | ✓ | ✓ | ✗ | 1~120Mbps | 37 | | 1920x1440@30fps | 3840x1920
3840x3840(3D) | ✓ | ✓ | ✗ | 1~120Mbps | 38 | | 1920x1440@120fps | 3840x1920
3840x3840(3D) | ✗ | ✓ | ✗ | 1~120Mbps | 39 | 40 | 41 | 42 | - Insta360 Titan 43 | 44 | | Single Lens Resolution | Max Output Resolution | Support Real-time Stitching | Support 3D Output | Single Lens Bitrate | 45 | | ---------------------- | ------------------------------- | :-------------------------: | :---------------: | ------------------- | 46 | | 5280x3956 (Photo Only) | 10560x5280
10560x10560(3D) | ✓ | ✓ | - | 47 | | 5280x2972@30fps | 10560x5280 | ✗ | ✗ | 1~180Mbps | 48 | | 4800x3072@30fps | 9600x4800
9600x9600(3D) | ✗ | ✓ | 1~180Mbps | 49 | | 3840x2880@30fps | 7680x3840
7680x7680(3D) | ✓ | ✓ | 1~180Mbps | 50 | | 3840x2160@60fps | 7680x3840 | ✗ | ✗ | 1~180Mbps | 51 | | 2624x1486@120fps | 5248x2624
5248x5248(3D) | ✗ | ✓ | 1~180Mbps | 52 | | 1920x1080@240fps | 3840x1920 | ✗ | ✗ | 1~180Mbps | --------------------------------------------------------------------------------