最近由于项目平台需求,要将H264 NALU封装为PS再用RTP发送,PS封装按照ISO DEC-13818-1标准。一个PS包包含PS Header, PES Header, PS system header, PS system map等。

针对H264做如下PS封装:

1、每个IDR NALU前一般都会包含SPS、PPS等NALU,因此将SPS、PPS、IDR 的NALU封装为一个PS包,包括ps头,然后加上PS system header,PS system map,PES header+h264 raw data。所以一个IDR NALU PS包由外到内顺序是:PS header | PS system header | PS system Map | PES header |  h264 raw data。

2、对于其它非关键帧的PS包,就简单多了,直接加上PS头和PES头就可以了。顺序为:PS header | PES header | h264 raw data。

还有就是用rtp协议发送时,如果一个PS包大于MTU时,会有分包问题。只需要简单的分包发送就可以了,但是同一个PS包的时间戳是相同的,需要注意。

以上是对只有视频video的情况,如果要把音频Audio也打包进PS封装,也可以。当有音频数据时,将数据加上PES header 放到视频PES后就可以了。顺序如下:

PS包=PS头|PES(video)|PES(audio),再用RTP封装发送就可以了。

以上是H264 PS封装的大致流程。PS一些头的定义,在我的下载中,有需要的可以参考。

或者,加QQ群(219128816)一起探讨流媒体方面的开发。

H264 NALU 使用PS封装 RTP发送的更多相关文章

  1. 音视频处理之PS封装的介绍与使用20180928

    1.PS封装介绍MPEG2-PS是一种多路复用数字音频,视频等的封装容器.PS是Program Stream(程序流或节目流)的简称.程序流将一个或多个分组但有共同的时间基准的基本数据流(PES)合并 ...

  2. 视频流PS,PS封装H264

    出处: ISOIEC 13818-1 PS流: PS流由PSGOP组成,每个PSGOP是由I帧起始的多帧集合,每个GOP之间没有相互依赖信息,可以剪切拼接. | PSGOP0 | PSGOP1 | P ...

  3. H264码流结构分析和rtp打包结构详解

    网络抽象层单元类型 (NALU): NALU头由一个字节组成,它的语法如下: +---------------+      |0|1|2|3|4|5|6|7|      +-+-+-+-+-+-+-+ ...

  4. H265(HEVC) nal 单元头介绍及rtp发送中的fu分组发送详解

    首先来介绍下h265(HEVC)nal单元头,与h264的nal层相比,h265的nal unit header有两个字节构成,如下图所示: 从图中可以看出hHEVC的nal包结构与h264有明显的不 ...

  5. rtp发送 h265

    自己写的select 做TCP服务端,把tcp数据按照RTSP协议解析,掉函数直接获取一帧音频,一帧视频这种,分包成RTP发送 用ffmpeg

  6. ffmpeg摄像头采集h264编码RTP发送

    一. 相关API说明 1. av_register_all 2. avformat_network_init 不管是流媒体发送还是流媒体接收, 需要先执行该函数. 3. avformat_alloc_ ...

  7. send/receive h264/aac file/data by rtp/rtsp over udp/tcp

    一.安装一些必要的调试工具 1.vlc安装sudo apt-get install vlcsudo apt-get install vlc-nox 2.ffmpeg安装,带ffplay,ffplay依 ...

  8. 多媒体开发之---h264 NALU 语法结构

    补充笔记: 关于VCL:VCL层是指视频编码层,VCL NAL 单元是指那些nal_unit_type 值等于 1 到 5(包括 1 和 5)的 NAL 单元,这些单元都包含了视频数据.所有其他的 N ...

  9. 简单RTP发送类c++实现

    我之前编译了jrtplib 3.9.1,并且在项目中使用,结果发现在用这个库时,程序体积有增加了300多K,感觉实在是有点笨重,我无法就是用来发送rtp包而已.想想还是自己重新实现一个简单的类用用拉倒 ...

随机推荐

  1. <button>标签也能提交表单问题

    如何避免<button>标签也能提交表单的问题: 只需加上一个属性:type='button'即可:如<button type="button"> < ...

  2. 安装Hadoop 1.1.2 (三 安装配置Hadoop)

    1 tar -zxvf hadoop-1.1.2.tar.gz 2 在hadoop/conf目录 (1) 编辑 hadoop-env.sh export JAVA_HOME=/usr/java/jdk ...

  3. 自己定义Application的未捕获异常处理

    近期由于工作原因.进行Android应用开发时发现应用在出现类似空指针等异常时,抛出未被捕获的异常.Android系统有默认的未捕获异常处理器,默认行为是结束对应的线程,但并不会直接退出程序,并且在应 ...

  4. iPhone缓存网络数据

    本文转载至 http://blog.csdn.net/wwang196988/article/details/7542918   在iPhone应用程序中,我们经常要用去网络下载一些文件,比如xml, ...

  5. ios推送服务,php服务端

    本文转载至http://my.oschina.net/AStar/blog/176531   生成证书 证书生成参考:https://parse.com/tutorials/ios-push-noti ...

  6. python 基础 9.6 设计表结构

    一. 设计表结构    在操作设计数据库之前,我们先要设计数据库表结构,我们就来分析分析经典的学生,课程,成绩,老师这几者他们之间的关系,我们先来分析各个主体他们直接有什么属性,并确定表结构,在实际开 ...

  7. Collect More Jewels(hdu1044)(BFS+DFS)

    Collect More Jewels Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  8. 九度OJ 1191:矩阵最大值 (矩阵计算)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2361 解决:1179 题目描述: 编写一个程序输入一个mXn的矩阵存储并输出,并且求出每行的最大值和每行的总和. 要求把每行总和放入每行最 ...

  9. matlab 调用 python

    众所周知,Python凭借其众多的第三方模块,近年来被数据分析.机器学习.深度学习等爱好者所喜爱,最主要的是Python还是开源的.另一方面,MATLAB因其在仿真方面的独特优势也被众多人追捧.而在国 ...

  10. 读paper:Deep Convolutional Neural Network using Triplets of Faces, Deep Ensemble, andScore-level Fusion for Face Recognition

    今天给大家带来一篇来自CVPR 2017关于人脸识别的文章. 文章题目:Deep Convolutional Neural Network using Triplets of Faces, Deep ...