ts 流中pcr 介绍

news2025/11/11 17:44:46

在数字电视传输码流中。节目时钟基准 (PCR) 也是一种重要的包头信息,

1. pcr 能表示的时间范围
它由 33bit 基值 (Base) 和 9bit 扩展值 (Extension) 组成。
#define PCR_TIME_BASE 27000000
pcr 为1 代表1/27M 时间,
pcr 的最大表示时间为(2^33*300+299)/27000000=95443.7177秒 
95443.7177/3600=26.512小时


2. pcr 的内存存储
节目时钟是27M 为基准单位,在内存中存储占用6个bytes, 如下代码所示.:
static int write_pcr_bits(uint8_t *buf, int64_t pcr)
{
    int64_t pcr_low = pcr % 300, pcr_high = pcr / 300;

    *buf++ = pcr_high >> 25;
    *buf++ = pcr_high >> 17;
    *buf++ = pcr_high >>  9;
    *buf++ = pcr_high >>  1;
    *buf++ = pcr_high <<  7 | pcr_low >> 8 | 0x7e;
    *buf++ = pcr_low;

    return 6;
}

3. pcr 的数值生成
#define PCR_TIME_BASE 27000000
static int64_t get_pcr(const MpegTSWrite *ts)
{
    return av_rescale(ts->total_size + 11, 8 * PCR_TIME_BASE, ts->mux_rate) +
           ts->first_pcr;
}

1秒钟,pcr要走27M, 所以pcr 计算是 时间*27M
时间=(发送的总大小*8/mux_rate)
用函数表示: rescale(total_size,8*27M,mux_rate), 再加一个原始偏移,代码即理解了.
可见pcr 值决定于发送的数据量.


4. pcr 应用
在mpegtsenc.c第1600行, 有
if (dts != AV_NOPTS_VALUE && dts < pcr / 300)
    av_log(s, AV_LOG_WARNING, "dts < pcr, TS is invalid\n");

要求传来的dts 不能小于pcr/300, 否则会有一个warning 警告! 不过后面它该干的都干了.

何时write_pcr?
考察,cbr 模式, 此时mux_rate 为有效.
1. 
    if (pcr >= ts->next_pcr) { write_pcr=1;}

    当发送的数据量足够多了(当前pcr),多于下一个next_pcr, 就要插入一个pcr包
    next_pcr 的计算:
    next_pcr = FFMIN(next_pcr, ts_st2->last_pcr + ts_st2->pcr_period);

当dts 与pcr/300 差距大于delay 时,要插入pcr 或者空包
    if ((dts - pcr / 300) > delay) {
        /* pcr insert gets priority over null packet insert */
        if (write_pcr)
            mpegts_insert_pcr_only(s, st);
        else
            mpegts_insert_null_packet(s);
        /* recalculate write_pcr and possibly retransmit si_info */
        continue;
    }


dts 被重新计算过.
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1480563.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

植物神经紊乱和焦虑症是一样吗?教你认清这两种疾病

植物神经紊乱和焦虑症并非同一种疾病&#xff0c;尽管它们在一些方面可能有相似的症状&#xff0c;但在病理生理过程、诊断标准和治疗方法上存在明显的区别。患者和家属需要更深入地了解这两种疾病&#xff0c;以便进行正确的诊断和治疗。 植物神经紊乱是一种自主神经功能紊乱的…

python模型训练

目录 1、新建模型 train_model.py 2、运行模型 &#xff08;1&#xff09;首先会下载data文件库 &#xff08;2&#xff09;完成之后会开始训练模型&#xff08;10次&#xff09; 3、 训练好之后&#xff0c;进入命令集 4、输入命令&#xff1a;python -m tensorboard.ma…

MWC 2024:华为手机展现科技创新实力,持续强化高端科技品牌形象

虽然天气有些清冷&#xff0c;但今年的巴塞罗那街头却人潮涌动&#xff0c;从2月26号开始&#xff0c;这个位于伊比利亚半岛东北部&#xff0c;濒临地中海的世界著名历史文化名城将迎来一年一度的全球移动盛会。 作为全球通信领域最具规模和影响的展会&#xff0c;MWC&#xf…

2024最新精华版Java面试题之spring篇

目录 一、Java面试题之spring篇 1、什么是spring? 2、你们项目中为什么使用Spring框架&#xff1f; 3、 Autowired和Resource关键字的区别&#xff1f; 4、依赖注入的方式有几种&#xff0c;各是什么? 5、讲一下什么是Spring容器&#xff1f; 6、说说你对Spring MVC的理…

智慧治水丨计讯物联水利RTU助推小型水库出险加固工程建设与管理

日前&#xff0c;水利部印发《关于健全小型水库除险加固和运行管护机制的意见》&#xff08;以下简称《意见》&#xff09;&#xff0c;健全小型水库除险加固和运行管护常态化机制&#xff0c;提高小型水库安全管理水平。《意见》提出了“十四五”的两大管理机制&#xff0c;通…

TSINGSEE青犀AI智能分析网关V4工业园区/厂区/工厂智慧安监方案

一、背景与需求分析 随着科技的不断发展&#xff0c;传统的安全监管方式已经难以满足现代工业园区的安全需求。为了提高工业园区的安全监管水平&#xff0c;智慧安监方案成为了新的选择。针对工业园区化工企业多且安全及环保等方面存在风险高、隐患多、精细化管控复杂的情况&a…

