传送流(TS)的基础知识
数字电视的TS包和TS流的组成和功能
综合考虑几下几个因素:
(1)包的长度不能过短,否则包头开销所占比例过大,
导致传输效率下降
(2)包的长度不能过长,否则在丢失同步的情况下恢复同步的
周期过长,导致较多的信息丢失
(3)其他环境相适配,如纠错编码,宽带网等。
TS包按功能分为链接头,适配域,净荷。
链接头的长度固定,4个字节
适配域的长度从0字节到184字节可变,可以没有,也可以扩展到整个TS包
净荷数据的长度从0字节到184字节可变。
整个TS流是由许多长度为188字节的TS包周期性的排列而形成的。
ts包头包含4个字节的内容,主要负责TS包的同步、各种ES流的表示、TS包传输差错的检测和条件接收等功能。
(1)包同步(syn_bate)
是包中的第一个字节,TS包以固定的8bit的同步字节开始,所有的TS传送包,同步字都是唯一的OX47,用于建立发送端和接收端包的同步。
(2)包差错指示(transport_error_indicator)
用于从解码器向分接器指示传输误码。若这个比特被设置,表示此TS包中所携带的净荷信息有错误,无法使用。
(3)净荷单元起始指示(payload_uint_start_indicator)
标志PES包头以及包含节目特定信息的表(PMT,PAT)的头是否出现在该包中,在失步后的重新同步中起着重要的作用。
(4)传送优先级(transport_priority)
用于表示包中含有重要数据,应予以优先传送。
(6)加扰控制(transport_scrambling_control)
传送信息通过加入扰码来加密,各个基本码流可以独立进行加扰。加扰控制字段说明TS包中的净荷数据是否加扰。如果加扰,标志出解扰的密匙。
(5)包标识符PID(pid)
PID是识别TS包的重要参数,用来识别TS包所承载的数据。在TS码流生成时,每一类业务(视频,音频,数据)的基本码流均被赋予一个不同的识别号PID,解码器借助于PID判断某一个TS包属于哪一类业务的基本码流。
(7)调整字段控制(adaptation_field_control:适配域控制)
标志TS包是否有调整字段存在。
调整字段值 | 描述 |
00 | 为ISO/IBC未来使用保留 |
01 | 没有调整字段,仅含有184B长度的有效字段 |
10 | 没有有效净荷,仅含183B长度的调整字段 |
11 | 0-182B的调整字段后为有效净荷 |
(8)循环计数器(continuty_counter)
用于对传输误码进行检测。在发送端对所有的包都做0-15的循环计数,在接收终端,如发现循环计数器的值有中断,表明数据在传输中有丢失。
调整字段:是一个可变长度的域,它在TS包中是否存在,由适配域控制标识决定。
功能:1、同步和定时
2、随机进入压缩的码流
3、当地节目插入
节目时钟基准(PCR):在数字压缩编码系统中,由于每个图像的数据是不同的(图像的编码方法和复杂程度不同),这样不可能从图像数据的起始部分直接获取定时信息。所以需要每隔一定的传送时间,在TS包适配域中传送系统时钟27MHz的一个采样值给接收机,作为解码器的时钟基准信号,称为节目时钟基准(PCR)。PCR通常每隔100ms至少传送一次。
帧的编码压缩:
在视频码流中存在I帧,B帧,P帧三种编码帧类型。
I 帧采用帧内压缩编码,B帧采用帧内以及帧间压缩编码。
只有 I 帧编码数据可以独立进行解码;P帧为前向预测帧,是以前一个I帧或P帧为预测进行编码的。在I帧和P帧中间可以插入若干个B帧,B帧是从相邻最近的I帧或者P帧进行双向预测进行编码的。所以,形成P帧时,参考帧帧存只要求存储一帧图像,而形成B帧时,参考帧帧存则需要存储前后两帧图像。
在节目调谐或节目更换需要发生节目拼接时需要随时进入音频或视频,随机进入应该是I帧(I帧是独立压缩编码的),在I帧前面的视频序列的头部应该有一个随机进入点。
随机进入指标就是表明随机进入点的位置。
在电视广播中,常需要进行本地节目和广告的插入,在MPEG-2传送系统中,使用TS包调整字段中的一些标志来支持。插入节目的PCR值与插入前节目的PCR值是不同的,因此通知解码器,要尽快与插入节目建立同步关系。
节目插入点必然是随机进入点,但并不是所有的随机进入点都适合作为节目插入点。
MPEG-2解码器接收到MPEG-2 TS流时,首先检测包结构,在TS流中查找同步字节:
总是OX47,总位于TS包开始位置,固定间隔为188字节。
同时满足这两个条件,可以确定同步。
如果出现一个字节为47hex(OX47),解码器将检测这个字节前后n倍188字节的位置是否也是同步字节。
如果是,则当前字节为同步字节;
否则,当前字节只是码流中偶尔出现的47hex,不是同步字节。
接收端收到5个TS包之后开始同步。
丢包3个之后解码器即失步。
TS包中净荷所承载的信息包括以下3种:
1、视频/音频的PES包以及辅助数据
2、描述单路节目复用信息的节目映射表(PMT)
3、描述单路节目复用信息的节目关联表(PAT)
系统复用时,对视频和音频的ES流进行打包,形成视频和音频的PES流,辅助数据不需要打成PES包.
(1)系统复用时,对视频和音频的ES流进行打包,形成视频和音频的PES流,辅助数据不需要打成PES包.
(2)视频和音频的PES包以一帧编码图像为单位,音频PES包恒定长度,视频PES包长度可变。
(3)PES包的长度通常都是远大于TS包的长度,一个PES包必须由整数个TS包来传送,TS包没装满的填充字节。
(4)TS包长度固定,188字节,有效净荷184字节。
PSI/SI
PSI(节目专用信息):节目关联表(PAT)、节目映射表(PMT)、条件访问表(CAT)
SI(节目信息):网络信息表(NIT)、业务描述表(SDT)、节目段信息表(EIT)、时间与日期表(TDT)、
PSI分段
根据PSI分段映射可以知道,一个PSI分段可以装在一个TS包里面(分段较小)。也可以装在连续的两个或多个TS包里面(分段大于184,一个TS包容纳不下)。并且,一个TS包的有效负载也可以包含不止一个PSI分段的信息。
以PAT为例:
PAT的section_length可以作为接收pat section的判断条件,当接收到的TS包的payload_unit_start_indicator为1时,表明这个TS包包含了PAT头信息,从这个包里面解析出section_length和continuity_counter,然后继续收集TS包,并判断continuity_counter的连续性,不断读出TS包中的静载荷(也就是PAT数据),用section_length作为收集TS包结束条件。
payload_unit_start_indicator = 1的包,表明是PAT开始的TS包,然后依次接收后面的payload_unit_start_indicator = 0的包,提取出净荷,直到提取数据的长度满足section_length
从TS流获取PAT表并解析
PMT
如果该TS包所在的频点有多个频道(节目),那么就可以从该TS包的PAT表中解析出多个PMT_ID(每个PMT_ID对应一张PMT表)。从而在TS数据流中获取该频点所有的PMT表(所有节目)。
PMT表中有以下信息:
- 该PMT表对应频道(节目)中所有视频数据包的pid。
- 该PMT表对应频道(节目)中所有音频数据包的pid。
- 该PMT表对应频道(节目)中的其他数据包(比如:中文/英文字幕)的pid。
在机顶盒处理了所有的PMT后就知道了该频点有多少个频道,在数据库中保存所有频道的信息,当用户选择了某个频道后,机顶盒查询数据库后就可以定位到该频道的信息然后进行播放。
SDT
由于每个频道由一个pid来标志,同时这些pid是一串数字不便于记忆,所以 DVB设计了一张表(SDT)用于保存频道名称到频道pid的映射。用户就可以通过选择频道名称来选择频道对应的pid。
SDT包含提供的信息:
(1) 该节目是否在播放中
(2) 该节目是否被加密
(3) 该节目的名称
原文博客:http://www.cnblogs.com/shakin/p/4287331.html
传送流(TS)的基础知识的更多相关文章
- 流API--流的基础知识
流接口--BaseStream接口 流API定义了几个流接口,这些接口包含在java.util.stream中.BaseStream是基础接口,它定义了所有流都可以使用的基本功能.我们来看一下源码: ...
- Redis基础知识补充及持久化、备份介绍(二)--技术流ken
Redis知识补充 在上一篇博客<Redis基础认识及常用命令使用(一)--技术流ken>中已经介绍了redis的一些基础知识,以及常用命令的使用,本篇博客将补充一些基础知识以及redis ...
- C# 基础知识系列- 14 IO篇 流的使用
0. 前言 继续之前的C# IO流,在前几篇小短片中我们大概看了下C# 的基础IO也对文件.目录和路径的操作有了一定的了解.这一篇开始,给大家演示一下流的各种操作.以文件流为例,一起来看看如何操作吧. ...
- TCP/IP协议(一)网络基础知识
参考书籍为<图解tcp/ip>-第五版.这篇随笔,主要内容还是TCP/IP所必备的基础知识,包括计算机与网络发展的历史及标准化过程(简述).OSI参考模型.网络概念的本质.网络构建的设备等 ...
- Oracle数据库基础知识
oracle数据库plsql developer 目录(?)[-] 一 SQL基础知识 创建删除数据库 创建删除修改表 添加修改删除列 oracle cascade用法 添加删除约束主键外 ...
- IOS Socket 01-网络协议基础知识
1. 网络参考模型 OSI参考模型 TCP/IP参考模型 2. 七层简述 1)物理层:主要定义物理设备标准,如网线的接 ...
- Azure 媒体服务支持 DASH 实时传送流
Kilroy Hughes Azure媒体服务数字媒体架构师 本文重点介绍 Azure 媒体服务支持的 DASH 实时传送流功能,同时阐述如何利用这些功能将实时和点播自适应流传送至 Web 浏览器 ...
- OSI七层模型基础知识及各层常见应用
OSI Open Source Initiative(简称OSI,有译作开放源代码促进会.开放原始码组织)是一个旨在推动开源软件发展的非盈利组织.OSI参考模型(OSI/RM)的全称是开放系统互 ...
- 【RL-TCPnet网络教程】第2章 嵌入式网络协议栈基础知识
第2章 嵌入式网络协议栈基础知识 本章教程为大家介绍嵌入式网络协议栈基础知识,本章先让大家有一个全面的认识,后面章节中会为大家逐一讲解用到的协议. 基础知识整理自百度百科,wiki百科等 ...
随机推荐
- linux下mysql-5.5.27.tar.gz源程序包安装实例
研究了好几天,终于把mysql装上了,现在来做下小结. 系统环境:fedora8 虚拟机. 1.检查安装使用的编译工具gcc是否存在,如果不存在则要下载安装 # gcc -v 2.卸载低版本的mysq ...
- linux下的rpm软件包,rpm源码包和tar安装包
Linux下的软件包是一个独立的程序,用于Linux系统的包管理.在Linux下,软件包的安装方式很多样,不如Windows下的软件安装简单,Windows下基本上就是傻瓜式下一步下一步,而Linux ...
- 使用Docx.dll插入图片在Centos 7 上报错:system.DllNotFound:libgdiplus.so
熬了N天,终于把WORD 文档打开替换.插入图片完好,部署,本机测试没有问题 可是一放到服务器(Centos 7) 就提示下面的错误: 度娘一下: https://www.cnblogs.com/xi ...
- 获取hudson持续构建编译结果的一种方法
作者:朱金灿 来源:http://blog.csdn.net/clever101 很多时候使用hudson结合VisualStudio进行持续构建后需要获取持续构建的编译结果,通过编译结果来知道哪些项 ...
- I-129表
http://www.uscis.gov/i-129 移民局使用的非移民性质的工作身份申请表(I-129)表格将于下月底正式作废,4月30日之后,公民和移民服务局只接受新的I-129表格. 据了解,非 ...
- OpenSSL命令---s_client
http://blog.csdn.net/as3luyuan123/article/details/16812071 用途: s_client为一个SSL/TLS客户端程序,与s_server对应,它 ...
- 【硬盘整理】使用UltimateDefrag将常用文件放置在磁盘最外圈
使用方法未知.软件截图如下: 官方网站(英文):http://www.disktrix.com/ 汉化破解版V3.0下载地址:http://page2.dfpan.com/fs/7com9monca3 ...
- JQuery笔录
1.jQuery 的 hide() 函数,隐藏了 HTML 文档中所有的 <p> 元素.<script type="text/javascript">$(d ...
- IOS autosizing(设置控件的固定位置大小)
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typica ...
- World Wind Java开发之九——阶段小结(转)
http://blog.csdn.net/giser_whu/article/details/42785875 将近一个月没有更新了,一是因为项目的事情,二是期末考试复习,三是玩啦.上一篇博客搭建起了 ...