有奖捉虫:行业应用 & 管理与支持文档专题 HOT

功能介绍

本模块主要实现音视频监控,音视频双向对讲功能。 包含初始化音视频模块,注册监控对讲所需函数,sdk主动发起开始停止对讲及数据接收,设备端实现监控对讲开始停止的具体操作,发送监控对讲的音视频数据,接收发起端音视频数据并进行播放,另外支持在监控过程中的一些实时操作,例如云台控制,通过用户自声明数据发送指令。

流程指引

总流程

注册获取音视频、现场音视频开始播放、现场音视频开始播放、请求 I 帧、接收对讲音视频数据回调、监控时接收用户自定数据回调 > 音视频模块初始化 > 音视频模块去初始化。

音视频对讲流程

开始播放回调 > 获取音视频编码 > 发送音视频数据。 开始播放回调 > 接收音视频数据回调 > 对音视频进行解码播放。

接收用户自定数据

接收用户自声明数据回调 > 解析数据进行相应控制。

接口参考

该功能模块提供以下接口:
iv_avt_init:音视频对讲模块初始化。
iv_avt_exit:音视频对讲模块去初始化。
iv_avt_get_av_info_cb:获取音视频参数信息(建议使用支持多路流版本)。
iv_avt_start_real_play_cb:现场音视频开始播放回调(建议使用支持多路流版本)。
iv_avt_stop_real_play_cb:现场音视频停止播放回调(建议使用支持多路流版本)。
iv_avt_request_iframe_cb:请求 I 帧回调(建议使用支持多路流版本)。
iv_avt_send_stream:发送对讲音视频数据(建议使用支持多路流版本)。
iv_avt_receive_stream_cb:接收对讲音视频数据回调(建议使用支持多路流版本)。
iv_avt_set_av_dec_info_cb:即将接收到的音视频数据的解码信息(建议使用支持多路流版本)。
iv_avt_recv_user_data_cb:监控时接收用户自定数据、透传链接数据。
iv_avt_send_user_data:发送用户自定义数据、透传连接。
iv_avt_get_multiple_av_enc_info_cb:获取音视频指定通路流参数信息(支持多路流)。
iv_avt_start_multiple_live_stream_cb:现场音视频指定通路流开始播放回调(支持多路流)。
iv_avt_stop_multiple_live_stream_cb:现场音视频指定通路流停止播放回调(支持多路流)。
iv_avt_request_multiple_key_frame_cb:请求指定通路流 I 帧回调(支持多路流)。
iv_avt_send_multiple_stream:发送指定通路流对讲音视频数据(支持多路流)。
iv_avt_applets_live_stream_notice_cb:小程序监控回调。
iv_avt_recv_multiple_stream_cb:接收音视频数据回调(支持多路流)。
iv_avt_start_recv_multiple_stream_cb:通知开启音视频接收(支持多路流)。
iv_avt_stop_recv_multiple_stream_cb:通知结束音视频接收(支持多路流)。

iv_avt_init

音视频对讲模块初始化。此接口在 iv_sys_init 初始化完成后调用,用于初始化音视频模块参数资源,远端发起的监控、本地回放处理函数,注册远端发过来的音视频数据接收函数,注册远端发过来的自定义用户数据的处理函数,注册远端发过来的透传连接数据的处理函数。
int iv_avt_init(const iv_avt_init_parm_s *init_param);
参数说明
参数名称
类型
描述
输入/输出
init_param
const iv_avt_init_parm_s *
音视频模块初始化属性参数。
输入
返回值
返回值
描述
IV_ERR_NONE
成功。
IV_ERR_*
失败,对应相应错误码。

iv_avt_exit

音视频对讲模块去初始化。本模块退出时调用,用于释放资源。
int iv_avt_exit(void);
参数说明
返回值
返回值
描述
IV_ERR_NONE
成功。
IV_ERR_*
失败,对应相应错误码。

iv_avt_get_av_info_cb

