tencent cloud

实时互动-工业能源版

产品简介
产品概述
产品功能
应用场景
购买指南
免费试用
计费概述
续费与停服
Demo 体验流程
开发指南
多网络路径传输
控制数据传输
控制授权管理
语音对讲
视频观看与切流
现场设备 SDK
基本介绍
SDK API 调用流程
C/C++ 现场设备 SDK API
现场设备配置说明
错误码及排查
远端设备 SDK
基本介绍
SDK 调用过程
C/C++ 远端设备SDK API
远端设备配置说明
错误码及排查
SDK 及 DEMO 下载
现场设备端
远端设备端
常见问题
共性问题
相关协议
实时互动-工业能源版隐私协议
实时互动-工业能源版数据处理协议
服务等级协议

SDK 调用过程

PDF
聚焦模式
字号
最后更新时间: 2025-02-11 16:50:36

建议步骤

注意
onSingalState回调函数注册必须在SDK初始化前进行,其他函数注册可着初始化完成后.

步骤 1: 初始化

注册onSignalState回调, 调用init函数接口, 通过json配置字符串或配置文件初始化SDK.

步骤2: 按需注册回调函数

根据需要, 注册权限请求回调, 上报消息回调, 日志回调, 视频连接状态回调, 视频传输状态回调, 视频图像回调, 延迟信息回调等回调函数, 并对回调的状态和事件进行处理.

步骤3: 设置视频渲染窗口句柄

如果基于SDK回调的视频图像,应用自己进行视频渲染,可跳过该步骤. 如果使用SDK渲染视频 (暂不支持linux), 调用TRRO_setWindows接口关联视频接收句柄和视频渲染窗口句柄, 这样视频接收句柄收到的视频流会自动在其关联的视频窗口上渲染.

步骤4: 连接视频流

调用TRRO_connect接口, 可以通过指定视频接收句柄拉取指定现场设备的指定视频流. 该接口可多次调用来连接不同现场设备的不同视频流. 如果相同的视频接收句柄切换到连接新的视频流, 原有的视频流将会自动断开. TRRO_disconnect接口也可以用于断开连接的视频流. stream.

步骤5: 按需发送控制数据

调用TRRO_sendControlData接口向目标现场设备发送输入的二进制数据. 调用接口前,需要确认对该现场设备拥有master操控权限. TRRO_requestPermission和 TRRO_OnOperationPermissionState接口可以用来请求和检查对应的操控权限.

步骤6: 销毁SDK

当程序推出时,请调用destroy接口来释放SDK资源, 特别是对于C#程序, 因为C#程序退出时不一定会自动释放其调用的dll库资源.

样例代码

#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include "trro_remote.h"

//This sample does not include render code
int main() {
//register signal state callback
TRRO_registerSignalStateCallback(nullptr, [](void *context, SignalState state) {
if(state == kTrroReady) {
//connect to server successfully
printf("init success \\n");
}
if (state == kTrroAuthFailed) {
//auth failed
printf("device_id or password is incorrect\\n");
}
if (state == kTrroKickout) {
//kicked out caused by the same device ID login
printf("the device is kicked by server, may be there is another device using the same device id\\n");
}
});

// init function can be replaced by other init function, e.g. json string as input
int ret = TRRO_initJsonPath("./config.json");
if(TRRO_SUCCED != ret) {
if (ret == -TRRO_SIGNAL_CONNECT_OUTTIME) {
printf("init process: wait for connecting\\n");
} else {
printf("init fail ret %d\\n", ret);
}
}
//register the callback functions as needed
//register video connection state callback
TRRO_registerOnState(this, [](void* context, const char* gwid, int stream_id, int conn_fd, int state) {
printf("###### onstate gwid %s, streamid %d conn_fd %d state %d\\n", gwid, stream_id, conn_fd, state);
});
//register video transmission state callback
TRRO_registerOnMediaState(this, [](void* context, int windows_id, int fps, int bps, int rtt, long long decd, int jitter,
long long packets_lost, long long packets_received, int stun) {
printf("onMediaState window id %d fps %d bps %d rtt %d decd %lld rb %d lost %lld rec %lld stun %d\\n",windows_id, fps, bps, rtt, decd, jitter, packets_lost, packets_received, stun);
});
//register video latency info callback
TRRO_registerAllLatencyCallback(this, [](void* context, const char* gwid, int windows_id, long long latency1, long long latency2, long long gateway_time, int vcct) {
printf("allLatency %s, %d, latency1 %lld latency2 %lld video time %lld, vcct %d\\n", gwid, windows_id, latency1, latency2, gateway_time, vcct);
});
//register video image data callback, can be used for application program rendering
TRRO_registerRemoteFrameCallback(this, [](void * context, const char * gwid, int stream_id, int conn_id, const char* data, int width, int height, long long videotime) {
//here can realize the rendering functions, but please do not block the callback thread.
//you can try the async way to render video otherwise the video will be lagging
//showMyVideo(gwid, conn_id, (unsigned char*)data, width, height);
});

//receiver handle ID array
int confds[8] = {0,1,2,3,4,5,6,7};
//rendering windows handle
WindowIdType window_hwnds[8] = { nullptr};
//for SDK internal rendering, set the target win32 HWND, only for windows;
//for application program rendering, just set nullptr,and realize showMyVideo function
TRRO_setWindows(confds, window_hwnds, 8);
//connect the video streams, assume two devices, each with 4 video streams.
int stream_num = 4;
int stream_indexs[4] = {0,1,2,3};
//connect field device1, 4 video streams (0-3), using the receiver handle (0-3)
TRRO_connect("field_deviceId1", "", stream_num , &stream_indexs[0], &confds[0]);
//connect field device1, 4 video streams (0-3), using the receiver handle (4-7)
TRRO_connect("field_deviceId2", "", stream_num , &stream_indexs[0], &confds[4]);
//wait for exiting
while(true){
sleep(3000);
//断开视频流
TRRO_disconnectAll();
//退出SDK,释放资源
TRRO_destroy();
break;
}
return 0;
}


帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