http://blog.csdn.net/chenliangming/article/details/3616720

引自《广播电视信息》2008年1月

从数字电视前端系统功能上来讲,传统的DVB数字硬件前端技术包含编码、复用、加扰、调制四个基本环节,而在实际的DVB前端系统中还有直接的TS流转发环节,如下图所示:

上图中编码环节是将模拟视音频或者基带的数字视频和音频信号编码形成标准的TS流,而流转发环节是将卫星或者通过其它信道过来的信号转成符合当地标准的TS流,所有的TS进入复用环节进行复用。为了满足运营的需求,TS需要进入加扰环节进行加扰,然后进入调制器进行调制,最后进入本地的HFC网络。

数字电视编解码是按照MPEG标准进行的,而在MPEG标准中,编解码设备在在处理TS流的时候,都有一个基础的时间参考,这个时间参考就是PCR。一般来说,PCR在编码端产生,需要准确的传输到解码端,供解码使用。

一、 PCR在解码端的作用

PCR(program clock reference),中文可以翻译为节目参考时钟,是DVB传输流里面的一个基础时钟。在数字电视传输流里面,PCR是一个分两个部分编码的42位字段,其中33位为PCR基础,9位为PCR扩展。PCR扩展以300为模进行计数,取模一次PCR基础加1,所有的计数都是以本地的基础27M时钟进行。

作为数字电视流传输过程中的时钟基准,PCR在解码端有两个非常关键的作用:

一是同步头端和终端的27M时钟,并借此同步头端和终端的色度平衡和帧率。在数字电视终端设备上,都有一个压控振荡器和一个内部的计数器,这个内部的计数器会对本地压控振荡器的时钟进行计数,并且和TS流内部的PCR数字进行比较,若本地计数器的变化率高于PCR的变化率,表征本地的27M时钟比头端27M时钟快,应该调整压控振荡器的电压,降低压控振荡器的频率;反之则提高本地振荡器的振荡频率。

在PES层里面,还有一对时间信息,那就是DTS和PTS。其中DTS为解码时间标签,PTS为显示时间标签。对于视频数据来讲,针对于不同IPB类型解码时间和显示时间的关系是不同的,B帧的PTS和DTS相同,所以只有PTS;而对于音频数据来讲,由于音频的传输是严格按照顺序传输的,所以音频没有DTS,只有PTS。但是DTS、PTS和PCR的相互作用原理是一样的,都是为了在正确的时间对数据进行解码和显示,从而达到音频和视频相对于系统时间的同步,也在客观上实现了音频和视频之间的同步。在实际实现中,终端里面会维护另外一个计数器DTS_Base,DTS_Base的值会被PCR重置,同时随着本地时钟进行递加,当遇到音频(视频)帧头时,会记录当前帧的DTS(PTS),DTS和DTS_Base的差在一定范围之内时,携带此DTS的那一帧就会被送进解码单元进行解码。在数字电视终端采用PCR主同步模式解码时,视频和音频分别按照自己的DTS(PTS)和本地时间的关系进行解码,前端合理的配置DTS(PTS)和PCR,不仅仅控制了音频和视频之间的相互同步,同时也控制了音频和视频整体相对于编码输入的延时。

二、 PCR生成

PCR对于视频、音频的质量和相互延时都非常关键。但是TS流在传输过程中,每经过一次设备的处理,由于码率以及TS包之间相互关系的变化,都会对PCR的抖动和间隔产生比较大的影响,从而影响终端的正常解码。在最新的TR101 290标准里面,对PCR的精度、漂移、抖动都有明确的要求。在实际系统中,PCR的生成和校正是最关键的处理要素。

PCR的生成一般是在编码器里面实现。作为整个数字电视的最头端,编码器生成的PCR的质量对后端有着至关重要的作用,实际上,后端无论是采用何种校正方式,PCR的精度肯定会低于编码器发出的PCR。所以,对于编码器来讲,PCR要求的精度应该非常高。

对于编码器来讲,要生成精度高的PCR,首先要有一个非常精准的系统时钟(27M),要保证这个时钟随时间和温度的漂移都非常小,其次,也要有一个合理的PCR生成策略。在编码器内部,在DVB系统里面,PCR是针对27M时钟产生的, ASI发出的时钟也是27M,这两个时钟要采取采用同源处理。从实现方式上,编码器内部维护一个PCR的计数器,以这个计数器为时间,计算PCR发送的间隔(DVB要求每40ms必须有一个PCR),然后在发送PCR字节的同时,锁定PCR计数器的数值,这样就可以保证PCR发送的无抖动。同时,这个计数器还要针对于视频的输入和音频的输入,对编码器发出的视音频的PTS(DTS)进行处理,以保证唇音同步。

三、 PCR校正

Pm PCR2

Pn PCR1

P1

P2

Pm+1

如图所示是一个正常传输的TS流示意图,其中P1,P2,…,Pm是指TS包。其中Pn带有PCR1,Pm携带有PCR2。在判断PCR的时候,有两个比较关键的时间参数,分别是PCR2和PCR1两个数值的差Pd以及PCR2的到达时间Tpcr2和PCR1的到达时间Tpcr1之差Pi,其中

Pd =PCR2 - PCR1;

Pi = Tpcr2-Tpcr1;

其中,Pi我们可以看做是一个客观时间,而Pa=Pd-Pi就是PCR的精度相对于客观时间的偏移。如果在编码器内部,系统处理得当的话,Pa应该非常小,如果不考虑编码器的时钟相对于客观时间的偏移,Pa是有可能等于0的

TS流从编码器发出之后,进入复用器、适配器、调制器等环节,码流就有了两个基本的变化,首先是码率发生了变化,其次以前的码流的相互关系被打乱,虽然每一个PID的包的顺序不可能发生变化,但是不同的PID发生交错,则整个包的顺序就发生了很大的变化。