Linux - 权限概念

Linux下有两种用户&#xff1a;超级用户&#xff08;root&#xff09;、普通用户。 超级用户&#xff1a;可以再linux系统下做任何事情&#xff0c;不受限制普通用户&#xff1a;在linux下做有限的事情超级用户的命令提示符是“#”&#xff0c;普通用户的命令提示符是“$” 命…

shell 免交互ecxept样例

语法 expect [选项] [ -c cmds ] [ [ -[f|b] ] cmdfile ] [ args ] 选项 -c&#xff1a;从命令行执行expect脚本&#xff0c;默认expect是交互地执行的 示例&#xff1a;expect -c expect "\n" {send "pressed enter\n"} -d&#xff1a;输出调试信息 …

2024全国水科技大会暨新能源及电子行业废水论坛(十一)

一、会议背景 为深入学习贯彻《中共中央、国务院关于全面推进美丽中国建设的意见》&#xff0c;全面贯彻实施《固体废物污染环境防治法》、《“十四五”全国城市基础设施建设规划》&#xff0c;推进我国污泥处理工程建设&#xff0c;提高处理产物资源化利用水平&#xff0c;促进…

YOLOv9详细解读,改进提升全面分析(附YOLOv9结构图)

&#x1f951; Welcome to Aedream同学 s blog! &#x1f951; 文章目录 1. 概要1.1 模型结构上的改动:1.2 训练脚本上的改动&#xff1a; 2. 介绍2.1 背景2.2 主要贡献 3. 总体框架3.1 可编程梯度信息&#xff08;PGI&#xff09;3.1.1 辅助可逆分支3.1.2 多级辅助信息 3.2 Ge…

【UE 材质】制作加载图案(2)

在上一篇&#xff08;【UE 材质】制作加载图案&#xff09;基础上继续实现如下效果的加载图案 效果 步骤 1. 复制一份上一篇制作的材质并打开 2. 添加“Floor”节点向下取整 除相同的平铺数 此时的效果如下 删除如下节点 通过“Ceil”向上取整&#xff0c;参数“Tiling”默认…

苹果iOS群控系统开发常见功能及其代码解析!

随着移动互联网的快速发展&#xff0c;iOS设备因其良好的用户体验和丰富的应用生态&#xff0c;受到了广大用户的喜爱&#xff0c;苹果iOS群控系统&#xff0c;即可以同时对多台iOS设备进行集中控制和管理的系统&#xff0c;逐渐成为了开发者、测试人员以及企业管理的有力工具。…

基于PHP的在线英语学习平台

有需要请加文章底部Q哦 可远程调试 基于PHP的在线英语学习平台 一 介绍 此在线英语学习平台基于原生PHP开发&#xff0c;数据库mysql。系统角色分为学生&#xff0c;教师和管理员。(附带参考设计文档) 技术栈&#xff1a;phpmysqlphpstudyvscode 二 功能 学生 1 注册/登录/…

Spring Exception 常见错误

今天&#xff0c;来学习 Spring 的异常处理机制。Spring 提供了一套健全的异常处理框架&#xff0c;以便我们在开发应用的时候对异常进行处理。但是&#xff0c;我们也会在使用的时候遇到一些麻烦&#xff0c;接下来我将通过两个典型的错误案例&#xff0c;带着你结合源码进行深…

Centos7.9环境源码编译安装ffmpeg6.x

1.官网ffmpeg下载源码 https://ffmpeg.org/download.html#build-windows 2.未安装x264库则先安装配置 可以先查询x264库: whereis libx264 安装编译工具和依赖库&#xff1a; sudo yum install gcc make cmake mercurial git yasm pkgconfig autoconf automake libtool sudo…

Android ANR 日志分析定位

ANR 是 Android 应用程序中的 "Application Not Responding" 的缩写&#xff0c;中文意思是 "应用程序无响应"。这是当应用程序在 Android 系统上运行时&#xff0c;由于某种原因不能及时响应用户输入事件或执行一个操作&#xff0c;导致界面无法更新&…

NodeJs 版本升级时Vue工程报错

最近把nodejs 的版本更新了&#xff0c;原来用的 16.15.1 现在用的 18.16.1&#xff0c;结果所有的vue工程都启不动了&#xff0c;一直报错。 1.报错截图 2.原因分析 error:03000086:digital envelope routines::initialization error &#xff0c;这个是nodejs版本的问题&am…

Linux基础指令(任务调度、磁盘分区挂载、网络配置、进程管理)

Linux基础指令 1、任务调度简介基本语法crontab【选项】at定时任务 2、磁盘分区、挂载3、网络配置配置网络环境设置主机名和host映射主机名解析过程分析 4、进程管理ps指令终止进程查看进程树服务管理打开或关闭指定端口动态监控进程&#xff08;top&#xff09;监控网络状态 1…

Vue3 使用动态组件 component

component 标签&#xff1a;用于动态渲染标签或组件。 语法格式&#xff1a; <component is"标签或组件名">标签内容</component> 动态渲染标签&#xff1a; <template><h3>我是父组件</h3><component is"h1">动态…

Android App启动时黑屏或白屏

1.自己解决&#xff0c;在style中自定义一个样式&#xff0c;放一个启动图背景。 <style name"AppTheme.StartingWindowTheme" >//这里设置的是启动图片<item name"android:windowBackground">mipmap/starttu</item><item name"…