我一直在研究gstreamer苹果媒体编码器插件,并改进了基于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 和配备 Radeon HD 6630M 的 2011 年中期 Mac mini 编码仍然消耗 80% 到 130% 的 CPU - 这表明它没有硬件加速。
在哪些硬件配置或给定哪些压缩参数(例如哪个kVTCompressionPropertyKey_ProfileLevel
(上,VTCompressionSession
使用硬件加速编码?
根据 http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/tree/sys/applemedia/vtenc.c,您将 NULL 传递给 VTCompressionSessionCreate(( 以获取 encoderSpecification 参数。创建编码器规范字典,kVTVideoEncoderSpecification_EnableHardwareAcceleratedVideoEncoder设置为 kCFBooleanTrue。
上面的管道对确定是否实际上是导致高 CPU 使用率的编码过程没有太大帮助。与流中的时钟不同步,这意味着解码/编码的整个过程将尽可能快地进行。
由于解码站可能使用的是软件解码器,因此您遇到的高 CPU 使用率很可能是由于解码过程造成的。
我建议将输出与以下内容进行比较:
gst-launch-1.0 videotestsrc is-live=true ! vtenc_h264 ! qtmux ! filesink location=test.mp4
特别要注意属性"is-live=true",它指示videotestsrc充当实时源,因此以恒定的速率推送缓冲区,而不是下游消耗它们的速度。