现场音视频开始播放回调。用于观看端发起现场监控时,SDK 回调设备端以取得此次监控通路的相应音视频信息。
说明:
该接口仅支持单路通道,推荐使用相同功能但支持多通道的 @iv_avt_get_multiple_av_enc_info_cb
void (* iv_avt_get_av_info_cb)(iv_avt_video_res_type_e eVideoResType, iv_cm_av_data_info_s *pstAvDataInfo);
参数说明
参数名称
类型
描述
输入/输出
eVideoResType
iv_avt_video_res_type_e
请求的视频清晰度类型。
输入
pstAvDataInfo
iv_cm_av_data_info_s*
音视频数据信息。
输出

iv_avt_start_real_play_cb

现场音视频开始播放回调。用于观看端发起现场监控时,SDK 回调通知设备端启动相关音视频业务。
说明:
该接口仅支持单路通道,推荐使用相同功能但支持多通道的 @iv_avt_start_multiple_live_stream_cb
void (* iv_avt_start_real_play_cb)(iv_avt_video_res_type_e eVideoResType);
参数说明
参数名称
类型
描述
输入/输出
eVideoResType
iv_avt_video_res_type_e
请求的视频清晰度类型。
输入
返回值
返回值
描述
IV_ERR_NONE
成功。
IV_ERR_*
失败,对应相应错误码。

iv_avt_stop_real_play_cb

现场音视频停止播放回调,用于观看端停止现场监控时,sdk回调通知设备端关闭相关音视频业务。
说明:
该接口仅支持单路通道,推荐使用相同功能但支持多通道的 @iv_avt_stop_multiple_live_stream_cb
void (* iv_avt_stop_real_play_cb)(iv_avt_video_res_type_e eVideoResType);
参数说明
参数名称
类型
描述
输入/输出
eVideoResType
iv_avt_video_res_type_e
停止的视频清晰度类型。
输入
返回值
返回值
描述
IV_ERR_NONE
成功。
IV_ERR_*
失败,对应相应错误码。

iv_avt_send_stream

发送对讲音视频数据。在监控请求发起时,设备端所有编码启动正常后,开始取流向请求端发送数据,注意不同清晰度视频请求时音频也需要同时发送。
说明:
该接口仅支持单路通道,推荐使用相同功能但支持多通道的 @iv_avt_send_multiple_stream
int iv_avt_send_stream(iv_avt_stream_type_e eStreamType, iv_avt_video_res_type_e eVideoResType, void *pStream);
参数说明
参数名称
类型
描述
输入/输出
eStreamType
iv_avt_stream_type_e
发送的音视频类型(音频/视频)。
输入
eVideoResType
iv_avt_video_res_type_e
发送的音视频清晰度类型。
输入
pStream
void *
每次发送的音视频数据内容。
输入
返回值
返回值
描述
IV_ERR_NONE
成功。
IV_ERR_*
失败,对应相应错误码。

iv_avt_request_iframe_cb

请求 I 帧回调。用于 SDK 需要时请求设备强制编码 I 帧。
说明:
该接口仅支持单路通道,推荐使用相同功能但支持多通道的 @iv_avt_request_iframe_cb
int iv_avt_request_iframe_cb(iv_avt_video_res_type_e eVideoResType);
参数说明
参数名称
类型
描述
输入/输出
eVideoResType
iv_avt_video_res_type_e
请求I帧清晰度类型。
输入
返回值
返回值
描述
IV_ERR_NONE
成功
IV_ERR_*
失败,对应相应错误码

iv_avt_set_av_dec_info_cb

设置设备对讲时音视频解码信息参数。
说明:
该接口仅支持单路通道,推荐使用相同功能但支持多通道的 @iv_avt_start_recv_multiple_stream_cb
int (* iv_avt_set_av_dec_info_cb)(iv_cm_av_data_info_s *pstAvDataInfo);
参数说明
参数名称
类型
描述
输入/输出
pstAvDataInfo
iv_cm_av_data_info_s*
音视频解码信息参数。
输入
返回值
返回值
描述
0
成功
< 0
失败

iv_avt_recv_stream_cb

