腾讯云实时互动工业能源版C/C++ 远端设备 SDK API_音视频解决方案_同尘科技
API 描述
适用于 Windows/Linux 64 位系统。头文件引用 trro_remote.h,API 可参考头文件中接口注释。下面列举常用接口描述。
初始化
使用说明:可根据配置输入类型(文件/字符串),选择对应初始化接口初始化,只需使用一个。
使用 json 配置文件路径初始化
/** @name : TRRO_initJsonPath* @brief : SDK初始化,读取指定路径文件初始化, 接口为同步阻塞模式,等待信令连接成功后返回* @input : jsonPath json文件路径* @return : 成功 1 失败 <= 0*/int TRRO_initJsonPath(const char* jsonPath);
参数 | 含义 |
jsonPath | json 配置文件路径 |
返回值 | 成功 1 失败 <= 0 |
使用 json 字符串初始化
/** @name : TRRO_initJson* @brief : SDK初始化,读取输入JSON字符串初始化, 接口为同步阻塞模式,等待信令连接成功后返回* @input : json json配置字符串* @return : 成功 1 失败 <= 0*/int TRRO_initJson(const char* json);
参数 | 含义 |
json | 配置信息 json 字符串 |
返回值 | 成功 1 失败 <= 0 |
获取可操控在线现场设备列表
使用说明:可通过该接口获取到远端设备可以操控的在线现场设备列表,可根据实际需要使用。
/** @name : TRRO_getGwList* @brief : 获取在线现场设备设备列表,接口为同步阻塞模式* @input : void* @return : json字符串* {"ret":0,"msg":"suc","gateways":[{"deviceID":"xx","name":"xx","type":"gateway","status":"connected","streams":4,"timestamp":1682231838673,"version":"xx"}],"count":1}*/const char* TRRO_getGwList();
参数 | 含义 |
返回值 | 现场设备列表 json 字符串 |
连接视频流
使用说明:可通过该接口对现场设备视频流进行连接。
/** @name : TRRO_connect* @brief : 发起视频连接,可多次调用连接不同流,异步模式,根据 onState 状态回调确认视频连接成功* @input : gwid 目标连接的现场设备 ID* record_config:* 优先使用录制配置,当默认录制配置命名规则无法满足需求时使用,json 字符串,需要对每一路进行配置 eg:"{\"file_names\": [{\"file\":\"test\", \"duration\":15}, {\"file\":\"test01\", \"duration\":15}]}" ps:file 文件名 duration 分片时长单位秒* streams_num 要拉取现场设备视频流的个数, 与conn_fds和streams_num数组长度匹配, 值的范围 1 到 现场设备支持的device_streams数量* streams_id 现场设备视频流的 ID 数组, 现场设备视频流 ID 从0开始, 最大值为现场设备支持的 device_streams数量 -1* conn_fds conn_fd数组,conn_fd为接收视频流的句柄标识,自行编号,取值从0开始,最大值为 max_streams -1,max_streams在远端设备配置文件配置* @return : 成功 1 失败 <= 0*/int TRRO_connect(const char* gwid, const char* record_config, int streams_num, int* streams_id, int* conn_fds);
参数 | 含义 |
gwid | 现场设备 ID |
record_config | 视频录制配置,建议当默认录制配置无法满足需求时使用,json 字符串,需要对每一路进行配置,例如:
{ "file_names": [{ "file": "test", "duration": 15 }, { "file": "test01", "duration": 15 }]} 参数:file:文件名 duration:切片时长(单位:秒) |
streams_num | 要连接视频流的数量 |
streams_id | 要连接的现场设备视频流 ID 数组 |
conn_fds | 接收视频流使用的接收视频流句柄数组 |
返回值 | 成功 1 失败 <= 0 |
设置视频流渲染窗口
使用说明:可通过该接口设置渲染窗口,内部渲染时使用,外部渲染时设置空指针即可。
/** @name : TRRO_setWindows* @brief : 设置接收流句柄对应的显示窗口句柄* @input : conn_fds 接收视频流句柄数组* windows 显示窗口句柄数组, 显示窗口句柄为显示窗体的句柄/指针,如 Windows 平台的 HWND;* 外部渲染时,数组中的显示窗口句柄配置为 nullptr* num 设置显示窗口数量,与 conn_fds 和 windows 数组长度匹配* @return :void*/void TRRO_setWindows(int* conn_fds, WindowIdType * windows, int num);
参数 | 含义 |
conn_fds | 接收视频流句柄数组 |
windows | 显示窗口句柄数组,外部渲染时可设置为空指针数组 |
num | 与 conn_fds 和 windows 数组长度一致 |
关闭视频连接
使用说明:可通过该接口断开视频连接。
关闭指定视频连接
/** @name : TRRO_disconnect* @brief : 关闭conn_fds 对应的视频连接* @input : conn_fds 要关闭视频连接对应的视频接收句柄数组* fd_num conn_fd数组长度* @return : 成功 1 失败 <= 0*/int TRRO_disconnect(int* conn_fds, int fd_num);
参数 | 含义 |
conn_fd | 视频接收句柄数组 |
fd_num | 数组长度 |
返回值 | 成功 1 失败 <= 0 |
关闭所有视频连接
/** @name : TRRO_disconnectAll* @brief : 关闭所有视频连接* @input : void* @return : 成功 1 失败 <= 0*/int TRRO_disconnectAll();
向现场设备发送控制数据
使用说明:可通过该接口给现场设备发送数据。
/** @name : TRRO_sendControlData* @brief : 向现场设备发送控制数据* @input : gwid 目标现场设备 ID* msg 发送消息,二进制透传* len 消息长度 * qos 消息传输qos 0:不可靠传输 1:可靠传输* @return : 成功 1 失败 <= 0*/extern "C" TRRO_EXPORT int TRRO_sendControlData(const char* gwid, const char* msg, int len, int qos = 0);
参数 | 含义 |
gwid | 现场设备 ID |
msg | 发送二进制数据 |
len | 消息长度 |
qos | 发送 qos:0:不可靠传输1:可靠传输 |
返回值 | 成功:1 失败:<= 0 |
注册回调函数
使用说明:可注册时延、现场设备数据、视频帧图像数据、视频连接状态和视频传输状态等回调,获取对应信息。
/** 回调注册函数* context 上下文指针,回调时会返回注册时传入的该指针,* callback 注册的回调函数,回调函数实现中请勿在回调线程长时间阻塞,若需要长时间处理建议转移到其他线程处理*/
extern "C" TRRO_EXPORT void TRRO_registerLatencyCallback(void* context, TRRO_onLatencyReport * callback);extern "C" TRRO_EXPORT void TRRO_registerAllLatencyCallback(void* context, TRRO_onAllLatencyReport * callback);extern "C" TRRO_EXPORT void TRRO_registerVideotimeCallback(void* context, TRRO_onVideotimeReport * callback);extern "C" TRRO_EXPORT void TRRO_registerReportDataCallback(void* context, TRRO_onReportData * callback);extern "C" TRRO_EXPORT void TRRO_registerRemoteFrameCallback(void* context, TRRO_onRemoteFrameData * callback, int frame_type = 0);extern "C" TRRO_EXPORT void TRRO_registerRemoteEncodedFrameCallback(void* context, TRRO_onRemoteEncodedFrameData* callback);extern "C" TRRO_EXPORT void TRRO_registerOnState(void* context, TRRO_OnState * callback);extern "C" TRRO_EXPORT void TRRO_registerOnMediaState(void* context, TRRO_OnMediaState * callback);extern "C" TRRO_EXPORT void TRRO_registerOnMediaStateInfo(void* context, TRRO_OnMediaStateInfo * callback);extern "C" TRRO_EXPORT int TRRO_registerLogCallback(void* context, TRRO_OnLogData * callback);extern "C" TRRO_EXPORT void TRRO_registerOnDiagReport(void* context, TRRO_OnDiagReport * callback);extern "C" TRRO_EXPORT void TRRO_registerOnOperationPermissionState(void* context, TRRO_OnOperationPermissionState* callback);
回调函数定义:
//操控权限enum TrroPermission { kPermissionGuest = 0, kPermissionMaster = 1,};
//视频连接状态enum TrroState { kDisconnect = 0, kConnecting = 1, kConnected = 2, kDisconnecting = 3,};
//日志等级enum TrroLogLevel { LOG_INFO = 1, LOG_WARNING = 2, LOG_ERROR = 3,};
enum FrameType { TypeI420 = 0, TypeARGB = 1, TypeRGB = 2, TYPENV12 = 3,};
enum TrroCodec { Trro_H264 = 0, Trro_H265 = 1, Trro_AV1 = 2,};
/* TRRO_OnMediaStateInfo 使用该结构体 包含媒体传输的详细信息* fps 每秒帧数目* bps 每秒数据量* rtt UDP ping 网络往返时间* decd 解码耗时ms* jitter 接收抖动值* packets_lost 总丢包数目* packets_received 总接收数目* stun 穿网模式 0:host, 1:srflx, 2:prflx, 3:relay* 单位(%) 视频播放卡顿率 = 视频播放的累计卡顿时长 / 视频播放的总时长。* lag_k100 视频帧间隔超过100ms视为卡顿,并将其计入视频播放的累计卡顿时长,最终计算获得的卡顿率。* lag_k150 视频帧间隔超过150ms视为卡顿,并将其计入视频播放的累计卡顿时长,最终计算获得的卡顿率。* duration 视频播放的总时长*/struct TrroMediaState { int fps; int bps; int rtt; long long decd; int jitter; long long packets_lost; long long packets_received; int stun; double lag_k100; double lag_k150; long long duration;};
/** @name : TRRO_onVideotimeReport (depreciated)* @brief : 视频帧采集时间戳回调, 旧接口,建议使用 onAllLatencyReport 接口获取* @input : context 回调上下文指针, 返回注册回调函数时传入的 context* gwid 视频来源现场设备 ID * conn_fd 对应视频流接收句柄 * videotime 当前视频帧的现场设备采集时间戳 * @return : void*/typedef void STD_CALL TRRO_onVideotimeReport(void* context, const char* gwid, int conn_fd, long long videotime);
/** @name : TRRO_onLatencyReport (depreciated)* @brief : 视频时延回调, 旧接口,建议使用onAllLatencyReport接口获取* @input : context 回调上下文指针, 返回注册回调函数时传入的context* gwid 视频来源现场设备id * conn_fd 对应视频流接收句柄 * latency 返回视频上行时延ms * @return : void*/typedef void STD_CALL TRRO_onLatencyReport(void* context, const char* gwid, int conn_fd, long long latency);
/** @name : TRRO_onAllLatencyReport* @brief : 时延回调* @input : context 回调上下文指针, 返回注册回调函数时传入的 context* gwid 视频来源现场设备 ID * conn_fd 对应视频流接收句柄 * latency1 返回均值估计视频时延ms* latency2 返回最大估计视频时延ms* videotime 当前视频帧的现场设备采集时间戳* rcct 控制信道往返时延ms, 等于视频上行延迟+控制下行延迟 * @return : void*/typedef void STD_CALL TRRO_onAllLatencyReport(void* context, const char* gwid, int conn_fd, long long latency1, long long latency2, long long videotime, int rcct);
/** @name : TRRO_onReportData* @brief : 接收来自现场设备信息回调* @input : context 回调上下文指针, 返回注册回调函数时传入的 context* gwid 消息来源现场设备 ID * msg 消息, 二进制透传* len 消息长度* qos 消息来源传输 qos, 0:不可靠传输, 1:可靠传输* @return : void*/typedef void STD_CALL TRRO_onReportData(void* context, const char* gwid, const char* msg, int len, int qos);
/** @name : TRRO_onRemoteFrameData* @brief : 原始视频图像帧回调* @input : context 回调上下文指针, 返回注册回调函数时传入的 context* gwid 视频帧的来源现场设备 ID* stream_id 视频帧的来源现场设备流 ID* conn_fd 接收视频流的句柄标识* data 视频图像帧数据,数据格式为YUVI420,可通过I4202ARGB接口转 ARGB* width 视频帧宽* height 视频帧高* videotime 当前视频帧的现场设备采集时间戳* @return : void*/typedef void STD_CALL TRRO_onRemoteFrameData(void* context, const char* gwid, int stream_id, int conn_fd, const char* data, int width, int height, long long videotime);
/* * @name : TRRO_onRemoteEncodedFrameData * @brief : 编码视频图像帧回调 * @input : context 回调上下文指针, 返回注册回调函数时传入的 context * gwid 视频帧的来源现场设备 ID * stream_id 视频帧的来源现场设备流 ID * conn_fd 接收视频流的句柄标识 * data 编码的视频图像帧数据 * len 编码的视频图像帧的长度 * trro_codec 编码的 codec 类型 * is_key_frame 是否是关键帧 * videotime 当前视频帧的现场设备采集时间戳 * @return : void */typedef void STD_CALL TRRO_onRemoteEncodedFrameData(void* context, const char* gwid, int stream_id, int conn_fd, const char* data, int len, TrroCodec trro_codec, bool is_key_frame, long long videotime);
/** @name : TRRO_OnState* @brief : 视频流连接状态回调* @input : context 回调上下文指针, 返回注册回调函数时传入的 context* gwid 视频帧的来源现场设备 ID * stream_id 视频帧的来源现场设备流 ID* conn_fd 接收视频流的句柄标识* state 视频流连接状态,对应 TrroState 状态* @return : void*/typedef void STD_CALL TRRO_OnState(void* context, const char* gwid, int stream_id, int conn_fd, int state);
/** @name : TRRO_OnMediaState* @brief : 视频流传输状态回调* @input : context 回调上下文指针, 返回注册回调函数时传入的 context* conn_fd 接收视频流的句柄标识* fps 每秒帧数目* bps 每秒数据量* rtt UDP ping 网络往返时间* decd 解帧耗时ms* jitter 接收抖动值* packets_lost 总丢包数目* packets_received 总接收数目* stun 穿网模式 0:host, 1:srflx, 2:prflx, 3:relay* @return : void*/typedef void STD_CALL TRRO_OnMediaState(void* context, int conn_fd, int fps, int bps, int rtt, long long decd, int jitter, long long packets_lost, long long packets_received, int stun);
/** @name : TRRO_OnMediaStateInfo* @brief : 视频流传输状态回调* @input : context 回调上下文指针, 返回注册回调函数时传入的 context* conn_fd 接收视频流的句柄标识* mediastate 媒体相关的详细信息* @return : void*/typedef void STD_CALL TRRO_OnMediaStateInfo(void* context, int conn_fd, TrroMediaState mediastate);
/** @name : TRRO_OnLogData* @brief : 日志回调* @input : context 回调上下文指针, 返回注册回调函数时传入的 context* msg 日志内容* level 日志级别,参考枚举 TrroLogLevel* @return : void*/typedef void STD_CALL TRRO_OnLogData(void* context, const char* msg, int level);
/** #name : TRRO_OnDiagReport* @brief : 诊断信息回调* @input : context 回调上下文指针, 返回注册回调函数时传入的 context* gwid 发起诊断的目标现场设备 ID* type 1 成功 , < 0 相关错误信息 * json 回调诊断详细信息 json 格式* @return : void*/typedef void STD_CALL TRRO_OnDiagReport(void* context, const char* gwid, int type, const char* json);
/** #name : TRRO_OnOperationPermissionState* @brief : 回调现场设备操控权限状态通知* @input : context 回调上下文指针, 返回注册回调函数时传入的 context* field_devid 来源现场设备 ID* self_permission 本设备当前的操控权限,参考 TrroPermission, 0 是 guest,只有观看权限, 1是 master,拥有完全控制权限* master_devid 拥有 master 权限的远端设备 ID* @return : void*/typedef void STD_CALL TRRO_OnOperationPermissionState(void* context, const char* field_devid, int self_permission, const char* master_devid);
获取版本号
//获取SDK版本号const char * TRRO_getVersion();
销毁 SDK
使用说明:可通过该接口销毁 SDK,释放资源,可用于程序退出时需要主动释放底层资源场景(例如 C# 程序)。
//销毁SDKextern "C" TRRO_EXPORT void TRRO_destroy();
静音现场设备
使用说明:将目标现场设备静音,仅支持 server 模式
/** @name : TRRO_audioMute* @brief : Mute/unMute 目标现场设备的音频 仅 Server 模式* @input : gwid 目标现场设备 ID* mute true 静音, false 取消静音* @return : 成功 1 失败 <= 0*/extern "C" TRRO_EXPORT int TRRO_audioMute(const char* gwid, bool mute);
参数 | 含义 |
gwid | 目标现场设备 ID |
mute | true:静音 false:取消静音 |
诊断视频流
使用说明:用于诊断视频状态,调用TRRO_connect接口后,如获取不到视频流,可通过调用诊断接口获取诊断报告
/** @name : TRRO_DiagRequest* @brief : 需要主动出发,诊断网关、控制端当前状态输出报告* @input : gwid 目标设备 ID* @return : 成功1 失败 <= 0*/extern "C" TRRO_EXPORT int TRRO_diagRequest(const char* gwid);
参数 | 含义 |
gwid | 目标现场设备 ID |
请求控制权限
使用说明:向现场设备请求控制权限,请求成功后才可向对应现场设备发送及接收控制数据
//操控权限enum TrroPermission { kPermissionGuest = 0, kPermissionMaster = 1,};
/** @name : TRRO_requestPermission* @brief : 向网关发出权限请求,网关会反馈TRRO_OnOperationPermissionState 更新权限* @input : gwid 目标设备 ID* permisson 参考结构体 TrroPermission* @return : 成功1 失败 <= 0*/extern "C" TRRO_EXPORT int TRRO_requestPermission(const char* gwid, int permisson);
参数 | 含义 |
gwid | 目标现场设备 ID |
permisson | 控制权限 |
I420转ARGB
使用说明:用于图像数据的格式转换,将 yuvi420格式转为 ARGB,支持分辨率 resize
/** @name : TRRO_I4202ARGB* @brief : YUV I420 图像格式转 ARGB 图像格式,转换时带 resize 功能* @input : argb 存放输出A RGB 图像数据的指针,ARGB 的 int 表示: 0XFF(RR)(GG)(BB) , RR GG BB 为对应的 rgb 的值* yuvI420 输入 yuvI420 图像数据指针* src_width 输入图像宽度* src_height 输入图像高度* dst_width 输出图像宽度* dst_height 输出图像高度* @return : 成功 1 失败 <= 0*/extern "C" TRRO_EXPORT int TRRO_I4202ARGB(int* argb, char* yuvI420, int src_width, int src_height, int dst_width, int dst_height);
参数 | 含义 |
argb | 输出的 argb 数据 |
yuvI420 | 输入的 yuvi420格式数据 |
src_width | 输入图像宽度 |
src_height | 输入图像高度 |
dst_width | 输出图像宽度 |
dst_height | 输出图像高度 |
对音视频的解决方案有疑惑?想了解解决方案收费? 联系解决方案专家
腾讯云限时活动1折起,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心,购买腾讯云享受折上折,更有现金返利:同意关联,立享优惠
阿里云解决方案也看看?: 点击对比阿里云的解决方案
暂无评论,你要说点什么吗?