【问题标题】:When does VideoToolbox' VTCompressionSession benefit from hardware acceleration?VideoToolbox 的 VTCompressionSession 何时受益于硬件加速?
【发布时间】:2013-10-08 19:44:44
【问题描述】:

我一直致力于 gstreamer applemedia encoder plugins 并改进了基于 VideoToolbox 的视频编码。运行 gstreamer 管道,例如:

$ gst-launch-1.0 filesrc location=source.avi ! decodebin  ! vtenc_h264 ! h264parse ! qtmux name=mux ! filesink location=sink.mp4

我预计在 Mac OS 系统上使用 VTCompressionSession 编码 h264 视频时 CPU 使用率会非常低。然而,在我测试过的系统上:2009 年中期配备 GeForce 9600M 的 Macbook Pro 和 2011 年中期配备 Radeon HD 6630M 的 Mac mini 编码仍然消耗 80% 到 130% 的 CPU - 这表明它没有硬件加速。

VTCompressionSession 在哪些硬件配置上或给定哪些压缩参数(例如针对哪些kVTCompressionPropertyKey_ProfileLevel)使用硬件加速编码?

【问题讨论】:

    标签: macos gstreamer video-encoding hardware-acceleration core-video


    【解决方案1】:

    根据http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/tree/sys/applemedia/vtenc.c,您将NULL 传递给编码器规范参数的VTCompressionSessionCreate()。创建编码器规范字典,将 kVTVideoEncoderSpecification_EnableHardwareAcceleratedVideoEncoder 设置为 kCFBooleanTrue。

    【讨论】:

    • 是的,这是一个很好的答案。与此同时,我还发现了这个 Handbrake 分支,他们在其中有更多关于 API 的这些未记录 (?) 参数的详细信息。 github.com/galad87/HandBrake-QuickSync-Mac/commit/… - 对文档指针或更多详细信息的任何附加都会有所帮助。
    【解决方案2】:

    上述管道无法帮助您确定是否实际上是编码过程导致了高 CPU 使用率。流中没有与时钟同步,这意味着整个解码/编码过程将尽可能快。

    由于 decodebin 可能正在使用软件解码器,因此您遇到的高 CPU 使用率很可能是由于解码过程造成的。

    我建议将输出与:

    gst-launch-1.0 videotestsrc is-live=true ! vtenc_h264 ! qtmux ! filesink location=test.mp4
    

    请特别注意属性“is-live=true”,它指示 videotestsrc 充当实时源,因此以恒定速率推送缓冲区,而不是下游可以消耗它们的速度。

    【讨论】:

      猜你喜欢
      • 2016-04-28
      • 2015-10-03
      • 1970-01-01
      • 2014-03-15
      • 2023-03-04
      • 2011-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多