网上写了好多pcr的文章,大多数是相互copy的哦,对于分析码流来说,不明晰,自己弄了几周,才根据一些资料,大概弄清了来龙去脉。

一、PCR用途:

1.PCR(program clock reference),即节目时钟基准。每一个节目都有一个独立的PCR字段。

理解:每套节目1套pcr来记录时间,它可能是单独的一个pid内存储,也可能在这套节目的视频pid里面的某些包中存在。1个频点上的1个TS流共5套节目,则应该有5个pcr,它们之间计时相互独立,并非5套pcr之间的值按时间值顺序排列,但1套PCR值是按时间顺序逐渐增大的,直到最大值清零(这个最大值大概26.5小时,之后我们可以看到计算的过程)。

PCR以秒为单位,整数部分+小数部分组成。如pcr=pcr_base*300+pcr_ext=2515301065809,时间值:time_value=(pcr_base*300+pcr_ext)/27000000=93159.29873367(s)。

转换方法可参见:“PCR和时间线相互转化” https://blog.csdn.net/rell336/article/details/110921566

2.码率计算

(1) pcr是个数值,那实际上就是一个时间刻度的数值。TS流一直按包发送(每个包通常188字节),在一定时间发送的字节数即是码率。

比如,1秒钟发送了1000字节,那码率就为1000字节/秒=1000*8bit/s=8000bps(每秒8000bit)。

(2)知道pcr值,换算时间刻度:

t = PCR/27 000 000 (单位为秒)

计算码率公式:

rate = (2个PCR相隔的包的个数*188*8 *27000000)/(PCR_TWO - PCR_ONE),单位为bps,这个就好理解的了。

上式,实际可以看成2个PCR之间开始统计,△t=27000000 /(PCR_TWO - PCR_ONE),单位为秒;发送的字节数,自然为这一时间段内的包个数*188*8bit了。

3.有效码率,当前码率,包码率

有效码率:在一段时间内,除了空包之外的其他pid的码率之和。  即除了0x1FFF的空包外,其他pid的码率全部相加。

当前码率:在一段时间内,所有pid的码率之和。

包码率:在一段时间内,某一个pid的码率。

上面讲的码率公式是所有包的码率还是pcr所在的那一套节目的码率呢?!答案是所有包的总码率。即上式的rate是当前的有效码率,系统的总码率(经常包含空包在内的约38Mbps)。

那么,我们如何统计各个包pid的码率呢?在上面的2个pcr之间,分别计数各个pid的包数量,在用上面的格式算出来的就是pid的码率的了。

理论上是这样的,但是,实际上2个相邻的PCR之间时间间隔是相当短的,规定的最大间隔为40ms,而PAT、PMT、CAT最大间隔100ms,SDT为2s,其他表可能更长,则2个相邻的PCR之间可能会不存在这些表,那我们必须取更长的时间,这些表才可能被统计出来。比如,PCR1和PCR25之间,40ms*25=1秒。或者更长50个pcr再统计。选择的pcr间隔数量决定了统计方法不同,导致统计各个pid码率之间有一定误差。我做的码流分析仪软件,选择的是25。

二、PCR的查找

1.PCR已经说过,规定是从PMT表中指定了PCR由哪个pid的包存放。

2.有调整字段的包将存储PCR信息,含pcr的pid包的包头信息中:

①由Adaption_field_control=2或者=3决定本包存在调整字段Adaption_field字段;

②Adaption_field字段中有PCR_flag=1,则含有PCR信息。

图1 含PCR的包(pid=0x21)

三、PCR间隔和PCR精度

(1).PCR间隔:指同一节目里两个连续的PCR之间最大的时间间隔。

(2).PCR 抖动: 就是 PCR 的不准确度,是相对于平均值的偏移。

对于(1)的理解:pcr是2个时间刻度信息,2个连续PCR直接的差值就是PCR间隔,这间隔时间不能太长,否则影响解码。

对于(2)的理解:PCR抖动应该就是PCR精度。假设共有10个PCR值,它们的平均值就是10个PCR值相加后除以10,每个点减去平均值=PCR(i)的精度,理论上全部在0线附近最佳【PCR(i)的精度=0最佳】,即都等于平均值是最好的;实际会在平均值上下波动,形成PCR精度折线。

DVB标准:
–  每个节目PCR的最大间隔为40ms。
–  PCR的抖动小于±500ns。
 
MPEG2标准:
最大间隔为100ms。
PCR抖动量≤±4ms(±4000ns);

四、附录:

备注一个公式,也不知道是否完全正确的:

根据码速率控制发送速度,Sleep_Time=(SendBytes*8*1000)/rate-1 //发送的间隔时间ms

14:42 2021/01/18

