音视频同步、TS MPEG2;H264/AVC、了解Handbrake中的PTS

2024-01-01

同步一直让我着迷,或者准确地说:为什么媒体播放器可以同步观看 .ts,而重新组装的解复用音频+视频却不同步。

所以我试图了解这一点,以及可以采取哪些措施来防止这种情况发生。

我已阅读以下内容:https://trac.handbrake.fr/wiki/LibHandBrakeSync https://trac.handbrake.fr/wiki/LibHandBrakeSync以及sync.c的来源(也可以在wiki上找到)

BitStreamTools 也就此主题编写了理论 101(但我无法链接,因为我是新用户,抱歉)

虽然我认为我对 PCR/PTS 的理解(概念上)是正确的,但我很难理解 handbrake 出色的 A/V 同步论文。

我的问题是:是否有关于音视频同步的直观解释(可以是简短的、短的或更长的)?虽然我知道如果音频或视频点损坏(不连续?),可以从 PCR 重新计算 PTS,但手刹似乎并不依赖于此,而是依赖于它的内部 PTS。 0, += 1/fps (~=5), 10, 15, ....

是否可以通过修复所有音频和视频 PTS 值(并使用相同的偏移量倾斜所有 DTS,从而重新计算 pts 偏移量并更正 .ts(二进制),以便播放器不会“用完帧”,以便说话),从而拥有一个可以解复用的 .ts,然后隔离的轨道会同步(如果放回一起)?

编辑: 或者是否无法通过使用 PCR 重新计算给定 .ts 中的所有 PTS 值来修复?虽然我知道某些帧/音频可能在广播中损坏,因此无法正确呈现,但我将保留对此的处理(例如,如果视频已损坏且具有相应的音频部分,则将其删除,如果音频包损坏等)稍后,为了讨论起见,我假设所有帧都完好无损。 (但是 PTS 值总是正确的,或者什么?)

