腾讯云实时互动工业能源版C/C++ 远端设备 SDK API_音视频解决方案_同尘科技

实时互动工业能源版 1年前 (2023-10-20) 浏览 66

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折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心,购买腾讯云享受折上折,更有现金返利:同意关联,立享优惠

阿里云解决方案也看看?: 点击对比阿里云的解决方案

- 0人点赞 -

发表点评 (0条)

not found

暂无评论,你要说点什么吗?