数字电视的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表中有以下信息:

  1. 该PMT表对应频道(节目)中所有视频数据包的pid。
  2. 该PMT表对应频道(节目)中所有音频数据包的pid。
  3. 该PMT表对应频道(节目)中的其他数据包(比如:中文/英文字幕)的pid。

  在机顶盒处理了所有的PMT后就知道了该频点有多少个频道,在数据库中保存所有频道的信息,当用户选择了某个频道后,机顶盒查询数据库后就可以定位到该频道的信息然后进行播放。

  SDT 

  由于每个频道由一个pid来标志,同时这些pid是一串数字不便于记忆,所以  DVB设计了一张表(SDT)用于保存频道名称到频道pid的映射。用户就可以通过选择频道名称来选择频道对应的pid。

  SDT包含提供的信息:

  (1) 该节目是否在播放中

  (2) 该节目是否被加密

  (3) 该节目的名称

原文博客:http://www.cnblogs.com/shakin/p/4287331.html

传送流(TS)的基础知识的更多相关文章

  1. 流API--流的基础知识

    流接口--BaseStream接口 流API定义了几个流接口,这些接口包含在java.util.stream中.BaseStream是基础接口,它定义了所有流都可以使用的基本功能.我们来看一下源码: ...

  2. Redis基础知识补充及持久化、备份介绍(二)--技术流ken

    Redis知识补充 在上一篇博客<Redis基础认识及常用命令使用(一)--技术流ken>中已经介绍了redis的一些基础知识,以及常用命令的使用,本篇博客将补充一些基础知识以及redis ...

  3. C# 基础知识系列- 14 IO篇 流的使用

    0. 前言 继续之前的C# IO流,在前几篇小短片中我们大概看了下C# 的基础IO也对文件.目录和路径的操作有了一定的了解.这一篇开始,给大家演示一下流的各种操作.以文件流为例,一起来看看如何操作吧. ...

  4. TCP/IP协议(一)网络基础知识

    参考书籍为<图解tcp/ip>-第五版.这篇随笔,主要内容还是TCP/IP所必备的基础知识,包括计算机与网络发展的历史及标准化过程(简述).OSI参考模型.网络概念的本质.网络构建的设备等 ...

  5. Oracle数据库基础知识

    oracle数据库plsql developer   目录(?)[-] 一     SQL基础知识 创建删除数据库 创建删除修改表 添加修改删除列 oracle cascade用法 添加删除约束主键外 ...

  6. IOS Socket 01-网络协议基础知识

    1. 网络参考模型 OSI参考模型                                          TCP/IP参考模型 2. 七层简述 1)物理层:主要定义物理设备标准,如网线的接 ...

  7. Azure 媒体服务支持 DASH 实时传送流

    Kilroy Hughes Azure媒体服务数字媒体架构师 本文重点介绍 Azure 媒体服务支持的 DASH 实时传送流功能,同时阐述如何利用这些功能将实时和点播自适应流传送至 Web 浏览器 ...

  8. OSI七层模型基础知识及各层常见应用

       OSI Open Source Initiative(简称OSI,有译作开放源代码促进会.开放原始码组织)是一个旨在推动开源软件发展的非盈利组织.OSI参考模型(OSI/RM)的全称是开放系统互 ...

  9. 【RL-TCPnet网络教程】第2章 嵌入式网络协议栈基础知识

    第2章        嵌入式网络协议栈基础知识 本章教程为大家介绍嵌入式网络协议栈基础知识,本章先让大家有一个全面的认识,后面章节中会为大家逐一讲解用到的协议. 基础知识整理自百度百科,wiki百科等 ...

随机推荐

  1. Unity GL 画圆

    Unity下GL没有画圆的函数,只能自己来了. 如果能帮到大家,我也很高兴. 虽然没有画圆的函数,但是能画直线,利用这一点,配合微积分什么的,就可以画出来了.反正就是花很多连在一起的直线,每条直线足够 ...

  2. Struts2笔记2

    一.请求参数封装 1.属性驱动:     (1).无实体类情况:属性和动作类在一起         a.编写jsp页面,提交数据,例如name和age            <form acti ...

  3. python 学习实例(cmdMD链接)

    实例1:大学网络排名爬取 https://www.zybuluo.com/myles/note/714347

  4. codevs 4052 黎恒健大战YJY

     时间限制: 1 s  空间限制: 32000 KB  题目等级 : 黄金 Gold 题目描述 Description 现在,黎恒健与YJY由于身处异地,非常迫切地想在最短的时间内相遇,然后干一架.但 ...

  5. Python爬虫实战:爬糗事百科的段子

    一个偶然的机会接触了Python,感觉很好用,但是一直在看c++啥的,也没系统学习.用过之后也荒废了许久.之前想建个公众号自动爬糗事百科的段子,但是没能建起来,真是尴尬,代码上传的服务器上之后,不能正 ...

  6. Dll注入:x86/X64 SetThreadContext 注入

    在<Windows核心编程>第七章说到了线程优先级等知识,其中谈到了ThreadContext线程上下背景文. 其中介绍了GetThreadContext函数来查看线程内核对象的内部,并获 ...

  7. getline()读入一整行

    string line; getline(cin, line); cin不能读入空行,用getline可以读入空行.

  8. 在linux 下为sublime Text 2 配置c#编译环境

    各位看官别笑我,在虚拟机上跑了了xp  xp里面安装了vs2008,然后电脑性能实在是太差了,所以装sublime用来编写代码,然后再统一由vs2008来调试. 说正事. 安装好sublime 之后, ...

  9. MYSQL短索引

    优化MYSQL时,可以尽量使用短索引,如果只是为了提高读取的速度,可以优先使用聚合索引,把几个字段聚集在一起,当然缺点在于操作(写)的时候会降低效率,短索引一般都是开头几个字符基本不同的时候,可以考虑 ...

  10. kafka 开机启动脚本

    /etc/init.d$ vi kafka-start-up.sh #!/bin/bash #export KAFKA_HOME=$PATH export KAFKA_HOME=/opt/Kafka/ ...