附录: 我对手刹 A/V 纸的看法是这样的: 在“预期”100 处,偏移量计算为视频 pts (100) - 音频 pts (0) - 内部 PTS,以使音频达到相同的呈现时间,从而给出 99 的 pts 偏移量。在 105 处,偏移量将为 105-5 = 100,而不是 99,但我们继续使用 99 作为偏移量,因为无需重新计算(100-99 = 1. 1/fps

我几乎肯定我对此完全错误,但是有人可以指出我正确的方向吗?

  • Josh

音视频同步的概念要深刻得多。我推荐的第一本书是下面的论文。

http://downloads.bbc.co.uk/rd/pubs/reports/1996-02.pdf http://downloads.bbc.co.uk/rd/pubs/reports/1996-02.pdf

我不会在这里重复所有内容 - 但本质上,每个编码器都会记录时间戳并将其标记在相应的音频和视频上。随后,当解码器播放它时,它会做两件事 - 一,确保解码器自己的时钟被编码器的时钟“奴役”,二,确保每个图片都准确地呈现在屏幕上,并且音频帧呈现在扬声器上的时间准确无误。时间发生。这是音频与视频保持同步的唯一也是最好的方式。这些时间戳称为 PTS/DTS 值,其时钟分辨率为 90 kHz。

了解随着时间的推移,时钟会出现偏差,但由于仅参考确切的时间,因此解码器完全按照相同的时间顺序播放。

现在主要的问题仍然是解码器的时钟需要保持编码器时钟的控制/同步。 MPEG 中所做的第一件事是在 27 MHz 下使用更高的精度(高出 300 倍)。此外,这需要在中间的任何传输路径期间保持一致。 (这称为时钟恢复过程)。

下面是另外几篇很好的论文,解释了时钟恢复/同步过程的工作原理。

https://www.soe.ucsc.edu/sites/default/files/technical-reports/UCSC-CRL-98-04.pdf https://www.soe.ucsc.edu/sites/default/files/technical-reports/UCSC-CRL-98-04.pdf

最后一篇论文将所有内容很好地结合在一起。

请记住 - 基于 PCR 和 PTS/DTS 的音频视频同步使得数字电视广播非常严格,并且与互联网流媒体中使用的任何其他流媒体方法截然不同。这对于使其 24x7 流媒体正常运行至关重要。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

音视频同步、TS MPEG2;H264/AVC、了解Handbrake中的PTS 的相关文章

  • 如何调试视频解码损坏?

    我刚刚开始为一家新公司工作 我的新角色要求我帮助调试他们通过解码帧接收到的视频损坏 尽管我打算深入研究代码并研究问题的具体细节 但它让我开始思考视频调试的总体情况 由于处理视频对我来说非常陌生 整个过程看起来相当复杂 而且似乎有很多地方可以
  • 同步框架服务器到服务器同步

    I have kind of a such scenario source microsoft com http i msdn microsoft com bb887608 Figure3 en us png Here i need to
  • HTML 5 视频拉伸

    您能让视频 拉伸 到视频元素的宽度和高度吗 显然 默认情况下 视频会按比例缩放并适合视频元素 thanks 我已经使用 object fit fill in CSS 进行了测试 效果很好 video object fit fill 来自 M
  • 如何在 iOS 和 macOS 上的 Safari 中使用网络摄像头录制视频?

    我已经发布了几条路径 1 录制视频https caniuse com feat html media capture https caniuse com feat html media capture但它仅适用于 iOS 并且无法自定义 我
  • 在 silverlight 中播放视频?

    如何使用 silverlight 播放视频 Visual Studio 是否内置了视频播放器组件 或者我需要制作一个视频播放器 通常情况下 这取决于您的要求 您可以使用Silverlight自带的媒体元素 msdn信息在这里 http ms
  • 如何检查有多少线程正在等待同步方法解锁

    有什么方法可以检查有多少线程正在等待同步方法解锁 我想知道线程何时调用同步方法 1 有多少线程已经在等待调用该方法 2 一旦调用该方法 需要等待该方法解锁多长时间 解决方案 我使用堆垛机答案解决了这个问题 public class Lock
  • 用于 C# 和 iPhone 应用程序的 MongoDB

    我正处于设计应用程序的初始阶段 该应用程序将具有用 C 实现的后端 该后端将使用 IIS 上托管的 WCF Web 服务为其他平台提供数据 iPhone 就是其中之一 由于是个人项目 所以想用它来学习MongoDB 我已经知道有社区开发的
  • VideoView SeekTo 在不同设备上工作异常 - Android

    我在视频视图上使用此代码来寻求自定义位置 但它在三星设备上工作正常 但在索尼设备上 视频寻求开始位置 开始 我想让视频回到上次暂停的位置 创建视频视图 VideoView mVideoPlayer setVideoPath ViDpath
  • 今天 iCloud + Core Data(2015 年 7 月 10 日)

    几年前 Apple 发布了 Core Data 应用程序的 iCloud 同步 然后我发布了一个适用于 iPad iPhone MAC 的应用程序 其共享模型使用新的 Apple 机制 事情并没有按预期进行 同步机制有时不起作用 例如 就我
  • 通过 iOS 应用程序在 Twitter 上分享视频

    是否可以使用 SLRequest 分享视频 我可以使用相同的方式共享图像 SLRequest postRequest SLRequest requestForServiceType SLServiceTypeTwitter requestM
  • 在列表视图/滚动视图中自动播放视频,类似于 facebook

    如果视图包含视频 我需要视频在列表视图 滚动视图中自动播放 这与 Facebook 非常相似 如果用户向下滚动并且可见区域包含视频 系统将播放视频 如果仍然滚动 则会自动停止该视频 它应该像一次播放一个视频一样工作 有人可以帮我解决这个问题
  • 是否可以使用 S3 进行 Flash 伪流?

    我一直在使用 S3 来存储和提供 FLV 和 MP4 视频 它效果很好 但内容是渐进下载的 我想知道是否有可能让所谓的 伪流 与 S3 一起使用 伪流允许观看者在下载完整视频之前在视频中向前搜索 并仅将必要的位发送到 Flash 播放器 我
  • 流媒体视频文件?

    我需要流式传输 flv 文件 流媒体应该看起来像直播 我应该有一种方法可以更改目标文件 抱歉我的英语不好 如果 流式传输 的意思是 显示 Flash 视频剪辑 则 flv streaming 并不是真正的流式传输 而是正常的文件传输 即使文
  • 同步不经常更新的哈希图的最佳方式

    我有一个在应用程序中使用的 HashMap 数据是在应用程序初始加载期间从数据库填充的 然后它始终只是读取并且从不更新 会有多个线程不断地读取数据 由于数据永远不会更新 因此我们目前不使用任何同步 仅使用 HashMap 我们现在定义的方式
  • 如何使用 ffmpeg 提取时间精确的视频片段?

    这并不是一个特别新的问题领域 但我已经尝试过那里建议的内容 但运气不佳 那么 我的故事 我有一大段 15 秒的直接来自camera mov 视频 我想从中提取特定的块 我可以通过开始时间和停止时间 以秒为单位 来识别该块 我首先尝试执行我称
  • 如何使用 SyncAdapter 处理远程服务器的 RESTful 更新

    我观看了 Google I O REST 演讲并阅读了幻灯片 http www google com events io 2010 sessions developing RESTful android apps html http www
  • Android - 如何合并两个视频

    基本上 我正在寻找一种将两个 mp4 视频文件 在 SD 卡上 组合在一起的方法 更像是在第一个视频的末尾附加第二个视频 我进行了很多搜索 但找不到合适的解决方案 好吧 我根本找不到任何解决方案 所以我的问题是 是否有一个库可以组合 并可能
  • 进程间并发文件写入

    我需要将不同进程的日志数据写入单个文件 我正在使用 Windows Mutex 它需要公共语言运行时支持 Mutex m gcnew Mutex false MyMutex m gt WaitOne File Open and Write
  • 我如何对 youtube 嵌入播放器进行编程,使其在点击时取消静音

    如何设置 YouTube 嵌入式播放器在单击时取消静音 你可以看到我提到的嵌入式播放器http www harvestarmy org http www harvestarmy org主页 右边的那个写着 来自 YouTube 的最新视频
  • 如何制作过期/签名视频嵌入网址

    我是新来的 正在学习网络开发等等 我只知道如何将我的视频嵌入网站中 任何菜鸟都可以轻松获得源代码 他们也可以嵌入它 但在许多网站中 视频 src 均使用重定向器链接进行编码 例如 它会在一段时间后过期 在本例中是一天 我了解到这是一个签名网

随机推荐

  • 在 Linux 内核中使用“sched_setaffinity()”

    网上有很多帖子sched setaffinity 但几乎没有人在内核空间中使用它 我使用的是内核 4 14 79 我尝试使用用户空间调用方法sched setaffinity形式为 cpu set t my set CPU ZERO my
  • Perl:从里到外展开列表不起作用?

    all this is some deeply nested text for you while all s f 1 seg sub f return split 0 print all 我希望 all 是一个 listref 其列表包含
  • 为什么我在尝试启动 Rails 控制台时收到 Readline 错误?

    更新 我在尝试其他地方找到的解决方案时可能弄乱了我的系统 我从头开始 顺利安装了 Ruby 1 9 3 现在尝试让 ree 1 8 7 一起玩得很好 我正在尝试在 Kubuntu 上使用 RVM 安装 Ruby 1 9 3 我相信是 11
  • 如何删除默认的 CRA React 图标?

    我已经删除了 head 标签中的链接 但图标仍然被渲染 是否可以删除或更改 您的图标位于 project root gt public gt favicon ico 中 public favicon ico 删除它很困难 因为如果浏览器找不
  • 在 GKE 上使用 nginx 入口控制器时负载均衡器的节点不健康

    我已经设置了 nginx 入口控制器如下本指南 https github com kubernetes ingress nginx blob master deploy README md 入口运行良好 我能够访问defaultbacken
  • 找不到 png.h 文件 - Linux

    我正在尝试跑步this http cvlab epfl ch cms site cvlab2 lang en software pom index php在 linux ubuntu 中 当我输入 make 时 它 会说 rgb image
  • 尝试使用 jQuery 隐藏 html 表的列

    function func id document ready function toggle click function td nth child id gt div toggle return false 我试图隐藏与单击的按钮对应的
  • 使用 select、group by 和 count 时如何获得非空结果集?

    这是当前的查询 SELECT status ct reconcile status IFNULL COUNT status ct reconcile status 0 AS sch change status num FROM db cre
  • 我可以使用WebRTC接收标准RTP视频流吗?

    我有两台计算机在同一网络上 其中一个使用 RTP 协议传输电影 H264 是否可以创建一个简单的 JavaScript 应用程序来在第二台计算机上接收此流并显示在视频标签中 到目前为止 我对WebRTC的印象是它被设计为在浏览器之间使用 都
  • 一直运行的 iOS GPS 跟踪应用程序

    我正在尝试制作一个应用程序来始终跟踪用户的 GPS 该应用程序是一种汽车 GPS 跟踪器 用于始终获取驾驶员的位置并将其发送到服务器 我尝试将 位置更新 添加到 后台模式 但进入后台时应用程序将在 10 分钟后自动暂停 有没有办法让这个应用
  • 在另一个单元格中输入数据并按 Enter 选项后转到特定单元格

    我有一个 Excel 工作表 我正在 A2 B2 和 C2 中输入数据 按 Enter 键后 我希望光标选择下一行 以便我可以输入 A3 B3 和 C3 等信息 我找到了这个信息 Private Sub Worksheet Change B
  • 确定点是否在 3D 三角形内部

    我正在寻求对我对确定点是否位于 3D 三角形内部的方法的看法的认可 给定一条 R t e td 形式的射线和一组三个点 T V0 V1 V2 它们在三维空间中形成一个三角形 我知道如何找到该平面的参数方程三点形成以及如何确定射线是否与该平面
  • Android - InstrumentationTestRunner

    我是 Android 新手 并且来自 NET 背景 对 Java 有点生疏 我正在为 Android 上运行的移动应用程序开发一些测试自动化 目前 我只是使用 Android 调试桥通过命令行启动测试 但当我尝试运行任何测试时遇到错误 首先
  • 从 SQL 查询中获取参数名称

    后端是PostgreSQL服务器9 1 我正在尝试构建 AdHoc XML 报告 报告文件将包含 SQL 查询 所有查询都必须以 SELECT 语句开头 SQL 查询将带有参数 根据关联列的数据类型 这些参数将相应地呈现给用户以提供值 一个
  • Traceview最大记录时间?

    我正在使用 Debug startMethodTracing 和 Debug stopMethodTracing 来优化一段需要大约 30 秒执行的代码 但是当我使用跟踪视图打开跟踪文件时 它只显示大约 6 5 秒的跟踪数据 有什么线索吗
  • Java 中的 方法是什么?它可以被覆盖吗? [复制]

    这个问题在这里已经有答案了
  • 陷入 Matlab 的用于匹配 vlfeat 图像点的子图机制

    我正在 Matlab 中做 vlfeat 我正在关注这个问题here https stackoverflow com questions 1500498 how to use sift algorithm to compute how si
  • 获取EAX寄存器的上半部分

    在x86汇编语言中 有没有办法获得上半部分EAX登记 我知道AX寄存器已经包含了下半部分EAX注册 但我还不知道有什么方法可以获得上半部分 我知道mov bx ax会移动下半部分eax into bx 但我想知道如何移动上半部分eax in
  • 参数中的前向声明与“正常”前向声明之间的区别

    模板 参数中的前向声明 使用详细类型说明符 https en cppreference com w cpp language elaborated type specifier 和 正常 的前向声明 void foo struct bar
  • 音视频同步、TS MPEG2;H264/AVC、了解Handbrake中的PTS

    同步一直让我着迷 或者准确地说 为什么媒体播放器可以同步观看 ts 而重新组装的解复用音频 视频却不同步 所以我试图了解这一点 以及可以采取哪些措施来防止这种情况发生 我已阅读以下内容 https trac handbrake fr wik