接收对讲音视频数据回调。用于观看端向设备发送音视频数据时,设备端的接收数据回调,由用户实现对数据进行处理播放。
说明:
该接口仅支持单路通道,推荐使用相同功能但支持多通道的 @iv_avt_recv_multiple_stream_cb
int (* iv_avt_recv_stream_cb)(iv_avt_stream_type_e eStreamType, void *pStream);
参数说明
参数名称
类型
描述
输入/输出
eStreamType
iv_avt_stream_type_e
发送的音视频类型(音频/视频)。
输入
pStream
void*
每次发送的音视频数据内容。
输入
返回值
返回值
描述
0
成功
< 0
失败

iv_avt_recv_user_data_cb

监控过程中,由 App 发送的实时指令数据到设备,数据内容由用户自声明,可以作为控制 PTZ、对讲开关等功能。
void (* iv_avt_recv_user_data_cb)(uint32_t channel, char* pUserData, uint32_t u32UserDataLen);
参数说明
参数名称
类型
描述
输入/输出
channle
uint32_t
通道号
输入
pUserData
char*
用户数据
输入
u32UserDataLen
uint32_t
用户数据长度
输入
返回值
返回值
描述
void
void

iv_avt_send_user_data

发送用户自定义数据、透传数据。
int iv_avt_send_user_data(uint32_t channel, uint8_t *data, uint16_t length);
参数说明
参数名称
类型
描述
输入/输出
channel
uint32_t
通道号。
输入
data
uint8_t*
用户数据。
输入
length
uint16_t
用户数据长度,不能超过65500字节。
输入
返回值
返回值
描述
IV_ERR_NONE
成功。
IV_ERR_*
失败,对应相应错误码。

iv_avt_get_multiple_av_enc_info_cb

现场音视频开始播放回调。用于观看端发起现场监控时,SDK 回调设备端以取得此次监控通路的相应音视频信息。适用于多路输出流存在,观看端可选取其中一路流进行观看的场景。例如多摄像头、NVR 等。
int (* iv_avt_get_multiple_av_enc_info_cb)(uint32_t channel, iv_avt_video_res_type_e video_res_type, iv_cm_av_data_info_s *avenc_attr);
参数说明
参数名称
类型
描述
输入/输出
channle
uint32_t
多路输出流通道编号。
输入
eVideoResType
iv_avt_video_res_type_e
请求的视频清晰度类型。
输入
pstAvDataInfo
iv_cm_av_data_info_s*
音视频数据信息。
输出

iv_avt_request_multiple_key_frame_cb

请求 I 帧回调。用于 SDK 需要时请求设备强制编码 I 帧。适用于多路输出流存在,请求指定通路流 I 帧。例如多摄像头、NVR 等。
int iv_avt_request_multiple_key_frame_cb(uint32_t channel, iv_avt_video_res_type_e video_res_type);
参数说明
参数名称
类型
描述
输入/输出
channle
uint32_t
多路输出流通道编号。
输入
eVideoResType
iv_avt_video_res_type_e
请求 I 帧的视频清晰度类型。
输入
返回值
返回值
描述
IV_ERR_NONE
成功。
IV_ERR_*
失败,对应相应错误码。

iv_avt_start_multiple_live_stream_cb

现场音视频开始播放回调。用于观看端发起现场监控时,SDK 回调通知设备端开启相关音视频业务。适用于多路输出流存在,请求开启指定通路的音视频业务。例如多摄像头、NVR 等。
int iv_avt_start_multiple_live_stream_cb(uint32_t channel, iv_avt_video_res_type_e video_res_type);
参数说明
参数名称
类型
描述
输入/输出
channle
uint32_t
多路输出流通道编号。
输入
eVideoResType
iv_avt_video_res_type_e
请求的视频清晰度类型。
输入
返回值
返回值
描述
IV_ERR_NONE
成功。
IV_ERR_*
失败,对应相应错误码。

iv_avt_stop_multiple_live_stream_cb

现场音视频停止播放回调,用于观看端停止现场监控时,SDK 回调通知设备端关闭相关音视频业务。适用于多路输出流存在,请求关闭指定通路的音视频业务。例如多摄像头、NVR 等。
int iv_avt_stop_multiple_live_stream_cb(uint32_t channel, iv_avt_video_res_type_e video_res_type);
参数说明
参数名称
类型
描述
输入/输出
channle
uint32_t
多路输出流通道编号。
输入
eVideoResType
iv_avt_video_res_type_e
请求停止流的视频清晰度类型。
输入
返回值
返回值
描述
IV_ERR_NONE
成功。
IV_ERR_*
失败,对应相应错误码。

