opencore 2way 主要是用于视频电话应用,它的实现主要是要完成三个部分:RIL,2way 的适配和OpenCore 2way。
RIL模块负责与CP(基带处理器)进行数据交互。2way 的适配部分主要是向上层提供与2way的交互。而Phone应用和2way都会和RIL建立通信,Phone会向RIL发送一些AT指令,2way和RIL交互的是2way的PVCommsIONode,发送和接收数据这个Node往上传会到TSC_324m Node,该Node负责3G_324M协议栈(H223,H245)的实现。通过TSC_324m Node将音视频和控制数据分离后分别送入音视频解码的Node(进来的数据)进行解码或者将音视频和控制数据编码Node后送入TSC_324m Node(出去的数据) H223适配层该层数据有三种类型:
AL1: 用于传输数据或者控制信息。AL1 从上层接收用户数据或控制信息(由 H.245 协议描述),直接传递给复用层,不提供任何错误控制,所有可能的错误保护
都是由 AL1 的上层应用来提供。
AL2: 用于传输数字音频。AL2 从 3GPP-AMR 编码器接收编码后的音频数据 AL-SDU,加入 1 字节的循环冗余检验(CRC),并且选择性加入 1 字节的序列号,
转换成 MUX-SDU传递给复用层。
AL3: 用于传输视频。AL3 从 H.263 编码器接收编码后的视频数据,加入 2 字节的循环冗余检验(CRC),可选择性地加入 1 或者 2 字节的控制字节,转换成
MUX-SDU 传递给复用层。
复用层的作用是将适配层传递来的控制数据,音频数据和视频数据复用成单一比特流然后送入PVCommsIONode Node传输给RIL
当然解码之前的数据分为音频数据,视频数据和控制数据音频数据是由PvmfMediaInputNode node从AudioRecord获取音频输入设备的原始数据
视频数据是通过PvmfMediaInputNode node从Camera预览的回调中获取原始的yuv420sp 数据而控制数据是直接从应用层传输下来到2way适配
直接传到H324协议层这样就形成了以下的几条DataPath
PhoneA PhoneB
CPV2WayEncDataChannelDatapath(audio) CPV2WayDecDataChannelDatapath(audio)
CPV2WayMuxDatapath
CPV2WayEncDataChannelDatapath(video) CPV2WayDecDataChannelDatapath(video)
CPV2WayMuxDatapath 负责管理 TSC_324m 和 PVCommsIONode node
CPV2WayEncDataChannelDatapath(audio)负责管理 PvmfMediaInputNode(audio音频输出设备出来),PVMFOMXEncNode(audio数据编码), TSC_324m
CPV2WayEncDataChannelDatapath(video) 负责管理 PvmfMediaInputNode(camera设备出来),PVMFOMXEncNode(video数据编码), TSC_324m
CPV2WayDecDataChannelDatapath(audio) 负责管理 TSC_324m PVMFOMXAudioDecNode(audio数据解码) PVMediaOutputNode(audio音频输入设备进去)
CPV2WayDecDataChannelDatapath(video) 负责管理 TSC_324m PVMFVideoParserNode PVMFOMXVideoDecNode(video数据解码) PVMediaOutputNode(写入Surface output)
每条datapath管理这一条数据的流向,它所管理的每一个node必须保持状态上的一直性,node和node之间的数据是通过port来传输的
文字暂时做以上的简单描述,我会附上图片一张,看起来会更加生动。