强制 QMediaPlayer 为视频擦除应用程序准确更新位置?

2023-12-20

我正在编写一个应用程序,允许用户浏览打开的视频。使用 Qt 5.3 在 Windows 7/8 上进行开发,我一直在使用QMediaPlayer and QVideoWidget遵循qvideowidget示例项目。结果已经很不错了,除了QVideoWidget好像只在空闲的时候更新。尽管如此,这仍然是一个良好的开始并且可用。

然而,当我在 Mac OS 10.10(同样使用 Qt 5.3)上构建时,擦洗的行为就好像视频中每秒只有一帧一样。当我拖动“位置”滑块时,视频会从一帧跳到一秒后的帧,然后再跳一秒,即使我正在调用QMediaPlayer::setPosition几次在这两个帧之间的位置。

可以使用以下命令重现该问题videowidget这里是 Qt 5.3 附带的示例:Qt\Examples\Qt-5.3\multimediawidgets\videowidget。在 Windows 机器上拖动滑块时,QVideoWidget在间隔相当近的帧之间移动。当在 Mac 上(至少在我的)上拖动滑块时,QVideoWidget在相隔约一秒的帧之间跳转。无论我等待“中间”帧渲染多久,除非我点击“播放”按钮,否则它不会发生。

我试过打电话QMediaPlayer::play() and QMediaPlayer::pause()一个接一个地强制更新,但这似乎不起作用——QMediaPlayer异步工作,因此更新没有时间生效。

如果我检查的值QMediaPlayer::position,我发现它实际上在这些跳跃之间没有改变。看来当我打电话时QMediaPlayer::setPosition,它实际上在 Mac 上将位置舍入为一秒增量,在 Windows 计算机上舍入为更精细的增量。

理想情况下,我想跳到视频中的特定位置并立即在视频上渲染该帧QVideoWidget。有什么办法可以强制QMediaPlayer准确设置位置并更新关联QVideoWidget?有没有更好的方法在视频中实现平滑擦洗?

感谢您的帮助!


万一其他人也有类似的问题...

我最好的猜测是,该问题源于所使用的编解码器的限制QMediaPlayer,因为这似乎是两个平台之间的主要区别。我没有直接处理编解码器问题,而是寻找其他选择。

MLT (http://www.mltframework.org/ http://www.mltframework.org/)看起来很有希望,但编译起来很痛苦,而且主要作者似乎已经决定只向商业用户提供 SDK 支持。

libVLC (https://wiki.videolan.org/LibVLC/ https://wiki.videolan.org/LibVLC/)看起来好多了。特别是,我一直在使用vlc-qt (https://github.com/ntadej/vlc-qt https://github.com/ntadej/vlc-qt)。后者的界面对于用户来说看起来非常熟悉QMediaPlayer and QVideoWidget。在我自己的应用程序中,这是一个简单的替换,结果是 Windows 和 Mac 上的视频擦除更加流畅。

希望这对其他人有帮助!

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

强制 QMediaPlayer 为视频擦除应用程序准确更新位置? 的相关文章

  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern

随机推荐