iv_avt_send_multiple_stream

发送对讲音视频数据。在观看端发起监控请求时,设备端相应准备工作完成(音视频编码启动)后,取流向观看端发送数据的接口。不同清晰度视频请求时音频也需要同时发送。适用于多路输出流存在,向指定流通路进行发送。例如多摄像头、NVR 等。
int iv_avt_send_multiple_stream(uint32_t av_chanel, iv_avt_stream_type_e stream_type, iv_avt_video_res_type_e video_res_type, void *pstream);
参数说明
参数名称
类型
描述
输入/输出
channel
uint32_t
多路输出流通道编号。
输入
eStreamType
iv_avt_stream_type_e
发送的音视频类型(音频/视频)。
输入
eVideoResType
iv_avt_video_res_type_e
发送的音视频清晰度类型。
输入
pStream
void *
每次发送的音视频数据内容。
输入
返回值
返回值
描述
IV_ERR_NONE
成功。
IV_ERR_*
失败,对应相应错误码。

iv_avt_recv_multiple_stream_cb

接收到远端 App 发送的音视频数据后通过该回调传输到应用层。
int (* iv_avt_recv_multiple_stream_cb)(uint32_t channel,
iv_avt_stream_type_e stream_type,
void *pstream);
参数说明
参数名称
类型
描述
输入/输出
channel
uint32_t
多路输入流通道编号。
输入
stream_type
iv_avt_stream_type_e
接收到的音视频类型(音频/视频)。
输入
pstream
void *
接收到的音视频数据内容。
输入
返回值
返回值
描述
预留
返回 IV_ERR_NONE 即可。

iv_avt_start_recv_multiple_stream_cb

接收到远端 App 发起的音视频传输(对讲、视频通话)时通过该回调,传输相关的音视频编码信息到应用层,供给解码器初始化使用。
int (* iv_avt_start_recv_multiple_stream_cb)(uint32_t channel,
iv_cm_av_data_info_s *avenc_attr);
参数说明
参数名称
类型
描述
输入/输出
channel
uint32_t
多路输入流通道编号。
输入
avenc_attr
iv_cm_av_data_info_s
音视频数据编码信息,供给解码器使用。
输入
返回值
返回值
描述
是否允许本次对讲、视频通话
允许返回0,否则返回错误码 @iv_avt_dev_hungup_type_e

iv_avt_stop_recv_multiple_stream_cb

接收到远端 App 挂断音视频传输(对讲、视频通话)时通过该回调通知应用层去初始化解码器。
int (* iv_avt_stop_recv_multiple_stream_cb)(uint32_t channel,
iv_avt_stream_type_e stream_type);
参数说明
参数名称
类型
描述
输入/输出
channel
uint32_t
多路输入流通道编号。
输入
stream_type
iv_avt_stream_type_e
停止传输的流类型,音频、视频。
输入
返回值
返回值
描述
预留
返回 IV_ERR_NONE 即可。

数据结构

SDK 系统模块提供以下数据结构:
iv_avt_init_parm_s:音视频对讲初始化参数结构体。
iv_avt_stream_type_e:音视频数据类型枚举。
iv_avt_video_res_e:视频清晰度枚举。
iv_avt_dev_hungup_type_e 设备主动挂断错误码枚举。
音视频结构参考公共模块音视频结构。

iv_avt_init_parm_s

