iPad でコードを実行すると VTDecompressionSessionCreate を使用してエラー -12910 (kVTVideoDecoderUnsupportedDataFormatErr) が発生しますが、sim では発生しません。私は Avios ( https://github.com/tidwall/Avios ) を使用しています。これは関連するセクションです。
private func initVideoSession() throws {
formatDescription = nil
var _formatDescription : CMFormatDescription?
let parameterSetPointers : [UnsafePointer<UInt8>] = [ pps!.buffer.baseAddress, sps!.buffer.baseAddress ]
let parameterSetSizes : [Int] = [ pps!.buffer.count, sps!.buffer.count ]
var status = CMVideoFormatDescriptionCreateFromH264ParameterSets(kCFAllocatorDefault, 2, parameterSetPointers, parameterSetSizes, 4, &_formatDescription);
if status != noErr {
throw H264Error.CMVideoFormatDescriptionCreateFromH264ParameterSets(status)
}
formatDescription = _formatDescription!
if videoSession != nil {
VTDecompressionSessionInvalidate(videoSession)
videoSession = nil
}
var videoSessionM : VTDecompressionSession?
let decoderParameters = NSMutableDictionary()
let destinationPixelBufferAttributes = NSMutableDictionary()
destinationPixelBufferAttributes.setValue(NSNumber(unsignedInt: kCVPixelFormatType_32BGRA), forKey: kCVPixelBufferPixelFormatTypeKey as String)
var outputCallback = VTDecompressionOutputCallbackRecord()
outputCallback.decompressionOutputCallback = callback
outputCallback.decompressionOutputRefCon = UnsafeMutablePointer<Void>(unsafeAddressOf(self))
status = VTDecompressionSessionCreate(nil, formatDescription, decoderParameters, destinationPixelBufferAttributes, &outputCallback, &videoSessionM)
if status != noErr {
throw H264Error.VTDecompressionSessionCreate(status)
}
self.videoSession = videoSessionM;
}
ここpps
とsps
は、PPS および SPS フレームを含むバッファーです。
上記のように、奇妙なことに、シミュレーターでは完全に正常に動作しますが、実際のデバイスでは動作しません。どちらも iOS 9.3 上にあり、デバイスと同じハードウェアをシミュレートしています。
このエラーの原因は何ですか?
さらに一般的に言えば、VideoToolbox の API リファレンスとエラー ドキュメントはどこで入手できますか? 本当に、Apple のサイトで関連性のあるものを見つけることができません。