一、背景介绍

之前我做了一个项目,要求写一个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流格式小白入门解读相关推荐

  1. hls之m3u8、ts流格式详解

    HLS,Http Live Streaming 是由Apple公司定义的用于实时流传输的协议,HLS基于HTTP协议实现,传输内容包括两部分,一是M3U8描述文件,二是TS媒体文件. 1.M3U8文件 ...

  2. VLC视频播放器原理详细分析含TS流格式分析

    vlc是一个功能强大的玩意,能做很多有意思的事情. 最简单的,从界面打开一个文件播放,也可以在命令行下使用,如 C:\Program Files\VideoLAN\VLC>vlc.exe tes ...

  3. 音视频基础之复合流解析:TS流格式的讲解

    前言: 今天还是搞双十一活动,价格是440(不包括开发板,开发板自己买,这个我多次说了,具体可以看这篇文章:RV1126多路码流功能),周二恢复500,主要是我自己平时要上班,没有时间搞双十一活动,所 ...

  4. hls中ts流格式简介

    1.ts简介      ts流最早应用于数字电视领域,其格式非常复杂包含的配置信息表多大十几个,视频格式主要是mpeg2.苹果公司发明的http live stream流媒体是基于ts文件的,不过他大 ...

  5. IO流,小白入门基础知识

    IO流 IO流 什么是IO流 IO流的分类 字节流 前序 OutputStream 方法 FileOutputStream InputStream 方法 FileInputStream 构造方法 字符 ...

  6. (原)关于MEPG-2中的TS流数据格式学习

    关于MEPG-2中的TS流数据格式学习 Author:lihaiping1603 原创:http://www.cnblogs.com/lihaiping/p/8572997.html 本文主要记录了, ...

  7. ffmpeg——TS流解析

    RTSP(Real Time Streaming Protocol),实时流传输协议,是TCP/IP协议体系中的一个应用层协议,该协议定义了一对多应用程序如何有效地通过IP网络传送多媒体数据.RTSP ...

  8. MPEG PS流格式

    MPEG PS流格式 1. PS包头 图1 1) Pack start code:包起始码字段,值为0x000001BA的位串,用来标志一个包的开始 2) SCR base,SCR extenstio ...

  9. DVB中TS流数据解析

    引  言 数字生活方式是现代文明的一个重要标志.在与人们工作生活密切相关的电脑.手机和电视三大信息平台中,电脑和手机已实现了数字化和网络化,为人们带来了多姿多彩的资讯和娱乐服务,也为相关企业带来了巨额 ...

最新文章

  1. 读javascript高级程序设计03-函数表达式、闭包、私有变量
  2. NDK crash栈信息的错误定位
  3. 中科大 计算机网络6 Internet结构和ISP
  4. ASP.NET 3.5中的ListView控件和DataPager控件(一)
  5. arm64入栈出栈_【iOS内功】ARM黑魔法—栈桢的入栈和出栈
  6. 用LVM在VMware中的Linux硬盘扩容
  7. svn更新项目时遇到被锁住的问题
  8. 数据挖掘导论完整版pdf中文
  9. 用access建立一个试题库_access试题库_答案
  10. android 关闭进程 后台进程还在,为何有些安卓后台程序就是关不掉呢?
  11. 单片机的俄罗斯方块游戏设计
  12. 26367411153598389kygoq
  13. 40多年祖传中医的临床经验总结(收藏)
  14. 台式计算机无法开机原因,电脑三五个月不开机,无法点亮屏幕怎么办?
  15. 硬盘开盘数据恢复成功,笔记本硬盘开机无法识别到硬盘
  16. 富豪刑警 富豪刑警修斯库界面效果实现
  17. 误删的苹果电脑硬盘和数据库的数据怎么恢复
  18. Spring实战(第四版)
  19. c语言中入口参数是什么,C语言中入口参数是什么
  20. 计算机二级基础知识点总结,全国计算机等级考试二级公共基础知识点总结

热门文章

  1. eclipse oxygen java7,Eclipse Oxygen:M7重点在于可用性
  2. 精修图片不求人,百度经验
  3. autohotkey 热键_键盘快捷方式(热键),用于将鼠标移至多显示器配置中的显示器-AutoHotkey脚本
  4. 构造函数初始化列表初始化成员变量的顺序
  5. Java使劲浪费内存-List查询一千万条数据重复次数
  6. Oracle的32位ODBC驱动
  7. 九针串口接线问题, 232, 485
  8. 超实用的自动化测试平台推荐
  9. 数据结构与算法(七)—— 散列表结构及其实现和应用
  10. Ubuntu 挂载U盘