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

最近由于项目平台需求,要将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…
1.PS封装介绍MPEG2-PS是一种多路复用数字音频,视频等的封装容器.PS是Program Stream(程序流或节目流)的简称.程序流将一个或多个分组但有共同的时间基准的基本数据流(PES)合并成一个整体流.它是为可靠稳定的储存媒介如光盘而设计的.一般来说,采用MPEG2-HD格式的高清数码摄像机一般以"MPEG2-PS"来保存文件:而采用AVCHD格式的高清摄像机则通常以".M2TS"或".MTS"保存文件. 此处介绍的PS封装方式需要支…
出处: ISOIEC 13818-1 PS流: PS流由PSGOP组成,每个PSGOP是由I帧起始的多帧集合,每个GOP之间没有相互依赖信息,可以剪切拼接. | PSGOP0 | PSGOP1 | PSGOP2 | PSGOP3 | PSGOP4 | ...... | PSGOP: PSGOP由一个或多个PS包组成,一个PS包包含一个PSH(PS Header)和若干个PES(Packetized Elementary Stream,ps流数据的基本单位)包,PSGOP的第一个PS包应该在包头P…
网络抽象层单元类型 (NALU): NALU头由一个字节组成,它的语法如下: +---------------+      |0|1|2|3|4|5|6|7|      +-+-+-+-+-+-+-+-+      |F|NRI|  Type   |      +---------------+ F: 1个比特.  forbidden_zero_bit. 在 H.264 规范中规定了这一位必须为 0. NRI: 2个比特.  nal_ref_idc. 取00~11,似乎指示这个NALU的重要性,…
首先来介绍下h265(HEVC)nal单元头,与h264的nal层相比,h265的nal unit header有两个字节构成,如下图所示: 从图中可以看出hHEVC的nal包结构与h264有明显的不同,hevc加入了nal所在的时间层的ID,取去除了nal_ref_idc,此信息合并到了naltype中,通常情况下F为0,layerid为0,TID为1. nal单元的类型有如下几种: enum NalUnitType { NAL_UNIT_CODED_SLICE_TRAIL_N = 0,   …
自己写的select 做TCP服务端,把tcp数据按照RTSP协议解析,掉函数直接获取一帧音频,一帧视频这种,分包成RTP发送 用ffmpeg…
一. 相关API说明 1. av_register_all 2. avformat_network_init 不管是流媒体发送还是流媒体接收, 需要先执行该函数. 3. avformat_alloc_context 初始化一个AVFormatContext. 4. avcodec_alloc_frame 初始化1个AVFrame. **需要注意的是,新版的FFmpeg使用av_frame_alloc来初始化一个AVFrame.** 5. av_guess_format 返回一个已经注册的最合适的…
一.安装一些必要的调试工具 1.vlc安装sudo apt-get install vlcsudo apt-get install vlc-nox 2.ffmpeg安装,带ffplay,ffplay依赖sdl库 源码都是三步安装./configure && make && sudo make install 以下安装顺序不能乱 yasm 1.2.0.tar.gz sudo apt-get install libx11-devsudo apt-get install xorg…
补充笔记: 关于VCL:VCL层是指视频编码层,VCL NAL 单元是指那些nal_unit_type 值等于 1 到 5(包括 1 和 5)的 NAL 单元,这些单元都包含了视频数据.所有其他的 NAL 单元都称作非 VCL NAL 单元,PPS和SPS都是非VCLNAL单元.关于字节流NAL单元的格式:(起始码中0的长度)除了流开头的字节流NAL单元,大多字节流NAL单元的开头没有leading_zero_8bits (一个字节的0); nal_unit_type等于7(SPS)或8(PPS…
我之前编译了jrtplib 3.9.1,并且在项目中使用,结果发现在用这个库时,程序体积有增加了300多K,感觉实在是有点笨重,我无法就是用来发送rtp包而已.想想还是自己重新实现一个简单的类用用拉倒了,所以有了下面的代码. 头文件: /*! @brief 简单rtp库 @file easy_rtp.h */ #ifndef _EASY_RTP_H #define _EASY_RTP_H #include <string> #include <stdint.h> #ifdef _W…