视频观看与切流

最近更新时间:2024-02-19 17:19:11

我的收藏
说明:
视频观看与切流,用于控制远端设备上现场设备视频流的显示。目前支持对多个现场设备的多个视频流进行观看和切换。由远端设备 SDK 发起,无需对现场设备 SDK 进行操作。

用法介绍

视频流的接收

远端设备接收视频流时,调用 TRRO_connect 接口会通过视频流接收器来接收视频流,并关联到通过TRRO_setWindows接口设置的视频显示窗口。下图是一组视频流和显示窗口关联关系示意:



现场设备视频流:由现场设备 ID + 流 ID 唯一标识。流 ID 编号从0到 N,对应现场设备 streams_config 配置中视频流数组的元素编号。
视频显示窗口:由视频窗口句柄唯一标识,例如 win32 的 HWND。内部渲染模式下,SDK 可根据视频窗口句柄在指定窗口上进行视频渲染显示。外部渲染模式下,由开发者自己维护视频显示窗口和视频的渲染显示。
远端设备视频流接收器:由接收句柄(conn_fd)唯一标识。接收句柄编号从0开始递增,可由开发者自定义,一般可设置为窗口编号。
注意:
同一时间,一个视频流接收器只能接收一个现场设备视频流。当视频流接收器连接新的视频流时,之前连接的视频流会自动断开。
可以看出,对于内部渲染,远端设备视频流接收器桥接了现场设备视频流和视频窗口,可让 SDK 自动完成视频流显示。对于外部渲染,远端设备视频流接收句柄可协助开发者来标识 SDK 回调的视频流数据应该在哪个窗口上进行渲染。

视频流的切换

远端设备进行视频流切换时,可通过 TRRO_connect 接口进行。根据新切换的视频流是否要在新的窗口显示,可分两类场景:
1. 切换后视频流在已有窗口显示:
使用已有窗口对应的接收句柄,通过 TRRO_connect 接口接收该窗口要切换的视频流。这时新视频流会切换到对应窗口显示,而窗口上原有视频流会被断开。
2. 切换后视频流在新建窗口显示:
使用新窗口对应的接收句柄,通过 TRRO_connect 接口接收切换后的视频流,并通过 TRRO_disconnect 接口断开切换前的视频流。

视频窗口的切换

内部渲染模式下,远端设备进行视频窗口切换时,可通过 TRRO_setWindows 接口进行。一般在 SDK 启动阶段,会将视频流接收器的接收句柄和视频窗口进行关联。在窗口布局需要调整时(例如交换两个视频流的所在窗口,而不涉及视频流本身的切换),可通过 TRRO_setWindows 接口更新视频流接收器的接收句柄和视频窗口的对应关系,从而在不断连视频流的情况下,完成视频流窗口的切换。

相关接口

连接视频流

使用说明:可通过该接口对现场设备视频流进行连接和切换。
/*
* @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();