杰理之AI_RX node 流程(以立体声通话翻译为例)【篇】
AI_RX节点的代码在ai_rx_file.c里面负责接收opus数据传给后级节点解码播放。通话上下行的opus数据在APP端是分开下发的。对应AI_RX_ESCO_DOWN、AI_RX_ESCO_UP两条音频流。如下是从rcsp协议接收app的数据在推给AI_RX解码的流程● case RCSP_TRANSLATOR_OP_SEND_AUDIO_DATA // 翻译数据rcsp 数据接收case● _translator_op_receive_audio_data● ai_player_put_frame // 推数据给音频流的AI_RX节点不同SDK版本接口有差异● list_add_tail(frame-entry, play_ch-head); // 往链表里插数据● os_mutex_pend(tlr_hdl.rx_ch[ch].mutex // 阻塞线程原子处理在translator_recv_ch_put_frame接口往AI_RX节点发数据时会post释放互斥锁。● ai_rx_get_frame // 接收数据帧传、申请内存、通过*pframe传给后级节点● ai_player_get_frame // 获取数据帧接口● frame list_first_entry(play_ch-head, struct ai_player_audio_frame, entry); // 遍历链表获取freame帧数据