You need to enable JavaScript to run this app.
导航
服务端 SDK for Java 使用说明
最近更新时间:2024.08.06 17:24:47首次发布时间:2022.11.15 09:54:09
服务端SDK-Java

使用说明

您可通过服务端 SDK 来使用视联网 OpenAPI,实现快速开发。我们提供了多语言的服务端 SDK,功能包括:

  • SDK 封装了签名,避免过于繁琐的自行计算。

  • SDK 封装了常用的 OpenAPI 调用,包含请求和响应,并提供了对应的示例,例如空间管理、设备管理、视频流管理等。

  • SDK 封装了常用的操作流程,比如服务端生成临时安全凭证。



开源

Java SDK项目地址
Java SDK发布地址
Java SDK示例地址

安装

使用Maven安装

<dependency>
    <groupId>com.volcengine</groupId>
    <artifactId>volc-sdk-java</artifactId>
    <version>LATEST</version><!--1.0.66+-->
</dependency>

初始化客户端

配置长期访问凭证

初始化 SDK 前,您需要先配置长期访问凭证。本章节介绍不同操作系统下配置长期访问凭证的操作步骤。

macos

  1. 打开终端并执行以下命令打开文件。
nano ~/.bash_profile
  1. 在文件末尾添加 AKSK 信息。
export ACCESS_KEY=AKTPYmI1Z****
export SECRET_KEY=T1dJM01UU****
  1. 保存文件并退出。

  2. 执行以下命令生效配置信息。

source ~/.bash_profile
  1. 执行以下命令验证配置信息。
echo $ACCESS_KEY
echo $SECRET_KEY

如果配置成功,则返回如下示例:

AKTPYmI1Z****
T1dJM01UU****

linux

  1. 打开终端并执行以下命令打开文件。
sudo vim /etc/profile
  1. 在文件末尾添加 AKSK 信息。
export ACCESS_KEY=AKTPYmI1Z****
export SECRET_KEY=T1dJM01UU****
  1. 保存文件并退出。

  2. 执行以下命令生效配置信息。

source ~/.bash_profile
  1. 执行以下命令验证配置信息。
echo $ACCESS_KEY
echo $SECRET_KEY

如果配置成功,则返回如下示例:

AKTPYmI1Z****
T1dJM01UU****

windows

  1. 打开命令行,并执行以下添加 AKSK 信息。
set ACCESS_KEY=AKTPYmI1Z****
set SECRET_KEY=T1dJM01UU****
  1. 执行以下命令生效配置信息。
setx ACCESS_KEY "%ACCESS_KEY%"
setx SECRET_KEY "%SECRET_KEY%"
  1. 执行以下命令验证配置信息。
echo $ACCESS_KEY
echo $SECRET_KEY
  1. 如果配置成功,则返回如下示例:
AKTPYmI1Z****
T1dJM01UU****

创建SDK

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"));
}

API调用示例

空间管理

创建空间

说明:

方法名是否必须说明
setSpaceName1~100位,可包含大写字母、小写字母、数字、中划线

setRegion

服务地区,可选:
"cn-qingdao-a", "cn-beijing-a", "cn-beijing-b", "cn-shanghai-a", "cn-guangzhou-a"

setCallback消息回调地址,回调消息可参考:事件回调接口说明 视联网-火山引擎
setDescription空间描述

setAccessType

空间类型,可选:
rtmp、gb28181,rtmp-forward,rtmp接入选rtmp类型,gb接入选择gb28181,拉流空间选择rtmp-forward

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
setSpaceName1~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设备所属空间
setDeviceName4~40位,可包含大写字母、小写字母、数字、中划线
setDeviceNSID国标ID,可通过genSipID生成国标ID
setDescription消息回调地址,回调消息可参考:事件回调接口说明 视联网-火山引擎

setPassword

空间类型,可选:
rtmp、gb28181,rtmp接入选rtmp类型,gb接入选择gb28181

setType

设备类型,可选:
IPC、NVR

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"
RFC3339格式时间戳

setEndTs

"2022-08-25T16:22:17+08:00"
RFC3339格式时间戳

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);
    }
}

录制管理

查询本地录像回放V2

说明:

方法名是否必须说明
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();
    }
}

开始本地录像回放V2

说明:

方法名是否必须说明
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();
}

录像回放控制

说明:

方法名是否必须说明
setStreamIDPlaybackStart返回的ID

setCmd

操作类型:

  • 0(开始)

  • 1(暂停)

  • 2(倍速)

  • 3(跳转)

setNtp指定起始播放时间,单位为:秒(如果当前片段长度为5分钟,指定60秒即从片段的第1分钟开始播放)

setScale

倍速,可选项(需要按设备或网络支持的条件进行设置):

  • 1.0

  • 2.0

  • 4.0

  • 8.0


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();
}

查询回放流状态

说明:

方法名是否必须说明
setStreamIDPlaybackStart返回的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);
    }
}

云端回放列表(已废弃,改用云端回放列表V2)

说明:

方法名是否必须说明
setSpaceID查询的空间ID
setStreamID查询的流ID

setStartTs

"2022-08-25T16:22:17+08:00"
RFC3339格式时间戳

setEndTs

"2022-08-25T16:22:17+08:00"
RFC3339格式时间戳

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);
    }
}


云端回放列表V2

说明:

方法名是否必须说明
setStreamID查询的流ID
setStartTimeUTC timestamp
setEndTimeUTC 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
setStartTsUTC Seconds
setEndTsUTC 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);
    }
}

云端录像播放V2

说明:

方法名是否必须说明
setStreamID查询的流ID
setStartTimeUTC Seconds
setEndTimeUTC 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();
    }
}

设备控制

PTZ/FI/Preset(PTZ控制/聚焦控制/预置位控制)

说明:请求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);
    }
}


播放器SDK

暂时无法在飞书文档外展示此内容

服务端SDK-Golang