h264和aac数据打包ps包之二

        首先说一下整体思路:

        1.将h264和AAC数据分别编码NAL单元和ADTS帧

        2.构建PES包,依次将每个NAL单元和ADTS帧添加到对应的PES包中,并加入头部信息

        3.构建PS包,将所有的PES包按照一定的规则排序并加入头部信息。

        分开实现H264的PES打包,AAC的PES打包,最终是整个PS包的打包,数据调用直接一步

int PackPS(const unsigned char *h264_data, int h264_len, const unsigned char *aac_data, int aac_len, unsigned char *ps_data) 

        填入h264数据和aac数据直接生成ps封包数据,之后再用于rtp over udp还是其他方式传输,读者可以自行填充。

        上代码!!!!!!!!!!!!!

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

#define H264_HEADER_LENGTH 4
#define AAC_HEADER_LENGTH 4

using namespace std;

// 计算校验和
unsigned short checksum(const unsigned char *buf, int size) {
    unsigned int cksum = 0;
    for (int i = 0; i < size; i += 2) {
        cksum += (buf[i] << 8) | buf[i+1];
    }
    while ((cksum >> 16) != 0) {
        cksum = (cksum & 0xffff) + (cksum >> 16);
    }
    return (~cksum) & 0xffff;
}

// 打包H264数据
int PackH264(const unsigned char *h264_data, int h264_len, unsigned char *ps_buffer) {
    // 初始化PS头部信息
    PSHeader ps_header = {0};
    ps_header.sync_byte = 0x47;
    ps_header.id = 0x40;
    ps_header.PES_start_flag = 1;
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_1015787417

Show you code

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值