您可通过服务端 SDK 来使用视联网 OpenAPI,实现快速开发。我们提供了多语言的服务端 SDK,功能包括:
SDK 封装了签名,避免过于繁琐的自行计算。
SDK 封装了常用的 OpenAPI 调用,包含请求和响应,并提供了对应的示例,例如空间管理、设备管理、视频流管理等。
SDK 封装了常用的操作流程,比如服务端生成临时安全凭证。
Java SDK项目地址
Java SDK发布地址
Java SDK示例地址
<dependency> <groupId>com.volcengine</groupId> <artifactId>volc-sdk-java</artifactId> <version>LATEST</version><!--1.0.66+--> </dependency>
初始化 SDK 前,您需要先配置长期访问凭证。本章节介绍不同操作系统下配置长期访问凭证的操作步骤。
nano ~/.bash_profile
export ACCESS_KEY=AKTPYmI1Z**** export SECRET_KEY=T1dJM01UU****
保存文件并退出。
执行以下命令生效配置信息。
source ~/.bash_profile
echo $ACCESS_KEY echo $SECRET_KEY
如果配置成功,则返回如下示例:
AKTPYmI1Z**** T1dJM01UU****
sudo vim /etc/profile
export ACCESS_KEY=AKTPYmI1Z**** export SECRET_KEY=T1dJM01UU****
保存文件并退出。
执行以下命令生效配置信息。
source ~/.bash_profile
echo $ACCESS_KEY echo $SECRET_KEY
如果配置成功,则返回如下示例:
AKTPYmI1Z**** T1dJM01UU****
set ACCESS_KEY=AKTPYmI1Z**** set SECRET_KEY=T1dJM01UU****
setx ACCESS_KEY "%ACCESS_KEY%" setx SECRET_KEY "%SECRET_KEY%"
echo $ACCESS_KEY echo $SECRET_KEY
AKTPYmI1Z**** T1dJM01UU****
import com.volcengine.model.video_aiot.request.*; import com.volcengine.model.video_aiot.response.*; import com.volcengine.service.videoaiot.VideoAIoTService; private VideoAIoTService videoAIoTService = VideoAIoTServiceImpl.getInstance(); { videoAIoTService.setAccessKey(System.getenv("ACCESS_KEY")); videoAIoTService.setSecretKey(System.getenv("SECRET_KEY")); }
说明:
方法名 | 是否必须 | 说明 |
---|---|---|
setSpaceName | 是 | 1~100位,可包含大写字母、小写字母、数字、中划线 |
setRegion | 是 | 服务地区,可选: |
setCallback | 否 | 消息回调地址,回调消息可参考:事件回调接口说明 视联网-火山引擎 |
setDescription | 否 | 空间描述 |
setAccessType | 是 | 空间类型,可选: |
setGbOptions | 否 | 设置gb选项,具体可参考openapi说明 |
示例:
public void testCreateSpace() { CreateSpaceRequest createSpaceRequest = new CreateSpaceRequest(); createSpaceRequest.setSpaceName("java-space"); createSpaceRequest.setRegion("cn-beijing-a"); createSpaceRequest.setCallback(""); createSpaceRequest.setDescription("java-sdk-create"); createSpaceRequest.setAccessType("gb28181"); createSpaceRequest.setHLSLowLatency(false); CreateSpaceRequest.GBOptions gbOptions = new CreateSpaceRequest.GBOptions(); gbOptions.setPullOnDemand(true); createSpaceRequest.setGbOptions(gbOptions); try { IDResponse space = videoAIoTService.createSpace(createSpaceRequest); System.out.printf(JSON.toJSONString(space)); } catch (Exception e) { throw new RuntimeException(e); } }
说明:
方法名 | 是否必须 | 说明 |
---|---|---|
setSpaceID | 是 | 更新的空间ID |
setSpaceName | 是 | 1~100位,可包含大写字母、小写字母、数字、中划线 |
setCallback | 否 | 消息回调地址,回调消息可参考:事件回调接口说明 视联网-火山引擎 |
setDescription | 否 | 空间描述 |
setGbOptions | 否 | 设置gb选项,具体可参考openapi说明 |
示例:
public void testUpdateSpace() { UpdateSpaceRequest updateSpaceRequest = new UpdateSpaceRequest(); updateSpaceRequest.setSpaceID(rtmpSpaceID); updateSpaceRequest.setSpaceName("java-sdk-update"); updateSpaceRequest.setCallback("test-callback"); updateSpaceRequest.setDescription("java-sdk-create"); try { IDResponse idResponse = videoAIoTService.updateSpace(updateSpaceRequest); System.out.printf(JSON.toJSONString(idResponse)); } catch (Exception e) { throw new RuntimeException(e); } }
示例:
public void testStartSpace() { try { IDResponse rawResponse = videoAIoTService.startSpace(rtmpSpaceID); System.out.printf(JSON.toJSONString(rawResponse)); } catch (Exception e) { throw new RuntimeException(e); } try { IDResponse rawResponse = videoAIoTService.stopSpace(rtmpSpaceID); System.out.printf(JSON.toJSONString(rawResponse)); } catch (Exception e) { throw new RuntimeException(e); } }
只允许删除禁用的空间
示例:
public void testDelSpace() { try { IDResponse rawResp = videoAIoTService.deleteSpace(rtmpSpaceID); System.out.printf(JSON.toJSONString(rawResp)); } catch (Exception e) { throw new RuntimeException(e); } }
示例:
public void testGetSpace() { try { SpaceResponse space = videoAIoTService.getSpace(gbSpaceID); System.out.println(JSON.toJSONString(space)); } catch (Exception e) { throw new RuntimeException(e); } }
示例:
public void testListSpace() { ListSpaceRequest listSpaceRequest = new ListSpaceRequest(); listSpaceRequest.setPageSize(10); listSpaceRequest.setPageNumber(1); try { ListSpaceResponse listSpaceResponse = videoAIoTService.listSpace(listSpaceRequest); ListSpaceResponse.ListSpace spaces = listSpaceResponse.getSpaces(); System.out.printf(JSON.toJSONString(spaces)); } catch (Exception e) { throw new RuntimeException(e); } }
说明:
方法名 | 是否必须 | 说明 |
---|---|---|
setSpaceID | 是 | 设置的空间模板ID |
setTemplateID | 是 | 设置的模板ID |
setTemplateType | 是 | 设置的模板类型,可选:screenshot、record、ai |
示例:
public void testSetSpaceTemplate() { SetSpaceTemplateRequest setSpaceTemplateRequest = new SetSpaceTemplateRequest(); setSpaceTemplateRequest.setSpaceID(""); setSpaceTemplateRequest.setTemplateID(""); setSpaceTemplateRequest.setTemplateType("screenshot"); try { videoAIoTService.setSpaceTemplate(setSpaceTemplateRequest); } catch (Exception e) { e.printStackTrace(); } }
示例:
public void testunSetSpaceTemplate() { try { videoAIoTService.unsetSpaceTemplate("spaceid", "template_type"); } catch (Exception e) { e.printStackTrace(); } }
说明:
方法名 | 是否必须 | 说明 |
---|---|---|
setSpaceID | 是 | 设备所属空间 |
setDeviceName | 是 | 4~40位,可包含大写字母、小写字母、数字、中划线 |
setDeviceNSID | 是 | 国标ID,可通过genSipID生成国标ID |
setDescription | 否 | 消息回调地址,回调消息可参考:事件回调接口说明 视联网-火山引擎 |
setPassword | 是 | 空间类型,可选: |
setType | 是 | 设备类型,可选: |
setUserName | 是 | 国标ID,同setDeviceNSID |
示例:
public void testCreateDevice() { String deviceNSID = ""; try { IDResponse ipc = videoAIoTService.genSipID("34020000002000000003", "IPC"); deviceNSID = ipc.getId().getId(); } catch (Exception e) { throw new RuntimeException(e); } if ("".equalsIgnoreCase(deviceNSID)) { throw new RuntimeException("deviceNSID is empty"); } CreateDeviceRequest createDeviceRequest = new CreateDeviceRequest(); createDeviceRequest.setDeviceName("java-sdk-create0"); createDeviceRequest.setDeviceNSID(deviceNSID); createDeviceRequest.setSpaceID(gbSpaceID); createDeviceRequest.setDescription("java-sdk-create"); createDeviceRequest.setPassword("0p@la123T10psa+="); createDeviceRequest.setType("IPC"); createDeviceRequest.setUserName(deviceNSID); try { CreateDeviceResponse device = videoAIoTService.createDevice(createDeviceRequest); System.out.printf(JSON.toJSONString(device)); } catch (Exception e) { throw new RuntimeException(e); } }
说明:
方法名 | 是否必须 | 说明 |
---|---|---|
setDeviceID | 是 | 设备唯一ID |
setSipServerID | 否 | 设备所属空间分配的SIP ID |
setSpaceID | 否 | 设备所属空间ID |
示例:
public void testGetDevice() { do_TestGetDevice("34020000002000000003", "23b54cf3-077d-450c-ad02-1aadbc15b910", "3c207531-6c25-43bf-a192-0011e742e4e1"); } public void do_TestGetDevice(String sipServerID, String deviceID, String gbSpaceID) { GetDeviceRequest getDeviceRequest = new GetDeviceRequest(); getDeviceRequest.setDeviceID(deviceID); getDeviceRequest.setSipServerID(sipServerID); getDeviceRequest.setSpaceID(gbSpaceID); try { GetDeviceResponse device = videoAIoTService.getDevice(getDeviceRequest); System.out.printf(JSON.toJSONString(device)); } catch (Exception e) { throw new RuntimeException(e); } }
示例:
public void testListDevice() { ListDeviceRequest listDeviceRequest = new ListDeviceRequest(); listDeviceRequest.setPageSize(10); listDeviceRequest.setPageNumber(1); listDeviceRequest.setSpaceID(gbSpaceID); try { ListDeviceResponse listDeviceResponse = videoAIoTService.listDevice(listDeviceRequest); System.out.println(JSON.toJSONString(listDeviceResponse)); } catch (Exception e) { throw new RuntimeException(e); } }
说明:
方法名 | 是否必须 | 说明 |
---|---|---|
setDeviceID | 是 | 设备唯一ID |
示例:
public void testGetDeviceChannels() { GetDeviceChannelRequest request = new GetDeviceChannelRequest(); request.setDeviceID(deviceID); try { GetDeviceChannelResponse resp = videoAIoTService.getDeviceChannels(request); System.out.println(JSON.toJSONString(resp)); } catch (Exception e) { throw new RuntimeException(e); } }
说明:
方法名 | 是否必须 | 说明 |
---|---|---|
setSpaceID | 是 | 设备所属空间ID |
setDeviceID | 是 | 设备唯一ID |
setDeviceName | 否 | 设备名称 |
setDescription | 否 | 设备描述 |
setAutoPullAfterRegister | 否 | 是否按需拉流 |
setCoordinates | 否 | 设备经纬度 |
setAlertNotification | 否 | 设备告警 |
示例:
public void testUpdateDevice() { do_testUpdateDevice("3c207531-6c25-43bf-a192-0011e742e4e1", "43932980-f513-4aae-bc4c-c14eaec040b5"); } public void do_testUpdateDevice(String spaceID, String deviceID) { UpdateDeviceRequest updateDeviceRequest = new UpdateDeviceRequest(); updateDeviceRequest.setDeviceID(deviceID); updateDeviceRequest.setDeviceName("java-sdk-update" + System.currentTimeMillis()); updateDeviceRequest.setDescription("desc" + System.currentTimeMillis()); updateDeviceRequest.setSpaceID(spaceID); updateDeviceRequest.setAutoPullAfterRegister(false); Device.Coordinates co = new Device.Coordinates(); co.setLatitude(10.1); co.setLongitude(10.2); updateDeviceRequest.setLocation("test-location"); updateDeviceRequest.setCoordinates(co); try { IDResponse idResponse = videoAIoTService.updateDevice(updateDeviceRequest); System.out.printf(JSON.toJSONString(idResponse)); } catch (Exception e) { throw new RuntimeException(e); } }
示例:
public void testStartDevice() { do_TestStartDevice("a0c97103-f019-42b4-b60a-f0976744d546", "925ca8e1-11cc-4473-aace-d9d91301b002"); } public void do_TestStartDevice(String spaceID, String deviceID) { DeviceRequest deviceRequest = new DeviceRequest(); deviceRequest.setSpaceID(spaceID); deviceRequest.setDeviceID(deviceID); try { IDResponse idResponse = videoAIoTService.startDevice(deviceRequest); System.out.println(JSON.toJSONString(idResponse)); } catch (Exception e) { throw new RuntimeException(e); } }
说明:
方法名 | 是否必须 | 说明 |
---|---|---|
setSpaceID | 是 | 设备所属空间ID |
setDeviceID | 是 | 设备唯一ID |
示例:
public void testFreshDevice() { do_TestFreshDevice("925ca8e1-11cc-4473-aace-d9d91301b002", "a0c97103-f019-42b4-b60a-f0976744d546"); } public void do_TestFreshDevice(String deviceID, String spaceID) { DeviceRequest deviceRequest = new DeviceRequest(); deviceRequest.setDeviceID(deviceID); deviceRequest.setSpaceID(spaceID); try { IDResponse rawResponse = videoAIoTService.freshDevice(deviceRequest); System.out.println(JSON.toJSONString(rawResponse)); } catch (Exception e) { throw new RuntimeException(e); } }
只允许删除离线的设备
说明:
方法名 | 是否必须 | 说明 |
---|---|---|
setSpaceID | 是 | 设备所属空间ID |
setDeviceID | 是 | 设备唯一ID |
示例:
public void testDelDevice() { do_TestDeleteDevice("2db38a3a-2a9d-4bf7-afd9-7cdc1347e9ad", "fb58fc32-1dd7-4ed4-a26c-1b6f5112fb11"); } public void do_TestDeleteDevice(String spaceID, String deviceID) { DeviceRequest request = new DeviceRequest(); request.setSpaceID(spaceID); request.setDeviceID(deviceID); try { IDResponse resp = videoAIoTService.deleteDevice(request); System.out.println(JSON.toJSONString(resp)); } catch (Exception e) { throw new RuntimeException(e); } }
说明:
方法名 | 是否必须 | 说明 |
---|---|---|
setSpaceID | 是 | 设备所属空间ID |
setStreamName | 是 | 视频流名称,包含字母、数字、中划线;1 ~ 100 个字符长 |
setDescription | 否 | 流描述 |
setPullSource | 否 | 拉流地址 |
setDestination | 否 | 转推地址 |
示例:
public void testCreateStream() { CreateStreamRequest streamRequest = new CreateStreamRequest(); streamRequest.setSpaceID(rtmpSpaceID); streamRequest.setStreamName("just-do-it11"); try { IDResponse idResponse = videoAIoTService.createStream(streamRequest); System.out.println(JSON.toJSONString(idResponse)); } catch (Exception e) { throw new RuntimeException(e); } }
示例:
public void testForbidStream() { String streamID = "c518f8f3-84ed-4515-8be4-8a2351ed2a76"; try { IDResponse idResponse = videoAIoTService.forbidStream(streamID); System.out.println(JSON.toJSONString(idResponse)); } catch (Exception e) { throw new RuntimeException(e); } }
示例:
public void testAllowStream() { String streamID = "c518f8f3-84ed-4515-8be4-8a2351ed2a76"; try { IDResponse idResponse = videoAIoTService.allowStream(streamID); System.out.println(JSON.toJSONString(idResponse)); } catch (Exception e) { throw new RuntimeException(e); } }
说明:
方法名 | 是否必须 | 说明 |
---|---|---|
setStreamID | 是 | 删除视频流 |
示例:
public void testDeleteStream() { StreamRequest streamRequest = new StreamRequest(); streamRequest.setStreamID("d4e6611c-ed2b-492a-b86b-5a19f6e23554"); try { IDResponse idResponse = videoAIoTService.deleteStream(streamRequest); System.out.println(JSON.toJSONString(idResponse)); } catch (Exception e) { throw new RuntimeException(e); } }
示例:
public void testGetStream() { GetStreamRequest getStreamRequest = new GetStreamRequest(); getStreamRequest.setStreamID("3d87ab7c-88b5-4e5c-9aa0-7af5d7e347e3"); try { GetStreamResponse stream = videoAIoTService.getStream(getStreamRequest); System.out.printf(JSON.toJSONString(stream)); } catch (Exception e) { throw new RuntimeException(e); } }
说明:
方法名 | 是否必须 | 说明 |
---|---|---|
setSpaceID | 是 | 查询视频流空间 |
setPageSize | 否 | 分页大小 |
setPageNumber | 否 | 分页 |
示例:
public void testListStream() { ListStreamsRequest listStreamsRequest = new ListStreamsRequest(); listStreamsRequest.setPageSize(10); listStreamsRequest.setPageNumber(1); listStreamsRequest.setSpaceID(rtmpSpaceID); try { ListStreamsResponse listStreamsResponse = videoAIoTService.listStreams(listStreamsRequest); System.out.println(JSON.toJSONString(listStreamsResponse)); } catch (Exception e) { throw new RuntimeException(e); } }
说明:
方法名 | 是否必须 | 说明 |
---|---|---|
setStreamID | 是 | 启动的视频流ID |
示例:
public void testStartStream() { setTest(); StreamRequest streamRequest = new StreamRequest(); streamRequest.setStreamID("15795af1-86fb-434f-af1a-3f604fec1df7"); streamRequest.setIgnoreAudio(true); streamRequest.setEnableAudioTranscode(false); streamRequest.setStreamingIndex(0); streamRequest.setResolution(""); try { StartStreamResponse startStreamResponse = videoAIoTService.startStream(streamRequest); System.out.println(JSON.toJSONString(startStreamResponse)); } catch (Exception e) { throw new RuntimeException(e); } }
说明:
方法名 | 是否必须 | 说明 |
---|---|---|
setStreamID | 是 | 停止的视频流ID |
示例:
public void testDeleteStream() { StreamRequest streamRequest = new StreamRequest(); streamRequest.setStreamID("d4e6611c-ed2b-492a-b86b-5a19f6e23554"); streamRequest.setIsSmart("1"); try { IDResponse idResponse = videoAIoTService.stopStream(streamRequest); System.out.println(JSON.toJSONString(idResponse)); } catch (Exception e) { throw new RuntimeException(e); } }
说明:
方法名 | 是否必须 | 说明 |
---|---|---|
setStreamID | 是 | 编辑的视频流ID |
setStreamName | 否 | 视频流名称 |
setDescription | 否 | 视频流描述 |
示例:
public void testUpdateStream() { UpdateStreamRequest updateStreamRequest = new UpdateStreamRequest(); updateStreamRequest.setStreamID(streamID); updateStreamRequest.setStreamName("java-sdk-update11111"); updateStreamRequest.setDescription("123123123"); updateStreamRequest.setSpaceID(rtmpSpaceID); try { IDResponse idResponse = videoAIoTService.updateStream(updateStreamRequest); System.out.printf(JSON.toJSONString(idResponse)); } catch (Exception e) { throw new RuntimeException(e); } }
说明:
方法名 | 是否必须 | 说明 |
---|---|---|
setStreamID | 是 | 查询的流ID |
setStartTime | 是 | 查询开始时间UTC Seconds String |
setEndTime | 是 | 查询结束时间UTC Seconds String |
示例:
public void testGetStreamData() { // 流维度的数据查询 GetStreamDataRequest streamRequest = new GetStreamDataRequest(); streamRequest.setStreamID("dbc2000c-56e0-4ccc-ba9e-df43f8199073"); streamRequest.setStartTime("1662555386"); streamRequest.setEndTime("1662641786"); try { GetStreamDataResponse dataResponse = videoAIoTService.getStreamData(streamRequest); System.out.println(JSON.toJSONString(dataResponse)); } catch (Exception e) { throw new RuntimeException(e); } }
说明:
方法名 | 是否必须 | 说明 |
---|---|---|
setSpaceID | 是 | 查询的空间ID |
setStreamID | 是 | 查询的流ID |
setStartTs | 是 | "2022-08-25T16:22:17+08:00" |
setEndTs | 是 | "2022-08-25T16:22:17+08:00" |
setPageSize | 否 | 单次最大返回500,默认20 |
setPageNumber | 否 | 默认1 |
示例:
public void testListDeviceScreenshot() { ListDeviceRecordsRequest listDeviceRecords = new ListDeviceRecordsRequest(); listDeviceRecords.setSpaceID("517ff7ec-7700-4862-b1e7-7967a492df79"); listDeviceRecords.setStreamID("2a772f0b-753c-4496-b535-a8df0f896dc9"); listDeviceRecords.setStartTs("2022-08-25T16:22:17+08:00"); listDeviceRecords.setEndTs("2022-08-26T16:22:17+08:00"); listDeviceRecords.setPageSize(2); listDeviceRecords.setPageNumber(100); try { ListDeviceRecordsResponse resp = videoAIoTService.listDeviceScreenshots(listDeviceRecords); System.out.println(JSON.toJSONString(resp)); } catch (Exception e) { throw new RuntimeException(e); } }
说明:
方法名 | 是否必须 | 说明 |
---|---|---|
setDeviceNSID | 是 | 设备国标ID(对应API里面的DeviceID) |
setChannelID | 是 | 设备通道ID |
setStartTime | 是 | 查询录像开始时间,unix sec |
setEndTime | 是 | 查询录像结束时间,unix sec |
setTimeoutSec | 是 | 查询的超时时间,单位秒 |
setRecordType | 是 | 查询的录像类型,all/alarm/time/manual |
setOrder | 否 | 返回的录像是否排序,默认false |
示例:
public void testGetDeviceRecordListV2() { setTest(); try { GetRecordListV2Request request = new GetRecordListV2Request(); request.setRecordType("all"); request.setDeviceNSID("34020027991180820747"); request.setStartTime(1688572800); request.setEndTime(1688659199); request.setOrder(true); request.setTimeoutInSec(20); request.setChannelID("98880000001320000000"); GetRecordV2Response resp = videoAIoTService.getRecordListV2(request); System.out.println(JSON.toJSONString(resp)); } catch (Exception e) { e.printStackTrace(); } }
说明:
方法名 | 是否必须 | 说明 |
---|---|---|
setDeviceNSID | 是 | 设备国标ID |
setChannelID | 是 | 设备通道ID |
setStartTime | 是 | 录像开始时间,unix sec |
setEndTime | 是 | 录像结束时间,unix sec |
setStreamID | 否 | 流ID |
示例:
try { PlaybackStartRequestV2 request = new PlaybackStartRequestV2(); request.setStartTime(1680451200); request.setEndTime(1680537599); request.setChannelID("98880000001320000000"); request.setDeviceNSID("34020081991180247837"); PlaybackStartResponse resp = videoAIoTService.playbackStartV2(request); System.out.println(JSON.toJSONString(resp)); } catch (Exception e) { e.printStackTrace(); }
示例:
try { String id = "ae395018-9d80-4a8f-9805-1a686056ba77" ; IDResponse resp = videoAIoTService.playbackStop(id);//id表示PlaybackStart返回的streamID System.out.println(JSON.toJSONString(resp)); } catch (Exception e) { e.printStackTrace(); }
说明:
方法名 | 是否必须 | 说明 |
---|---|---|
setStreamID | 是 | PlaybackStart返回的ID |
setCmd | 是 | 操作类型:
|
setNtp | 否 | 指定起始播放时间,单位为:秒(如果当前片段长度为5分钟,指定60秒即从片段的第1分钟开始播放) |
setScale | 否 | 倍速,可选项(需要按设备或网络支持的条件进行设置):
|
try { PlaybackControlRequest request = new PlaybackControlRequest(); request.setStreamID("5d844cb5-10e2-4113-b642-fea8597fb6c9"); request.setCmd(0); request.setNtp(String.valueOf(1));// request.setScale(1); IDResponse resp = videoAIoTService.playbackControl(request); System.out.println(JSON.toJSONString(resp)); } catch (Exception e) { e.printStackTrace(); }
说明:
方法名 | 是否必须 | 说明 |
---|---|---|
setStreamID | 是 | PlaybackStart返回的ID |
public void testPlaybackStat() throws Exception { setTest(); String sid = "3ad6c029-5153-40ca-904f-7810641d7b0f"; for (int i = 0; ; i++) { PlaybackStatResponse playbackStatResponse = videoAIoTService.playbackStat(sid); System.out.println(JSON.toJSONString(playbackStatResponse)); if (playbackStatResponse.getResult().getStatus().equals("deleted")) { break; } Thread.sleep(1000); } }
说明:
方法名 | 是否必须 | 说明 |
---|---|---|
setSpaceID | 是 | 查询的空间ID |
setStreamID | 是 | 查询的流ID |
setStartTs | 是 | "2022-08-25T16:22:17+08:00" |
setEndTs | 是 | "2022-08-25T16:22:17+08:00" |
setPageSize | 否 | 单次最大返回500,默认20 |
setPageNumber | 否 | 默认1 |
示例:
public void testListDeviceRecords() { ListDeviceRecordsRequest listDeviceRecords = new ListDeviceRecordsRequest(); listDeviceRecords.setSpaceID("1d02923f-d5ce-40f2-ac90-fea4a55e04f5"); listDeviceRecords.setStreamID("fcc2adaf-93b8-44e1-800a-6fa4c485b492"); listDeviceRecords.setStartTs("2022-08-25T16:29:39+08:00"); listDeviceRecords.setEndTs("2022-08-26T16:29:39+08:00"); listDeviceRecords.setPageSize(2); listDeviceRecords.setPageNumber(1); try { ListDeviceRecordsResponse resp = videoAIoTService.listDeviceRecords(listDeviceRecords); System.out.println(JSON.toJSONString(resp)); } catch (Exception e) { throw new RuntimeException(e); } }
说明:
方法名 | 是否必须 | 说明 |
---|---|---|
setStreamID | 是 | 查询的流ID |
setStartTime | 是 | UTC timestamp |
setEndTime | 是 | UTC timestamp |
setPageSize | 否 | 单次最大返回500,默认20 |
setPageNumber | 否 | 默认1 |
setReqType | 否 | 查询类型 |
setResolution | 否 | 分辨率 |
setStreamingIndex | 否 | 子码流 |
示例:
public void testListStreamRecords() { setTest(); long startTime = System.currentTimeMillis(); ListStreamRecordsRequestV3 listStreamRecordsRequestV3 = new ListStreamRecordsRequestV3(); listStreamRecordsRequestV3.setStreamID("2df95fef-65b1-4569-8866-7fdfcfe2190b"); listStreamRecordsRequestV3.setStreamingIndex(0); listStreamRecordsRequestV3.setStartTime(System.currentTimeMillis() / 1000 - 3600); listStreamRecordsRequestV3.setEndTime(System.currentTimeMillis() / 1000); listStreamRecordsRequestV3.setPageSize(100); listStreamRecordsRequestV3.setPageNumber(1); listStreamRecordsRequestV3.setReqType(""); try { ListStreamRecordsResponseV3 resp = videoAIoTService.listStreamRecords(listStreamRecordsRequestV3); System.out.println(JSON.toJSONString(resp)); System.out.println(resp.getDeviceRecords().size()); } catch (Exception e) { throw new RuntimeException(e); } System.out.println("COST:" + (System.currentTimeMillis() - startTime)); }
说明:
方法名 | 是否必须 | 说明 |
---|---|---|
setStreamID | 是 | 查询的流ID |
setStartTs | 是 | UTC Seconds |
setEndTs | 是 | UTC Seconds |
setTokenValid | 否 | 返回的url token过期时间,单位秒 |
示例:
public void testCloudRecordPlay() { CloudRecordPlayRequest cloudRecordPlayRequest = new CloudRecordPlayRequest(); cloudRecordPlayRequest.setStreamID("4dba59d1-87f8-47f0-805a-c39a1bf451a4"); cloudRecordPlayRequest.setStartTs(1663916290); cloudRecordPlayRequest.setEndTs(1663916410); cloudRecordPlayRequest.setTokenValid(3600); try { CloudPlayResponse resp = videoAIoTService.cloudRecordPlay(cloudRecordPlayRequest); System.out.println(JSON.toJSONString(resp)); } catch (Exception e) { throw new RuntimeException(e); } }
说明:
方法名 | 是否必须 | 说明 |
---|---|---|
setStreamID | 是 | 查询的流ID |
setStartTime | 是 | UTC Seconds |
setEndTime | 是 | UTC Seconds |
setTokenValid | 否 | 返回的url token过期时间,单位秒 |
setWithSub | 否 | 是否合并子码流的视频文件 |
setResolution | 否 | 视频流分辨率 |
setStreamingIndex | 否 | 子码流 |
示例:
public void testPlayCloudRecords() throws Exception { setTest(); PlayCloudRecordRequest cloudRecordPlayRequest = new PlayCloudRecordRequest(); cloudRecordPlayRequest.setStreamID("75d9d794-82c9-4d29-8700-2bd448552e73"); cloudRecordPlayRequest.setResolution(""); cloudRecordPlayRequest.setStartTime(1718870400); cloudRecordPlayRequest.setEndTime(1718874060); cloudRecordPlayRequest.setTokenValid(86400); cloudRecordPlayRequest.setWithSub(false); PlayCloudResponse playCloudResponse = videoAIoTService.playCloudRecord(cloudRecordPlayRequest); System.out.println(JSON.toJSONString(playCloudResponse)); }
说明:
方法名 | 是否必须 | 说明 |
---|---|---|
setSpaceID | 是 | 设备所属空间ID |
setDeviceID | 是 | 设备国标ID |
setChannelID | 是 | 设备通道ID |
setStartTime | 是 | 录像开始时间 |
setEndTime | 是 | 录像结束时间 |
setVersion | 是 | 版本号,设置为2 |
setMps | 是 | 设置后处理样式
|
示例:
public void testLocalMediaDownload() { LocalMediaDownloadRequest localMediaDownloadRequest = new LocalMediaDownloadRequest(); localMediaDownloadRequest.setSpaceID("7c09b921-a07c-4fd2-b59f-e0fce9a072a0\n"); localMediaDownloadRequest.setChannelID("34020035991320467670"); localMediaDownloadRequest.setDeviceID("34020095991320293742"); localMediaDownloadRequest.setStartTime(1660719434); localMediaDownloadRequest.setEndTime(1660719534); localMediaDownloadRequest.setVersion("2"); LocalMediaDownloadRequest.Mps mps = new LocalMediaDownloadRequest.Mps(); LocalMediaDownloadRequest.M3U8Option m3u8 = new LocalMediaDownloadRequest.M3U8Option(); m3u8.setToMp4(true); //转换为MP4 mps.setM3U8Option(m3u8); /** 设置水印 */ LocalMediaDownloadRequest.Subtitle subt = new LocalMediaDownloadRequest.Subtitle(); subt.setSubtitleSrc(""); LocalMediaDownloadRequest.Font font = new LocalMediaDownloadRequest.Font(); font.setFontSize(2); font.setAlignment(""); font.setPrimaryColor(""); subt.setFont(font); LocalMediaDownloadRequest.SubtitleItem item = new LocalMediaDownloadRequest.SubtitleItem(); item.setContent("哈哈哈"); item.setEnd(9000); item.setStart(5000); LocalMediaDownloadRequest.SubtitleItem item1 = new LocalMediaDownloadRequest.SubtitleItem(); item.setContent("哈哈哈"); item.setEnd(9000); item.setStart(5000); List<LocalMediaDownloadRequest.SubtitleItem> list1 = new ArrayList<LocalMediaDownloadRequest.SubtitleItem>(); list1.add(item); subt.setSubtitleList(list1); mps.setSubtitle(subt); localMediaDownloadRequest.setMediaProcess(mps); try { LocalMediaDownloadResponse download = videoAIoTService.localMediaDownload(localMediaDownloadRequest); System.out.printf(JSON.toJSONString(download)); } catch (Exception e) { throw new RuntimeException(e); } }
示例:
public void testGetLocalDownload() { setTest(); try { GetLocalMediaDownloadResponse localDownload = videoAIoTService.getLocalDownload(""); System.out.println(JSON.toJSONString(localDownload)); } catch (Exception e) { throw new RuntimeException(e); } }
流录像不同于录制模板,更适合短时间录制,启停更方便
说明:
方法名 | 是否必须 | 说明 |
---|---|---|
setStreamID | 是 | 录制的流ID |
setAutoPull | 是 | 是否自动拉流录制,若false,需要先启动视频流【仅GB空间】拉起视频流后开始录制 |
setTimeout | 是 | 拉流超时时间,超出timeout时间后会停止本次录制任务,返回timeout错误 |
setRemux | 否 | 设置转封装,可选字段:mp4,转封装成功后可以在获取录像中查询到转封装结果 |
setRecordTime | 否 | 预估录制时间,超出该时间会自动停止录制任务,默认不生效,由停止录像/timeout来控制 |
setExpire | 否 | 录像过期时间,不填表示默认过期时间7天;-1表示永不过期 |
示例:
public void testStartStreamRecord() { StreamStartRecordRequest streamStartRecordRequest = new StreamStartRecordRequest(); streamStartRecordRequest.setStreamID("ee9a49ea-916c-4c2f-aced-333e409414df"); streamStartRecordRequest.setRecordTime(100); streamStartRecordRequest.setTimeout(10); streamStartRecordRequest.setExpire(0); streamStartRecordRequest.setAutoPull(true); try { IDResponse idResponse = videoAIoTService.streamStartRecord(streamStartRecordRequest); System.out.println(JSON.toJSONString(idResponse)); } catch (Exception e) { e.printStackTrace(); } }
返回的ID表示本次录像的唯一ID,凭此ID可以停止/查询/删除录像。
示例:
public void testStop() { try { RawResponse idResponse = videoAIoTService.streamStopRecord("record0x7df8ud0"); System.out.println(JSON.toJSONString(idResponse)); } catch (Exception e) { e.printStackTrace(); } }
示例:
public void testGet() { try { GetStreamRecordResponse idResponse = videoAIoTService.getStreamRecord("record0kvldcqr1"); System.out.println(JSON.toJSONString(idResponse)); } catch (Exception e) { e.printStackTrace(); } }
示例:
public void testDelete() { try { DeleteStreamRecordResponse idResponse = videoAIoTService.deleteStreamRecord("record0k7248vc4"); System.out.println(JSON.toJSONString(idResponse)); } catch (Exception e) { e.printStackTrace(); } }
说明:请求api:cloudControl
方法名 | 是否必须 | 说明 |
---|---|---|
setDeviceID | 是 | 设备国标ID |
setChannelID | 是 | 设备国标通道ID |
setAction | 是 | 控制操作 |
setCmd | 是 | 控制指令 |
setParam | 是 | 操作参数 |
setAction
可选action:
public static final String ACTION_PTZ = "PTZControl"; public static final String ACTION_FI = "FiControl"; public static final String ACTION_PRESET = "PresetControl";
setCmd
可选cmd:
//ptz public static final String PtzCmdStop = "stop"; public static final String PtzCmdRight = "right"; public static final String PtzCmdLeft = "left"; public static final String PtzCmdDown = "down"; public static final String PtzCmdUp = "up"; public static final String PtzCmdRightUp = "rightup"; public static final String PtzCmdRightDown = "rightdown"; public static final String PtzCmdLeftUp = "leftup"; public static final String PtzCmdLeftDown = "leftdown"; public static final String PtzCmdZoomIn = "zoomin"; public static final String PtzCmdZoomOut = "zoomout"; //fi public static final String FiCmdStop = "stop"; public static final String FiCmdFocusFar = "focusfar"; public static final String FiCmdFocusNear = "focusnear"; public static final String FiCmdIrisIn = "irisin"; public static final String FiCmdIrisOut = "irisout"; //preset public static final String PresetCmdSet = "set"; public static final String PresetCmdGoto = "goto"; public static final String PresetCmdRemove = "remove";
setParam
Param参数说明:
控制选项(action) | 参数意义 | 可选参数值 |
---|---|---|
PTZ | 对于PTZ 方向参数,如left、right、up等,表示转动速度 | [0, 255] |
对于PTZ zoom参数,表示放大缩小速度 | [0, 15] | |
FI | 焦距修改速度,值越大,焦距变化越快 | [0, 0xFF] |
Preset | 预置位ID,设置时需要确保该预置位ID没有被占用 | [0x01,0xFF] |
示例:
//ptz control public void testPTZ() throws InterruptedException { DeviceCloudControlRequest deviceCloudControlRequest = new DeviceCloudControlRequest(); deviceCloudControlRequest.setDeviceNSID("34020008991180978871"); deviceCloudControlRequest.setAction(DeviceCloudControlRequest.ACTION_PTZ); deviceCloudControlRequest.setChannelID("34020000001320000005"); deviceCloudControlRequest.setParam(51); deviceCloudControlRequest.setCmd(DeviceCloudControlRequest.PtzCmdUp); deviceCloudControlRequest.setSipID("34020000002000000001"); try { RawResponse rawResponse = videoAIoTService.cloudControl(deviceCloudControlRequest); System.out.println(JSON.toJSONString(rawResponse)); } catch (Exception e) { e.printStackTrace(); } Thread.sleep(2000); deviceCloudControlRequest = new DeviceCloudControlRequest(); deviceCloudControlRequest.setDeviceNSID("34020008991180978871"); deviceCloudControlRequest.setAction(DeviceCloudControlRequest.ACTION_PTZ); deviceCloudControlRequest.setChannelID("34020000001320000005"); deviceCloudControlRequest.setParam(51); deviceCloudControlRequest.setCmd(DeviceCloudControlRequest.PtzCmdStop); deviceCloudControlRequest.setSipID("34020000002000000001"); try { RawResponse rawResponse = videoAIoTService.cloudControl(deviceCloudControlRequest); System.out.println(JSON.toJSONString(rawResponse)); } catch (Exception e) { e.printStackTrace(); } } //fi control public void testFi() throws InterruptedException { DeviceCloudControlRequest deviceCloudControlRequest = new DeviceCloudControlRequest(); deviceCloudControlRequest.setDeviceNSID("34020008991180978871"); deviceCloudControlRequest.setAction(DeviceCloudControlRequest.ACTION_FI); deviceCloudControlRequest.setChannelID("34020000001320000005"); deviceCloudControlRequest.setParam(51); deviceCloudControlRequest.setCmd(DeviceCloudControlRequest.FiCmdFocusFar); deviceCloudControlRequest.setSipID("34020000002000000001"); try { videoAIoTService.cloudControl(deviceCloudControlRequest); } catch (Exception e) { e.printStackTrace(); } Thread.sleep(2000); deviceCloudControlRequest = new DeviceCloudControlRequest(); deviceCloudControlRequest.setDeviceNSID("34020008991180978871"); deviceCloudControlRequest.setAction(DeviceCloudControlRequest.ACTION_FI); deviceCloudControlRequest.setChannelID("34020000001320000005"); deviceCloudControlRequest.setParam(51); deviceCloudControlRequest.setCmd(DeviceCloudControlRequest.FiCmdStop); deviceCloudControlRequest.setSipID("34020000002000000001"); try { RawResponse rawResponse = videoAIoTService.cloudControl(deviceCloudControlRequest); System.out.println(JSON.toJSONString(rawResponse)); } catch (Exception e) { e.printStackTrace(); } } //preset control int presetID = 15; //添加预置位 public void testAddPreset() { DeviceCloudControlRequest deviceCloudControlRequest = new DeviceCloudControlRequest(); deviceCloudControlRequest.setCmd(DeviceCloudControlRequest.PresetCmdSet); deviceCloudControlRequest.setDeviceNSID("34020008991180978871"); deviceCloudControlRequest.setAction(DeviceCloudControlRequest.ACTION_PRESET); deviceCloudControlRequest.setChannelID("34020000001320000005"); deviceCloudControlRequest.setParam(presetID); deviceCloudControlRequest.setSipID("34020000002000000001"); try { videoAIoTService.cloudControl(deviceCloudControlRequest); } catch (Exception e) { e.printStackTrace(); } } //删除预置位 public void testRMPreset() { DeviceCloudControlRequest deviceCloudControlRequest = new DeviceCloudControlRequest(); deviceCloudControlRequest.setCmd(DeviceCloudControlRequest.PresetCmdRemove); deviceCloudControlRequest.setDeviceNSID("34020008991180978871"); deviceCloudControlRequest.setAction(DeviceCloudControlRequest.ACTION_PRESET); deviceCloudControlRequest.setChannelID("34020000001320000005"); deviceCloudControlRequest.setParam(presetID); deviceCloudControlRequest.setSipID("34020000002000000001"); try { videoAIoTService.cloudControl(deviceCloudControlRequest); } catch (Exception e) { e.printStackTrace(); } }
说明:请求api:queryPresetInfo
方法名 | 是否必须 | 说明 |
---|---|---|
setDeviceID | 是 | 设备国标ID |
setChannelID | 是 | 设备国标通道ID |
setTimeout | 否 | 请求超时时间,单位秒,默认5秒 |
示例:
public void testQueryPreset() { DeviceQueryPresetRequest request = new DeviceQueryPresetRequest(); request.setChannelID("34020000001320000005"); request.setSipID("34020000002000000001"); request.setTimeout(5); request.setDeviceID("34020008991180978871"); try { DeviceQueryPresetResponse deviceQueryPresetResponse = videoAIoTService.queryPresetInfo(request); System.out.println(JSON.toJSONString(deviceQueryPresetResponse)); } catch (Exception e) { e.printStackTrace(); } }
说明:请求api:cruiseControl
方法名 | 是否必须 | 说明 |
---|---|---|
setDeviceID | 是 | 设备国标ID |
setChannelID | 是 | 设备国标通道ID |
setGroupID | 是 | 增加巡航控制时设置的分组ID |
setPresetID | 是 | 设置的预置位ID |
setPara | 是 | 巡航控制相关参数,SetSpeed、Start、Stop等控制对应的参数 |
说明:
方法名 | 是否必须 | 说明 |
---|---|---|
setPlanName | 是 | 录像计划名称 |
setBindTemplate | 是 | 设置绑定模板 |
setBindStreams | 否 | 设置绑定的视频流ID |
setDescription | 否 | 设置描述 |
setStatus | 是 | 录像计划状态,enabled/disabled |
setBindChannel | 否 | 设置绑定的通道(和setBindStreams行为是一致的,二选一即可) |
示例:
public void testCreateRecordPlan() { setTest(); CreateRecordPlanRequest createRecordPlanRequest = new CreateRecordPlanRequest(); createRecordPlanRequest.setPlanName("test-plan"); createRecordPlanRequest.setBindTemplate("0609aef4-eb80-41c7-9858-48347d8d4904"); createRecordPlanRequest.setBindStreams(new ArrayList<String>() { { add("7f2f1b54-2714-4f66-ae78-cd477ab0b68b"); } }); createRecordPlanRequest.setDescription("javasdktest"); createRecordPlanRequest.setStatus("enabled"); try { IDResponse recordPlan = videoAIoTService.createRecordPlan(createRecordPlanRequest); System.out.println(recordPlan); } catch (Exception e) { throw new RuntimeException(e); } }
说明:
方法名 | 是否必须 | 说明 |
---|---|---|
setPlanID | 是 | 编辑的录像计划ID |
setPlanName | 否 | 录像计划名称 |
setBindTemplate | 否 | 设置绑定模板 |
setDelList | 否 | 设置删除视频流 |
setAddList | 否 | 设置新增视频流 |
setStatus | 否 | 录像计划状态,enabled/disabled |
示例:
public void testUpdateRecordPlan() { setTest(); UpdateRecordPlanRequest updateRecordPlanRequest = new UpdateRecordPlanRequest(); updateRecordPlanRequest.setPlanName("sdk-update"); updateRecordPlanRequest.setPlanID("2f11a13a-038f-445a-800e-03572ec542e3"); updateRecordPlanRequest.setBindTemplate("a87c5902-453a-4cb1-a4e2-87171b2c25bd"); updateRecordPlanRequest.setStatus("enabled"); UpdateRecordPlanRequest.ModifyList delList = new UpdateRecordPlanRequest.ModifyList(); delList.setStreams(new ArrayList<String>(){ {add("7f2f1b54-2714-4f66-ae78-cd477ab0b68b");} }); updateRecordPlanRequest.setDelList(delList); UpdateRecordPlanRequest.ModifyList addList = new UpdateRecordPlanRequest.ModifyList(); addList.setStreams(new ArrayList<String>(){ {add("3e088b33-4e28-4af3-a6f1-daff5a8a7bab");} }); updateRecordPlanRequest.setAddList(addList); try { IDResponse recordPlan = videoAIoTService.updateRecordPlan(updateRecordPlanRequest); System.out.println(JSON.toJSONString(recordPlan)); } catch (Exception e) { throw new RuntimeException(e); } }
示例:
public void testGetRecordPlan() { String planID = ""; try { RecordPlanResponse recordPlan = videoAIoTService.getRecordPlan(planID); System.out.println(JSON.toJSONString(recordPlan)); } catch (Exception e) { throw new RuntimeException(e); } }
示例:
public void testGetRecordPlan() { String planID = ""; try { IDResponse id = videoAIoTService.deleteRecordPlan(planID); System.out.println(JSON.toJSONString(id)); } catch (Exception e) { throw new RuntimeException(e); } }
说明:
方法名 | 是否必须 | 说明 |
---|---|---|
setFilterName | 否 | 模糊搜索录像计划名称 |
示例:
public void testListRecordPlan() { setTest(); ListRecordPlansRequest listRecordPlansRequest = new ListRecordPlansRequest(); listRecordPlansRequest.setFilterName("test"); try { ListRecordPlansResponse recordPlan = videoAIoTService.listRecordPlans(listRecordPlansRequest); System.out.println(JSON.toJSONString(recordPlan)); } catch (Exception e) { throw new RuntimeException(e); } }
示例:
public void testListRecordPlanChannel() { setTest(); String planID = "f4aaa8ec-cab4-4120-95cd-5be2cfb9bf1a"; try { ListRecordPlanChannelsResponse recordPlan = videoAIoTService.listRecordPlanChannels(planID); System.out.println(JSON.toJSONString(recordPlan)); } catch (Exception e) { throw new RuntimeException(e); } }
暂时无法在飞书文档外展示此内容