2

저는 gstreamer applemedia encoder plugins에서 작업 중이며 VideoToolbox 기반 비디오 인코딩을 개선했습니다.VideoToolbox의 VTCompressionSession은 언제 하드웨어 가속의 이점을 줍니까?

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

내가 맥 OS 시스템에서 VTCompressionSession를 사용 H264 비디오를 인코딩 할 때 매우 낮은 CPU 사용량을보고 기다리고 있었다 : 같은 gstreamer를 파이프 라인을 실행합니다. 그러나 테스트 한 시스템에서 2009 년 중반 Macbook Pro GeForce 9600M 및 Mid 2011 Mac mini와 Radeon HD 6630M을 사용하면 인코딩 속도는 여전히 80 %에서 130 % 사이에서 이루어 지므로 하드웨어 가속화가되지 않음을 나타냅니다.

하드웨어 구성 또는 어떤 압축 매개 변수 (예 : kVTCompressionPropertyKey_ProfileLevel)가 하드웨어 가속 인코딩을 사용합니까?

답변

5

http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/tree/sys/applemedia/vtenc.c에 따르면 encoderSpecification 매개 변수에 대해 VTCompressionSessionCreate()에 NULL을 전달합니다. kVTVideoEncoderSpecification_EnableHardwareAcceleratedVideoEncoder가 kCFBooleanTrue로 설정된 인코더 사양 사전을 만듭니다.

+0

예, 좋은 답변입니다. 한편, 나는이 Handbrake 지점에서 API에 대한 문서화되지 않은 (?) 매개 변수에 대한 자세한 정보를 찾아 냈습니다. https://github.com/galad87/HandBrake-QuickSync-Mac/commit/2c1332958f7095c640cbcbcb45ffc955739d5945#diff-72d938f71df3506b8ad74530b39e7a0bR83 - 설명서에 대한 안내문이나 자세한 내용이 도움이 될 것입니다. – drott

1

위의 파이프 라인은 실제로 높은 CPU 사용량을 담당하는 인코딩 프로세스인지 여부를 결정하는 데 많은 도움이되지 않습니다. 스트림의 시계와 동기화가 없습니다. 즉, 디코딩/인코딩의 전체 과정이 최대한 빨리 진행됩니다.

decodebin은 아마도 소프트웨어 디코더를 사용하기 때문에 발생하는 높은 CPU 사용량은 대부분 디코딩 프로세스 때문일 수 있습니다.

내가 가진 출력 비교하는 것이 좋습니다 :

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

참고 특수 속성이 "입니다 - 라이브 진정한 ="라이브 소스 역할을 videotestsrc을 지시하고, 따라서 일정한 속도로 버퍼를 밀고하는을 다운 스트림만큼 빨리 처리 할 수는 없습니다.