Эти простые строки кода (ничто иное в приложении) отлично работают на iOS 9 (iPhone 6 и iPhone 4S), но не на iOS 8 (iPhone 5 и iPod Touch 5G):VTCompressionSessionCreate работает на iOS 9, но не на iOS 8
VTCompressionSessionRef videoEncoder;
OSStatus err = VTCompressionSessionCreate(NULL, 1920, 1080,
kCMVideoCodecType_H264,
NULL,
NULL,
NULL,
NULL,
(__bridge void*)self, &videoEncoder);
if (err != noErr) {
NSLog(@"Error when creating compression session : %d", (int)err);
} else {
NSLog(@"All systems go!");
}
Я также попытался с более низким разрешением, пытался предоставление некоторых или все необязательных параметров, во всех случаях он работает на прошивке 9 и терпит неудачу на прошивке 8 с ошибкой -12902 (kVTParameterErr). Приятно знать, что какой-то параметр неверен, но какой из них и почему он не считается ошибочным на iOS 9?
Обратите внимание, что VTCopyVideoEncoderList дает мне список, где кодер avc1 (H264) присутствует и во всех случаях.
Любая идея, что происходит?
Хороший вопрос, спасибо за упоминания о нем. Я закончил тем, что открыл заявку на поддержку в Apple, который ответил, что мой код действительно не работает на iOS 8, и нет никакой работы. Они не упомянули об использовании VTCompressionOutputCallback. –
Странно, потому что есть очевидное документированное обходное решение. Я использую 'VTCompressionSessionCreate' с обратным вызовом' VTCompressionOutputCallback' на основе C на 'iOS 8', и он отлично работает. –