音视频对讲初始化参数结构体。
typedef struct iv_avt_init_parm_s
{
uint32_t u32MaxFrameSize;
void (* iv_avt_get_av_enc_info_cb)(iv_avt_video_res_type_e eVideoResType, iv_cm_av_data_info_s *pstAvDataInfo);
void (* iv_avt_start_real_play_cb)(iv_avt_video_res_type_e eVideoResType);
void (* iv_avt_stop_real_play_cb)(iv_avt_video_res_type_e eVideoResType);
int (* iv_avt_request_iframe_cb)();
int (* iv_avt_set_av_dec_info_cb)(iv_cm_av_data_info_s *pstAvDataInfo);
int (* iv_avt_recv_stream_cb)(iv_avt_stream_type_e eStreamType, void *pStream);
void (* iv_avt_recv_user_data_cb)(uint32_t channel, char* pUserData, uint32_t u32UserDataLen);
int (* iv_avt_get_multiple_av_enc_info_cb)(uint32_t channel, iv_avt_video_res_type_e video_res_type, iv_cm_av_data_info_s *avenc_attr);
int (* iv_avt_request_multiple_key_frame_cb)(uint32_t channel, iv_avt_video_res_type_e video_res_type);
int (* iv_avt_start_multiple_live_stream_cb)(uint32_t channel, iv_avt_video_res_type_e video_res_type);
int (* iv_avt_stop_multiple_live_stream_cb)(uint32_t channel, iv_avt_video_res_type_e video_res_type);
int (* iv_avt_applets_live_stream_notice_cb)(uint8_t *url_buff, uint32_t url_buff_len);
int (* iv_avt_recv_multiple_stream_cb)(uint32_t channel, iv_avt_stream_type_e stream_type, void *pstream);
int (* iv_avt_start_recv_multiple_stream_cb)(uint32_t channel, iv_cm_av_data_info_s *avenc_attr);
int (* iv_avt_stop_recv_multiple_stream_cb)(uint32_t channel, iv_avt_stream_type_e stream_type);
}iv_avt_init_parm_s;
参数说明
成员名称
描述
u32MaxFrameSize
音视频每帧的最大值,发送流时,保证每帧的大小小于此值,单位 Kb。
iv_avt_get_av_enc_info_cb
获取设备编码信息回调 (不推荐)。
iv_avt_start_real_play_cb
现场监控开启回调 (不推荐)。
iv_avt_stop_real_play_cb
现场监控停止回调 (不推荐)。
iv_avt_request_iframe_cb
请求编码 I帧回调 (不推荐)。
iv_avt_set_av_dec_info_cb
设置设备对讲解码信息回调 (不推荐)。
iv_avt_recv_stream_cb
接收观看端发来的音视频数据回调(不推荐)。
iv_avt_recv_user_data_cb
接收监控时用户自定义数据、透传连接的数据。
iv_avt_get_multiple_av_enc_info_cb
获取设备编码信息回调(推荐)。
iv_avt_request_multiple_key_frame_cb
请求编码I帧回调(推荐)。
iv_avt_start_multiple_live_stream_cb
现场监控开启回调(推荐)。
iv_avt_stop_multiple_live_stream_cb
现场监控停止回调(推荐)。
iv_avt_applets_live_stream_notice_cb
小程序监控通知回调。
iv_avt_recv_multiple_stream_cb
接收音视频数据回调(推荐)。
iv_avt_start_recv_multiple_stream_cb
通知开始接收音视频数据回调(推荐)。
iv_avt_stop_recv_multiple_stream_cb
通知停止接收音视频数据回调(推荐)。

iv_avt_stream_type_e

音视频数据类型枚举。包括音频和视频。
typedef enum
{
IV_AVT_STREAM_TYPE_AUDIO = 0,
IV_AVT_STREAM_TYPE_VIDEO = 1,
IV_AVT_STREAM_TYPE_AV = 2,


IV_AVT_STREAM_TYPE_BUTT
}iv_avt_stream_type_e;
参数说明
成员名称
描述
IV_AVT_STREAM_TYPE_AUDIO
音频
IV_AVT_STREAM_TYPE_VIDEO
视频
IV_AVT_STREAM_TYPE_AV
音频+视频

iv_avt_video_res_type_e

视频清晰度枚举。
typedef enum
{
IV_AVT_VIDEO_RES_FL = 0,
IV_AVT_VIDEO_RES_SD = 1,
IV_AVT_VIDEO_RES_HD = 2,


IV_AVT_VIDEO_RES_BUTT
}iv_avt_video_res_type_e;
参数说明
成员名称
描述
IV_AVT_VIDEO_RES_FL
流畅
IV_AVT_VIDEO_RES_SD
标清
IV_AVT_VIDEO_RES_HD
高清

iv_avt_dev_hungup_type_e

