关于AAC利用RTP传输求助 如何用M4A生成VLC可播放的数据
这两天查找了很多帖子和资料。目前我的理解是这样的:
AAC 需要利用LATM格式才能在RTP上传输。
格式是RTP头+AudioMuxElement
AudioMuxElement里面包括StreamMuxConfig + PayloadLengthInfo + PayloadMux
可是我又看到RFC 3016上说可以把StreamMuxConfig的信息写到SDP上减少冗余信息。FFmpeg的代码中只有个AU_header_size+AU_header加原数据的头。
所以我想请教
1 如果按RFC 3016上把StreamMuxConfig的信息写到SDP上。我到现在也没有找到一个完整的StreamMuxConfig的数据结构结构。只是从FAAD里扒出来
typedef struct {
int inited;
int version, versionA;
int framelen_type;
int useSameStreamMux;
int allStreamsSameTimeFraming;
int numSubFrames;
int numPrograms;
int numLayers;
int otherDataPresent;
uint32_t otherDataLenBits;
uint32_t frameLength;
uint8_t ASC[MAX_ASC_BYTES];
uint32_t ASCbits;
} latm_header;
如果把可以写到SDP的信息从这个结构中剔除,那这个结构怎么拆包呢,数据位都不对了啊?
2 PayloadLengthInfo这个到底是多大?是根据ffmpeg里的au_header + au_header_size 一共4个字节吗?
这里的数值是根据什么计算得来的?是我从M4A里找到的RAW Sample的大小吗(单层+单节目+单帧)?
[解决办法]
就是RTP 头12字节 加上4个字节的au_header + au_header_size
[解决办法]
这个于时间戳没有关系,说明VLC需要特定的SDP信息,可能是由于SDP中的某些参数设置部队造成的