本程序实现通过UDP接受原始AAC数据,并且打包后通过UDP发送示例,里面主要介绍了AAC打包PS的关键流程,希望给到小伙伴们启示。
#include <netinet/in.h>
#include <sys/socket.h>
#include <unistd.h>
// 计算校验和
unsigned short checksum(const unsigned char *buf, int len) {
unsigned int sum = 0;
while (len > 1) {
sum += (*buf << 8) | *(buf + 1);
len -= 2;
buf += 2;
}
if (len == 1) {
sum += *buf << 8;
}
while (sum >> 16) {
sum = (sum & 0xFFFF) + (sum >> 16);
}
return ~sum;
}
// 将AAC数据打包成PS流
int PackAAC(const unsigned char *aac_data, int aac_len, unsigned char *ps_buffer) {
// 用于存放PES数据的buffer
unsigned char pes_buffer[65536];
// 初始化PES头部信息