传送流(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百科等 ...
随机推荐
- Hibernate的工作流程以及三种状态(面试题)
Hibernate的工作流程以及三种状态 部分转载自:http://www.cnblogs.com/fifiyong/p/6390699.html Hibernate的工作流程: 1. 读取并解析配置 ...
- JavaScript函数体系
第4章 JavaScript函数 1. 函数基本介绍 ① 为什么需要函数 函数最大的好处就是将零散的代码封装到了一起,当我们要再次使用该功能的时候,不需要再重新书写代码,只需要调用封装好的函数就可以 ...
- 服务器端控件的"客户端"
控件的服务端ID和客户端ID 比如一个ID为TextBox1的服务器端控件,在客户端访问该控件的DOM元素时 错误: var txtbox=document.getElementByID(" ...
- linux解压与参数介绍
linux下 各种解压文件使用方法:https://www.jianshu.com/p/ca41f32420d6 解压参数详解:http://www.cnblogs.com/jyaray/archiv ...
- hibernate课程 初探单表映射1-6 hibernate项目建立以及导入jar包
hibernate 项目建立 1 new ==>java project hibernate 导入jar包 1 windows==>prerence==>java ==>bui ...
- 从零开始的全栈工程师——js篇2.16
js操作css样式 div.style.width=“200px” 在div标签内我们添加了一个style属性 并设定了width值 这种写法会给标签带来了大量的style属性 跟实际项目是不符的 我 ...
- 内置函数isNaN()
NaN(not a number)的产生:算术运算返回一个未定义的或无法表示的值 1.NaN并不一定用于表示某些值超出表示范围的情况.将某些不能强制转换为数值的非数值转换为数值的时候,也会得到NaN. ...
- SpringBoot集成mybatis和mybatis generator
利用搭建的基本的spring boot框架,集成 mybatis + generator 1.设置 maven 的相关配置: File - setting - maven 设置 Maven home ...
- javascript设计模式之外观模式
/* * 外观模式 * 外观模式的主要意义在于简化类的接口,使其易于调用 */ // 你常常在不经意中使用了外观模式,尤其类库中更多(处理兼容性问题) var addEvent = function ...
- ubuntu双屏调整分辨率
查看屏幕硬件指标 # xrandr Screen 0: minimum 8 x 8, current 2390 x 768, maximum 32767 x 32767 LVDS1 connected ...