pcr计算码率的过程相关推荐

  1. 探究Lucene计算权重的过程

    探究Lucene计算权重的过程 我们知道,影响一个词在一篇文档中的重要性主要有两个因素: 1 term frequency (tf):该词在当前文档出现了多少次,tf越大,说明越重要. 2 docum ...

  2. 现代计算机三大科学计算,基于三维重建过程中纹理映射问题的研究

    基于三维重建过程中纹理映射问题的研究 科学计算可视化.计算机动画和虚拟现实已经成为计算机图形学的三大热门话题,这三大话题的技术核心均为三维图形.学术界和产业界普遍认为,纹理映射是解决真实地显示现实世界 ...

  3. Transformer计算量和过程统计

    整理一下Transformer相关论文的计算量和计算流程 一.Vision Transformer Vision Transformer的结构在大佬 "太阳花的小绿豆" 的博文里面 ...

  4. softmax函数计算概念,过程。Coursera | Andrew Ng (02-week3-3.9)—训练一个 Softmax 分类器

    版权声明:本文为博主--ZJ--原创文章,未经博主允许不得转载. https://blog.csdn.net/JUNJUN_ZHAO/article/details/79122927 该系列仅在原课程 ...

  5. matlab 流程计算方法,吸波材料LLG公式计算复磁导率的过程及matlab程序

    看到一篇paper,利用Landau-Lifshitz-Gilbert 公式计算片状颗粒的复磁导率.(JAP 107,033913, 2010) http://scitation.aip.org/co ...

  6. Linkis计算中间件部署过程记录

    #Linkis安装 sudo useradd hadoop vim /etc/sudoershadoop ALL=(ALL) NOPASSWD: NOPASSWD: ALL vim /home/had ...

  7. 利用洪特规则计算原子离子磁矩过程详解

  8. H264编码- 码率控制 RQ 模型参数推导过程以及JM代码分析

    摘要:本文主要介绍H264码率控制过程中,RQ模型参数更新推导过程,并结合JM19.0代码分析其功能实现. H264码率控制中比较重要的一个模型是RQ模型,不管是图像级码率控制还是基本单元码率控制都会 ...

  9. 小程序压缩视频 使用微信的compressVideo进行压缩,计算分辨率和码率关系进行压缩效果挺好

    // 精密压缩upLoladVideoFn(src,img,bitrate,resolution){wx.showLoading({title:'视频上传中...',icon:'none',mask: ...

  10. 【Fluent】接着上一次计算的结果继续计算,利用计算过程中得到的物理场(温度、速度、压力等)插值Interpolate文件初始化模型的方法

    一.问题背景 因为fluent中支持的初始化无非三种类型. 1.Standard initialization 标准初始化 2.Hybridinitialization 混合初始化 3.FMG ini ...

最新文章

  1. property field java_Java 中 field 和 variable 区别及相关术语解释
  2. 20个编写现代CSS代码的建议
  3. 用idea新建springboot项目遇到的@Restcontroller不能导入的问题
  4. java 创建线程_java多线程|创建线程的各种方式
  5. linux 复制指定类型,用Linux命令行实现删除和复制指定类型的文件
  6. html做一个年份月份天数选择器,jquery编写日期选择器
  7. 在css中arial,Helvetica或Arial作为CSS中的基本字体?
  8. excel查标准正态分布_Excel有关正态分布函数NORMSDIST做正态分布图
  9. monitor java_Java中的monitor机制
  10. 论文精读 清华ERNIE:Enhanced Language Representation with Informative Entities
  11. 测试员如何面对30岁后的下坡路,伤不起的年龄,职业道路何去何从?
  12. 利用SUMIF和OFFSET+MATCH进行多条件求和
  13. 我的世界基java版刷怪机制_我的世界刷怪上限范围解析 刷怪塔不刷怪原因
  14. 浅析FPGA局部动态可重构技术
  15. benchmark java_Xudong
  16. launcher切页动画
  17. 杰卡德相似系数(Jaccardsimilarity coefficient)
  18. ps教程-双重曝光效果实现
  19. SVG中以任意直线为对称轴的镜像变换及其矩阵
  20. 台式计算机键盘进水了还能用,电脑键盘进水了怎么办?正确的处理方法才能让它恢复如初...

热门文章

  1. 京瓷打印机m5521cdn_京瓷m5521cdn驱动
  2. MCS-51单片机指令系统总结(自学笔记)
  3. mariadb安装密码验证插件
  4. python编程语言可以做游戏吗_用Python编程可以制作掷骰子游戏吗
  5. Ain_搜索引擎这样用才有效率
  6. 判断101到200之间的素数
  7. ImageAI:几行代码跑深度学习
  8. R语言聚类分析——代码解析
  9. C语言实验课基础考点1.0
  10. 阿里巴巴面经、面试流程、面试题