Pm’ PCR2

Pn’ PCR1

P1

P2

Pm+1

如图所示,在新生成的TS包中,携带PCR的两个TS包的相对顺序已经发生了变化,分别为Pn’和Pm’,若两个PCR的值没有发生变化,那么PCR2和PCR1两个数值Pd的差不变,而PCR2的发出时间Tpcr2’和PCR1的到达时间Tpcr1’之差Pi’则发生了变化

DVB系统中PCR的生成和PCR校正的更多相关文章

  1. (转)秒杀系统中如何动态生成下单随机URL

    秒杀系统中通常会避免用户之间访问下单页面的URL(避免使用爬虫来造成不公平).所有需要将URL动态化,即使秒杀系统的开发人员也无法在知晓在秒杀开始时的URL.解决办法是在获取秒杀URL的接口中,返回一 ...

  2. <linux系统c语言生成.so文件,生成64位可执行文件,在64位系统中运行32位的可执行文件>

    1.linux 系统c语言生成.o文件,---->gcc -m64 -c -fPIC test.c -o test.o2.linux 系统c语言生成.so文件,----->gcc -sha ...

  3. 有意思的RTL函数RegisterClass(在持久化中,你生成的一个新类的对象,系统并不知道他是如何来的,因此需要你注册)good

    例子1:Delphi中使用纯正的面向对象方法(这个例子最直接) Delphi的VCL技术使很多程序员能够非常快速的入门:程序员门只要简单的拖动再加上少量的几个Pascal语句,呵呵,一个可以运行得非常 ...

  4. 使用Kali中的Metasploit生成木马控制Windows系统 (第九天 9.20)

    本文转自:https://www.cnblogs.com/yankaohaitaiwei/p/11556921.html 一.kali及Metasploit kali基于debin的数字取证系统,上面 ...

  5. 架构设计 | 分布式业务系统中,全局ID生成策略

    本文源码:GitHub·点这里 || GitEE·点这里 一.全局ID简介 在实际的开发中,几乎所有的业务场景产生的数据,都需要一个唯一ID作为核心标识,用来流程化管理.比如常见的: 订单:order ...

  6. DVB-C系统中QAM调制与解调仿真

    本文简单记录一下自己学习<通信原理>的时候调试的一个仿真DVB-C(Cable,数字有线电视)系统中QAM调制和解调的程序.自己一直是研究"信源"方面的东西,所以对&q ...

  7. Linux 系统中堆栈的使用方法

    本节内容概要描述了Linux内核从开机引导到系统正常运行过程中对堆栈的使用方式.这部分内容的说明与内核代码关系比较密切,可以先跳过.在开始阅读相应代码时再回来仔细研究. Linux 0.12系统中共使 ...

  8. MachineKey 操作 之 应用集群中SSO应用生成MachineKey

    MachineKey介绍 MachineKey其用于对 Forms 身份验证 Cookie 数据和视图状态数据进行加密和解密,一般情况下IIS自动默认给网站或者每一个应用生成唯一的MachineKey ...

  9. UEFI+GPT模式下的Windows系统中分区结构和默认分区大小及硬盘整数分区研究

    内容摘要:本文主要讨论和分析在UEFI+GPT模式下的Windows系统(主要是最新的Win10X64)中默认的分区结构和默认的分区大小,硬盘整数分区.4K对齐.起始扇区.恢复分区.ESP分区.MSR ...

随机推荐

  1. Linux学习三部曲(之一)

    作为.NET程序员,一直以来都是windows环境下工作,很少接触到linux系统.但是随着微软跨出跨平台这一步之后,相信.NET程序员在linux平台进行开发也会变得越来越寻常. 所以,今天这篇文章 ...

  2. dorado listener属性

    每一个控件都有一个listener属性,可以用来定位一个服务定位表达式,通过这个表达式, 它最终可以映射为spring里面一个javaBean的一个java方法 例如设置DynaView1.view. ...

  3. 获取客户端访问的ip地址

    function real_ip() { static $realip = NULL; if ($realip !== NULL) { return $realip; } if (isset($_SE ...

  4. DTCMS添加文章,将tags标签的值赋到SEO关键词上,以及将摘要的值赋到SEO描述

    将tags标签的值赋到SEO关键词上 admin\article_edit.aspx中 $(function () {  方法中加上 //tags的值赋到SEO关键词上 $("#txtTag ...

  5. 在Windows下设置环境变量 运行mysql程序变得更容易

    在Windows下设置环境变量,点开始菜单,右键单击我的电脑--属性--高级--环境变量 可以看到PATH的变量是这样的: C:\WINDOWS;C:\WINDOWS\COMMAND   为了让运行m ...

  6. Cassandra1.2文档学习(12)—— hint机制

    参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_about_ ...

  7. java-----基本数据类型包装类

    目的:为了方便操作基本数据类型值,将其封装为对象,在对象定义了属性和行为,丰富了改数据的操作,用于描述该对象的类也就成为基本数据类型对象包装类. 例如:int类型的取值范围:Integer------ ...

  8. [翻译]15个最常见的WCF面试问题

    WCF和ASMX WebService的区别是什么? 最基本的区别在于,ASMX或者ASP.NET WebService是用来通过基于HTTP的SOAP来实现通讯.但WCF可以使用任意协议(HTTP, ...

  9. if...else..的错误用法

    1.最近在写js代码完成一个前段DOM操作的函数时,自己错误的使用了if..else..控制体.为什么是错误的呢?看看我的 代码你就明白了: document.getElementsByClassNa ...

  10. 种子填充找连通块 floodfill

    Description Due to recent rains, water has pooled in various places in Farmer John's field, which is ...