├── .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 |
--------------------------------------------------------------------------------