TS流格式小白入门解读
一、背景介绍
之前我做了一个项目,要求写一个TS流解析的模块,因此看了ISOIEC 13818-1文档,外加很多人的博客来帮助理解,来了解TS流格式是个什么东西,收货颇多。因此我觉得是时候发点干货回馈社会了。
二,TS流背景介绍
在介绍具体字段,参数这些头疼,烦人的东西之前,我觉得有必要先介绍下TS流的应用背景,有了这个概念,再去深入学习,将如虎添翼。TS流最经典的应用就是我们平时生活中的数字高清电视。我们看的电视码流就是TS封装格式的码流,电视码流发送过来后,就会由我们的机顶盒进行解封装,解码,然后传给电视机进行播放。这里就有一个问题,我们看电视,有很多的频道,节目,对应码流是怎么区分的呢?(TIPS,频道和节目的关系,比如我们有中央电视台综合频道,下属CCTV-1~CCTV14这些节目)TS流引入了PAT和PMT两张表格的概念来解决这个问题。
三,PAT和PMT
TS流是以每188字节为一包,我们可以称为ts packet。这个ts packet有可能是音视频数据,也有可能是表格。举例说明,TS流的包顺序为:
PAT,PMT,DATA,DATA,,,,,,PAT,PMT,DATA,DATA,,,,,,
每隔一段时间,发送一张PAT表,紧接着发送一张PMT表,接着发送DATA(音视频)数据。
那么你可能要问了,有了这2张表格怎么区分频道,节目呢?PAT表格里面包含所有PMT表格的信息,一个PMT表格对应一个频道,比如中央电视台综合频道。而一个PMT里面包含所有节目的信息,比如CCTV1~CCTV14。在实际情况中我们是有很多频道的,所以PMT表格可不止一张,有可能是PAT,PMT,PMT,PMT,,,DATA,DATA,,,,PAT,PMT,PMT,,,DATA,DATA这样的形式。除了这个设定外,每个频道或节目都有自己的标识符(PID),这样当我们拿到一个DATA,解析出里面的PID,就知道是什么节目,并且也知道所属频道是什么了。我们看电视的时候,会收到所有节目的DATA,当我们正在看某个节目的时候,机顶盒会把这个节目的DATA单独过滤出来,其它的舍弃。
四,ts packet格式讲解
ts packet我们知道一包是188字节,它分为ts header和ts body。其中ts header里面会有个PID字段标识着当前ts body的类型。ts body有可能是表格,也有可能是DATA,表格没什么好说的,我们说下DATA的结构。DATA包
其实就是PES包,而PES包是对ES的封装,PES包分为PES头加ES。这里的ES是原始流,是指经过压缩后的H264,aac等格式的音视频数据。那么帧数据,PES包,ts packet包的对应关系是什么样的呢?一帧数据封装成一个PES包(含PES头和ES),这个PES包如果小于188字节,那么一个ts packet就可以放下了。最终ts packet一包的格式就是ts header+填充字节+PES包(PES头+ES)。填充字节的意思是如果ts header加上PES包不满188字节,这个时候肯定要填充下使其凑满188字节发送。是不是很简单?那么我们知道视频帧是很大的,往往大于188字节,这个时候怎么存放呢?还是把一个视频帧放入一个PES包。然后分别放在几个ts packet包即可。结构如下:
第一个ts packet:ts header+PES头+部分ES
第二个ts packet:ts header+部分ES
...
最后一个ts packet:ts header+填充字节+部分ES
PES头加上这些部分ES,就是一个PES包。
五,具体字段解析
具体字段请参考ISOIEC 13818-1.pdf文档,看起来应该没什么困难,这里不再累述。
传送门:http://download.csdn.net/download/yuhengyue/9978175
但是其中ts header里的payload_unit_start_indicator和pes header里的PES_packet_length这两个字段,在解析ts流的时候至关重要,新手可能比较困惑,不懂其意,我得好好讲讲。
payload_unit_start_indicator有两个值,0或1,具体的意思我们来举个例子。假设有两个视频帧,每个视频帧假设都需要3个ts packet包来存放一个PES包。那么一共有6个ts packet,它们的payload_unit_start_indicator的值为1,0,0,1,0,0,值为1代表一个帧的开始,下一个1就是新的一帧的开始了。
PES_packet_length顾名思义就是PES包的长度,但是注意,它是2个字节存储的,这意味着,最大只能表示65535,一旦视频帧很大,超过这个长度,怎么办,就把PES_packet_length置为0,这是ISO标准规定的。所以在解析的时候,不能以PES_packet_length为准,要参考payload_unit_start_indicator。
六、解析程序
下面就是发放福利了,我写了个小程序,里面实现了接收udp组播窜流,从而播放音视频的功能。当然,你也可以改写成读本地ts文件来播放。有需求的可以下载下来看看。
传送门:http://download.csdn.net/download/yuhengyue/9997767
七、pts dts pcr单位
pts:显示时间戳,单位是毫秒*90
dts:解码时间戳,单位是毫秒*90
pcr:节目时钟参考,单位是毫秒*90*300
TS流格式小白入门解读相关推荐
- hls之m3u8、ts流格式详解
HLS,Http Live Streaming 是由Apple公司定义的用于实时流传输的协议,HLS基于HTTP协议实现,传输内容包括两部分,一是M3U8描述文件,二是TS媒体文件. 1.M3U8文件 ...
- VLC视频播放器原理详细分析含TS流格式分析
vlc是一个功能强大的玩意,能做很多有意思的事情. 最简单的,从界面打开一个文件播放,也可以在命令行下使用,如 C:\Program Files\VideoLAN\VLC>vlc.exe tes ...
- 音视频基础之复合流解析:TS流格式的讲解
前言: 今天还是搞双十一活动,价格是440(不包括开发板,开发板自己买,这个我多次说了,具体可以看这篇文章:RV1126多路码流功能),周二恢复500,主要是我自己平时要上班,没有时间搞双十一活动,所 ...
- hls中ts流格式简介
1.ts简介 ts流最早应用于数字电视领域,其格式非常复杂包含的配置信息表多大十几个,视频格式主要是mpeg2.苹果公司发明的http live stream流媒体是基于ts文件的,不过他大 ...
- IO流,小白入门基础知识
IO流 IO流 什么是IO流 IO流的分类 字节流 前序 OutputStream 方法 FileOutputStream InputStream 方法 FileInputStream 构造方法 字符 ...
- (原)关于MEPG-2中的TS流数据格式学习
关于MEPG-2中的TS流数据格式学习 Author:lihaiping1603 原创:http://www.cnblogs.com/lihaiping/p/8572997.html 本文主要记录了, ...
- ffmpeg——TS流解析
RTSP(Real Time Streaming Protocol),实时流传输协议,是TCP/IP协议体系中的一个应用层协议,该协议定义了一对多应用程序如何有效地通过IP网络传送多媒体数据.RTSP ...
- MPEG PS流格式
MPEG PS流格式 1. PS包头 图1 1) Pack start code:包起始码字段,值为0x000001BA的位串,用来标志一个包的开始 2) SCR base,SCR extenstio ...
- DVB中TS流数据解析
引 言 数字生活方式是现代文明的一个重要标志.在与人们工作生活密切相关的电脑.手机和电视三大信息平台中,电脑和手机已实现了数字化和网络化,为人们带来了多姿多彩的资讯和娱乐服务,也为相关企业带来了巨额 ...
最新文章
- 读javascript高级程序设计03-函数表达式、闭包、私有变量
- NDK crash栈信息的错误定位
- 中科大 计算机网络6 Internet结构和ISP
- ASP.NET 3.5中的ListView控件和DataPager控件(一)
- arm64入栈出栈_【iOS内功】ARM黑魔法—栈桢的入栈和出栈
- 用LVM在VMware中的Linux硬盘扩容
- svn更新项目时遇到被锁住的问题
- 数据挖掘导论完整版pdf中文
- 用access建立一个试题库_access试题库_答案
- android 关闭进程 后台进程还在,为何有些安卓后台程序就是关不掉呢?
- 单片机的俄罗斯方块游戏设计
- 26367411153598389kygoq
- 40多年祖传中医的临床经验总结(收藏)
- 台式计算机无法开机原因,电脑三五个月不开机,无法点亮屏幕怎么办?
- 硬盘开盘数据恢复成功,笔记本硬盘开机无法识别到硬盘
- 富豪刑警 富豪刑警修斯库界面效果实现
- 误删的苹果电脑硬盘和数据库的数据怎么恢复
- Spring实战(第四版)
- c语言中入口参数是什么,C语言中入口参数是什么
- 计算机二级基础知识点总结,全国计算机等级考试二级公共基础知识点总结