Last Updated on : 2025-01-20 03:12:55download
本文主要介绍激光扫地机设备,视频实时预览及音频对讲等功能接入流程。
激光扫地机的音视频业务,基本都涉及到网络、时间等基础业务。因此,正常的音视频业务需要等待 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 的回调注册,音视频编解码配置参数的输入。
/***********************************************************
*@function: ty_rvc_media_ring_buffer_init
*@brief initialize media ring buffer init
*@param[in] pMediaInfo: DEVICE_SDK_MEDIA_INFO_S
*@param[in] max_buffer_seconds: buffer timer 6~10S
*@param[in] channel: media channel
*@return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
***********************************************************/
OPERATE_RET ty_rvc_media_ring_buffer_init(CONST DEVICE_SDK_MEDIA_INFO_S* pMediaInfo, INT_T max_buffer_seconds, INT_T channel);
以上接口是针对特定视频通道的特定码流,执行初始化。该操作会执行缓存空间的创建与节点的初始化。关于环形缓存区其它接口的使用,参考 音视频环形缓存。
***********************************************************
*@function: ty_rvc_media_av_event_init
*@brief: sdk audio and video registration callback int
*@param [in] event_cb: audio and video stream treans cb
*@return [*]OPRT_OK on success. Others on error, please refer to tuya_error_code.h
***********************************************************/
OPERATE_RET ty_rvc_media_av_event_init(RVC_AV_STREAM_EVENT_CB event_cb);
以上接口是音视频 P2P 事件注册回调,是将视频实时预览和音频对讲等事件传到设备端,让用户做出相应的业务处理。具体的事件,参考激光扫地机 Demo 中的 tuya_sweeper_av_event_cb
函数实现。
下面对部分事件做流程解释:
/**
* @brief real time map and path treans cb
*/
typedef INT_T (*RVC_TRANS_EVENT_CB)(IN CONST int onoff);
/***********************************************************
*@Function: ty_rvc_server_init
*@brief initialize media server init
*@param[in] handler The status callback for real-time data transmission,
with statuses including: start and end.
*@return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
***********************************************************/
OPERATE_RET ty_rvc_server_init(RVC_TRANS_EVENT_CB handler);
以上接口是初始化媒体服务,只有启动该接口,才能正常的音视频拉流。
/**
* @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
,默认是关闭状态。
Is this page helpful?
YesFeedback