设备主动挂断错误码枚举。
typedef enum
{
IV_AVT_DEV_HUNGUP_NONE = 0,
IV_AVT_DEV_HUNGUP_NOTSUPPORT = 1,
/* IV_AVT_DEV_HUNGUP_* */
IV_AVT_DEV_HUNGUP_MAX = 50
} iv_avt_dev_hungup_type_e;
参数说明
成员名称
描述
取值
IV_AVT_DEV_HUNGUP_NONE
不挂断,允许。
0
IV_AVT_DEV_HUNGUP_NOTSUPPORT
不支持的类型。
1
IV_AVT_DEV_HUNGUP_*
开发者自定义。
[2-49]

示例代码

1. 对讲模块初始化

iv_err_code_e eErrCode = 0;
iv_avt_init_parm_s stAvtInitParameters;

memset(&stAvtInitParameters, 0, sizeof(iv_avt_init_parm_s));
//这里可选择支持多路(多个摄像头)或者仅单路(单个摄像头),注册一种即可
//如果都注册则优先使用多路。
//推荐使用多路
#if 0
stAvtInitParameters.iv_avt_get_av_enc_info_cb = av_talk_get_enc_info;
stAvtInitParameters.iv_avt_start_real_play_cb = av_talk_start_real_play;
stAvtInitParameters.iv_avt_stop_real_play_cb = av_talk_stop_real_play;
stAvtInitParameters.iv_avt_request_iframe_cb = av_talk_request_iframe;
//接收流
stAvtInitParameters.iv_avt_recv_stream_cb = av_talk_recv_stream;
stAvtInitParameters.iv_avt_set_av_dec_info_cb = av_talk_set_dec_info;
#else
//发送流相关
stAvtInitParameters.iv_avt_get_multiple_av_enc_info_cb = av_talk_get_multiple_enc_info;
stAvtInitParameters.iv_avt_start_multiple_live_stream_cb = av_talk_start_multiple_live_stream;
stAvtInitParameters.iv_avt_stop_multiple_live_stream_cb = av_talk_stop_multiple_live_stream;
stAvtInitParameters.iv_avt_request_multiple_key_frame_cb= av_talk_request_multiple_key_frame;
//接收流相关
stAvtInitParameters.iv_avt_start_recv_multiple_stream_cb = av_talk_start_recv_multiple_stream;
stAvtInitParameters.iv_avt_stop_recv_multiple_stream_cb = av_talk_stop_recv_multiple_stream;
stAvtInitParameters.iv_avt_recv_multiple_stream_cb = av_talk_recv_multiple_stream;
#endif
//用户自定义信令、自定义数据、透传数据,可以传输量大的数据
stAvtInitParameters.iv_avt_recv_user_data_cb = av_talk_recv_user_data;
//小程序监控
#if 1
stAvtInitParameters.iv_avt_applets_live_stream_notice_cb = av_applets_live_stream_start;
#endif
eErrCode = iv_avt_init(&stAvtInitParameters);
if(eErrCode < 0)
{
GDB_ERR("fail:%d.\\n",eErrCode);
}


2. 对讲模块退出

iv_avt_exit();

3. 发送音视频数据

iv_cm_avenc_stream_s stIvAvencStream; //音视频混合
iv_avt_send_stream(IV_AVT_STREAM_TYPE_AV, eVideoResType, &stIvAvencStream);
//第0路流音视频混合
iv_avt_send_multiple_stream(0, IV_AVT_STREAM_TYPE_AUDIO, eVideoResType, &stIvAvencStream);

4. 接收音视频数据

int static av_talk_recv_stream(iv_avt_stream_type_e eAvtStreamType, void *pstAvtStream)
{
if(eAvtStreamType == IV_AVT_STREAM_TYPE_AUDIO)
{
/*音频解码*/
}
else
{
/*视频解码*/
}
return 0;
}

5. 对讲时信令控制

void av_talk_recv_user_data(char* pUserData, uint32_t u32UserDataLen)
{
GDB_INFO("data:");
for(int i=0;i<u32UserDataLen; i++)
{
printf("%2x ", pUserData[i]);
}
printf("\\n");
/*按用户自定格式解析并进行控制操作*/
return;
}