Я пытаюсь кодировать некоторый поток только видео, используя H264, и я готов использовать аппаратный кодер, чтобы сравнить как качество, так и расход ресурсов между оборудованием и Кодирование процессора. Дело в том, что я не могу заставить ОС использовать аппаратный кодер.Как отлаживать, почему Mac OS не использует аппаратное обеспечение Кодировщик H264
Это код, я использую для создания VTCompressionSession:
var status: OSStatus
let encoderSpecifications: CFDictionary? = [
kVTVideoEncoderSpecification_EnableHardwareAcceleratedVideoEncoder as String: true,
kVTVideoEncoderSpecification_RequireHardwareAcceleratedVideoEncoder as String: true,
kVTVideoEncoderSpecification_EncoderID as String: "com.apple.videotoolbox.videoencoder.24rgb" // Tried without this paramenter so the system can decide what encoder ID should be using but doesn't work anyway.
]
let pixelBufferOptions: CFDictionary? = [
kCVPixelBufferWidthKey as String: Int(width),
kCVPixelBufferHeightKey as String: Int(height),
kCVPixelBufferPixelFormatTypeKey as String: Int(kCVPixelFormatType_24RGB) // Tried commenting this in case that there was a pixelformat constraint but didn't change anything
];
status = VTCompressionSessionCreate(kCFAllocatorDefault, width, height, CMVideoCodecType(kCMVideoCodecType_H264), encoderSpecifications, pixelBufferOptions, nil, { (outputCallbackRefCon: UnsafeMutablePointer<Void>, sourceFrameRefCon: UnsafeMutablePointer<Void>, status: OSStatus, infoFlags: VTEncodeInfoFlags, sampleBuffer: CMSampleBuffer?) -> Void in
...
}, unsafeBitCast(self, UnsafeMutablePointer<Void>.self), &compressionSession)
Я открыл консоль и это единственное соответствующее сообщение я получаю, когда я пытаюсь создать сеанс:
10/28/15 22:06:27.711 Dupla-Mac[87762]: <<<<VTVideoEncoderSelection>>>> VTSelectAndCreateVideoEncoderInstanceInternal: no video encoder found for 'avc1'
Это код состояния я получаю, когда я использую EncoderID:
2015-10-28 22:17:13.480 Dupla-Mac[87895:5578917] Couldn't create compression session :(-12908
И это один я получаю, когда я не использую EncoderID:
2015-10-28 22:18:16.695 Dupla-Mac[87996:5581914] Couldn't create compression session :(-12915
Оба связаны с отсутствием доступности ресурса, но не смог найти никакой разницы. Я проверил, что наиболее известные функции, которые могут использовать аппаратный кодер, отключены, но я не знаю, как это проверить. AirPlay выключен, QuickTime выключен, нет доступа к камере, и поэтому.
TL; DR: есть ли способ заставить или знать, что стратегия ОС используется для включения аппаратного кодировщика, и в конечном итоге знать почему он не доступен в любой момент?
Заранее благодарен!