2

Я работал над gstreamer applemedia encoder plugins и улучшил кодирование видео на основе VideoToolbox. Запуск GStreamer трубопровода, как:Когда «VTCompressionSession» VideoToolbox выигрывает от аппаратного ускорения?

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

Я ожидал увидеть очень низкий уровень использования процессора при кодировании h264 видео с помощью VTCompressionSession на системах Mac OS. Однако в системах, которые я тестировал: в середине 2009 года Macbook Pro с GeForce 9600M и Mid 2011 Mac mini с Radeon HD 6630M кодирование по-прежнему потребляет от 80% до 130% процессора, что указывает на то, что он не аппаратно ускорен.

На каких конфигурациях оборудования или заданных параметрах сжатия (например, для которых kVTCompressionPropertyKey_ProfileLevel) VTCompressionSession использует аппаратное ускоренное кодирование?

ответ

5

В соответствии с http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/tree/sys/applemedia/vtenc.c вы передаете значение NULL в VTCompressionSessionCreate() для параметра encoderSpecification. Создайте словарь спецификации кодировщика с помощью kVTVideoEncoderSpecification_EnableHardwareAcceleratedVideoEncoder, установленный на kCFBooleanTrue.

+0

Да, это хороший ответ. Тем временем я также нашел эту ветку Handbrake, где они имеют более подробную информацию об этих недокументированных (?) Параметрах для API. https://github.com/galad87/HandBrake-QuickSync-Mac/commit/2c1332958f7095c640cbcbcb45ffc955739d5945#diff-72d938f71df3506b8ad74530b39e7a0bR83 - Любое дополнительное указание на документацию или более подробную информацию было бы полезно. – drott

1

Вышеуказанный конвейер не поможет вам определить, действительно ли это процесс кодирования, который отвечает за высокий уровень использования ЦП. Синхронизация с часами в потоке отсутствует, что означает, что весь процесс декодирования/кодирования будет проходить как можно быстрее.

Поскольку decodebin, вероятно, использует программный декодер, использование высокопроизводительного процессора, которое вы испытываете, скорее всего, связано с процессом декодирования.

Я бы рекомендовал, чтобы сравнить результат с:

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

Примечания специально свойством «является-жить = истина», которая инструктирует videotestsrc выступать в качестве живого источника и, следовательно, толкая буфера с постоянной скоростью и не так быстро, как нисходящий поток может их уничтожить.

Смежные вопросы