更新时间:2024-08-06 03:30:56下载pdf
本文主要介绍激光扫地机设备,视频实时预览及音频对讲等功能接入流程。
激光扫地机的音视频业务,基本都涉及到网络、时间等基础业务。因此,正常的音视频业务需要等待 MQTT 上线并且同步到时间后,才启动音视频流服务。
采用激光扫地机 Demo 中的示例流程,顺序启动即可。参考下图:
/**
* @brief Initialize Tuya SDK for media adapter
*
* @param[in] p_media_adatper_info: TUYA_ROBOT_SDK_MEDIA_ADAPTER_S
* @param[in] p_media_infos: DEVICE_ROBOT_MEDIA_INFO_T
* @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
*/
OPERATE_RET tuya_sdk_media_adapter_init(TUYA_ROBOT_SDK_MEDIA_ADAPTER_S *p_media_adatper_info, DEVICE_ROBOT_MEDIA_INFO_T *p_media_infos);
以上接口是 App 传到设备端的音视频数据回调和设备获取快照数据传回 App 的回调注册,音视频编解码配置参数的输入。
/**
* @brief Initialize media ring buffer
* @param [DEVICE_ROBOT_MEDIA_INFO_T] pMediaInfo
* @param [INT_T] max_buffer_seconds: buffer timer 6~10S
* @param [INT_T] channel: media channel
* @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
*/
OPERATE_RET tuya_media_ring_buffer_init(CONST DEVICE_ROBOT_MEDIA_INFO_T *pMediaInfo, INT_T max_buffer_seconds, INT_T channel);
以上接口是针对特定视频通道的特定码流,执行初始化。该操作会执行缓存空间的创建与节点的初始化。关于环形缓存区其它接口的使用,参考 音视频环形缓存。
/**
* @brief Register audio and video P2P event callback
* @param [in] event_cb
* @return [*]OPRT_OK on success. Others on error, please refer to tuya_error_code.h
*/
OPERATE_RET tuya_media_av_event_init(SWEEPER_AV_STREAM_EVENT_CB event_cb);
以上接口是音视频 P2P 事件注册回调,是将视频实时预览和音频对讲等事件传到设备端,让用户做出相应的业务处理。具体的事件,参考激光扫地机 Demo 中的 tuya_sweeper_av_event_cb
函数实现。
下面对部分事件做流程解释:
/**
* @brief Initialize media streaming service
* @param [in] max_client_num range: 0 to 5
* @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
*/
OPERATE_RET tuya_media_server_customize_init(int max_client_num);
以上接口是初始化媒体流服务,目前支持的最大客户端数量为 5 路。
在音视频业务初始化时,您可以根据自己的硬件规格,来设定同时支持的连接路数(一般建议 3~5 路为宜)和可供音视频业务消耗的内存大小,二者是对应关系。若超过以上限制,新建连接会被强制关闭。
tuya_media_server_customize_init
时,设置参数 max_client_num
。tuya_sdk_media_adapter_init
时,设置参数 TUYA_SDK_MEDIA_ADAPTER_S:max_stream_client
。/**
* @brief 创建音视频推流任务
* @param
* @return [*]
*/
void tuya_av_start(void)
{
PR_DEBUG("create av task!!!\n");
int ret = 0;
ret = tal_vi_init(NULL, TY_DSP_MEDIA_VI_MAX); //底层 TKL 硬件视频采集初始化接口
if (0 != ret) {
PR_ERR("tal_vi_init failed,%d\n", ret);
return ;
}
ret = tal_venc_init(0, NULL, TY_DSP_MEDIA_VENC_MAX); //底层 TKL 视频编码初始化接口
if (0 != ret) {
PR_ERR("tal_venc_init failed,%d\n", ret);
return ;
}
ret = tal_ai_init(-1, TY_DSP_MEDIA_AUDIO_MAX); //底层 TKL 硬件音频采集初始化接口
if (0 != ret) {
PR_ERR("tal_ai_init failed,%d\n", ret);
return ;
}
/*创建线程*/
pthread_t main_pid = -1;
pthread_t sub_pid = -1;
pthread_t audio_pid = -1;
pthread_create(&main_pid, NULL, __video_main,NULL);
pthread_create(&sub_pid, NULL, __video_sub,NULL);
pthread_create(&audio_pid, NULL, __audio_main,NULL);
return ;
}
以上示例来源于激光扫地机 Demo,该示例是基于 x86 平台实现简单的音视频推流功能。用户开发音视频功能时,需要根据自身硬件平台来配置参数。更多信息,参考 视频采集 和 音频采集与播放。
Demo 中如要开启音视频功能,需将 TY_ROBOT_MEDIA_ENABLE
宏置 1
,默认是关闭状态。
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