AVPlayer 不同步

2023-11-27

我实在是没办法了,只好再请教大家了……

我正在构建一个使用 AVPlayer 的三个实例的 iPhone 应用程序。他们同时进行比赛,这一点非常重要。我曾经运行过这段代码:

CMClockRef syncTime = CMClockGetHostTimeClock();
CMTime hostTime = CMClockGetTime(hostTime);
[self.playerOne setRate:1.0f time:kCMTimeInvalid atHostTime:hostTime];
[self.playerTwo setRate:1.0f time:kCMTimeInvalid atHostTime:hostTime];
[self.playerThree setRate:1.0f time:kCMTimeInvalid atHostTime:hostTime];

效果很好。但几天前它就停止工作了,三个播放器延迟了大约 300-400 毫秒(这太多了,100 毫秒以下的一切都可以)。其中两个 AVPlayer 有一些音频处理,这比“正常”AVPlayer 需要更多时间,但它以前可以工作,并且 currentTime 属性告诉我,这些播放器被延迟,因此同步似乎失败。

我不知道为什么它停止工作,我并没有真正改变什么,但我正在使用一个观察者,我可以在其中询问 self.playerX.currentTime 属性,这给了我大约 0.3-0.4 秒的延迟。 ..如果延迟>.1f,我已经尝试重新同步播放器,但延迟仍然存在。所以我认为player1和2的音频处理不能对延迟负责,因为currentTime属性确实知道它们被延迟了(我希望你明白我的意思)。也许你们中的某个人知道为什么我有如此可怕的延误,或者能够为我提供另一个想法。

提前致谢!


所以,我找到了解决方案。我忘了 [self.playerX prerollAtRate:]。我认为如果观察者是 AVPlayerReadyToPlay 则意味着播放器“真正”准备好了。事实上,事实并非如此。 AVPlayer 准备好播放后,必须对其进行预滚动。完成后,您可以同步您的放置器。现在延迟约为 0.000006 秒。

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

AVPlayer 不同步 的相关文章

随机推荐

  • 为什么 $hash.key 语法在 ExpandString 方法中不起作用?

    以下 Powershell 脚本演示了该问题 hash a 1 b 2 Write Host hash a gt 1 Write Host hash a gt 1 Two ways of printing using quoted stri
  • 在打字稿函数中声明“this”的类型?

    我正在写一个繁重任务在打字稿中 我正在尝试翻译 JavaScript 中已有的内容 因此 当 grunt 运行一个任务时 它会运行一个函数 当它运行时 grunt 设置this具有有用属性的对象 与 jQuery 重载的方式相同this与您
  • 在分配控制台之前调用 Console.WriteLine

    我最近在我的应用程序中遇到了以下问题 它没有显示任何控制台输出 尽管控制台已通过使用分配AllocConsole 我很快就发现这是由于尝试 隐藏在代码中 在执行之前写入控制台而引起的 AllocConsole被称为 所以它看起来像这样 Co
  • 如何开发人脸识别iPhone应用程序? [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我正在尝试开发一款用于人脸识别 检测的 iPhone 在我的应用程序中 我想让我的 iP
  • 快速按下 Xcode 按钮时快速播放声音的最佳方法是什么?

    我有一个音板 它只是一个带有大约 8 个按钮的屏幕 每个单独的按钮都有自己的声音 按下按钮时会播放该声音 我可以通过多种方式播放声音 例如使用 SystemSound 或 AVAudioPlayer 到目前为止 系统声音似乎具有最快的响应时
  • MPI:阻塞与非阻塞

    我无法理解 MPI 中阻塞通信和非阻塞通信的概念 两者有何区别 有什么优点和缺点 阻止通信是使用完成的MPI Send and MPI Recv 在通信完成之前 这些函数不会返回 即 它们会阻塞 稍微简化一下 这意味着缓冲区传递给MPI S
  • 免受自由的保护

    刚刚在我们的应用程序上尝试了 Freedom 应用程序 我可以用它购买所有应用程序内购买项目 至少在运行 Play Store 3 x 时是这样 如果我将 Play 商店升级到 4 x 那么 Freedom hack 就会停止工作 无论如何
  • 在对象上调用 getter 与将其存储为局部变量(内存占用、性能)

    在下面的代码中我们进行调用listType getDescription twice for ListType listType this listTypeManager getSelectableListTypes if listType
  • spring-boot + tomcat RewriteValve

    是否可以以某种方式自定义嵌入式 tomcat重写阀 正如我所看到的api目前只有以下方法添加上下文阀 and 添加发动机阀门但正如 Tomcat 在文档中指出的那样 RewriteValve 应该放置在 Host 中或 web 应用程序的
  • Python 中确定特定函数是否在堆栈上的有效方法

    对于调试来说 判断特定函数是否位于调用堆栈的较高位置通常很有用 例如 我们通常只想在某个函数调用我们时运行调试代码 一种解决方案是检查上方的所有堆栈条目 但如果这是在堆栈深处并重复调用的函数中 这会导致过多的开销 问题是找到一种方法 使我们
  • java在哪里寻找文件?

    我正在尝试用java读取文件 Public class Test public static void main String args throws IOException BufferedReader f new BufferedRea
  • 将 Nhibernate 查询转换为通用列表时出错

    我有一个简单的实体称为EmployeeEntity有属性ID Name Age Organisation and Designation 我只是使用查询来查询数据库 IQuery query session CreateQuery sele
  • 忽略 Powershell Invoke-RestMethod 中的自签名证书不起作用(又变了......)

    使用忽略证书验证的标准解决方案后 Invoke RestMethod正在返回 Invoke RestMethod A system error occurred and has been logged Please try again la
  • Matlab - 如何替换向量中的所有特殊字符?

    是否可以通过正则表达式替换matlab向量中的所有特殊字符 谢谢 EDIT 谢谢你的回复 我正在努力实现以下目标 我有一个文本文件 其中包含小说中的几个段落 我已将此文件读入向量 fileText Token1 token 2 token
  • 静态对象的私有析构函数是如何调用的? [复制]

    这个问题在这里已经有答案了 可能的重复 无法访问单例类析构函数中的私有成员 我正在实现一个单例 如下所示 class A public static A instance private A void cout lt lt In the c
  • 为什么需要将 ~/.rbenv/bin 添加到我的路径中?

    我读到rbenv 无法更改全局 ruby 版本我需要添加 rbenv bin到我的 PATH 以便 rbenv 工作 文中也提到了这一点rbenv 文档但该目录不存在 如下所示 ls a rbenv plugins shims versio
  • .NET 反射:检测 IEnumerable

    我正在尝试检测 Type 对象的特定实例是否是通用的 IEnumerable 我能想到的最好的办法是 theType might be typeof IEnumerable
  • Sqlplus可以将文件内容读取到变量中吗?

    我已经修改 sqlplus 一段时间了 我已经设法让 sqlplus 将文件的内容读入替换变量 如下所示 exit sqlplus s login pass db script sql cat file txt 这主要按照我的脚本要求工作
  • 使用 DirectShow.NET 从网络摄像头捕获帧

    我是 DirectShow 的新手 所以这个库的某些部分我不太理解 我已经看到示例 DxSnap 但我需要捕获帧而不预览它 进行进一步处理 我该怎么做 如果您主要关心的是 访问网络摄像头 而不是 使用 DirectShow 访问网络摄像头
  • AVPlayer 不同步

    我实在是没办法了 只好再请教大家了 我正在构建一个使用 AVPlayer 的三个实例的 iPhone 应用程序 他们同时进行比赛 这一点非常重要 我曾经运行过这段代码 CMClockRef syncTime CMClockGetHostTi