1

これらの単純なコード行 (アプリには何もありません) は、iOS 9 (iPhone 6 および iPhone 4S) では正常に動作しますが、iOS 8 (iPhone 5 および iPod Touch 5G) では動作しません。

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!");
}

また、より低い解像度で試したり、オプションのパラメーターの一部またはすべてを指定しようとしたりしましたが、いずれの場合も iOS 9 で動作し、iOS 8 ではエラー -12902 (kVTParameterErr) で失敗します。一部のパラメータが間違っていることを知ってうれしいですが、どのパラメータが iOS 9 で間違っていると見なされないのはなぜですか?

VTCopyVideoEncoderList は、すべての場合に avc1 (H264) エンコーダーが存在するリストも提供することに注意してください。

何が起こっているのか分かりますか?

4

1 に答える 1

1

答えは少し遅れていますが、他の人にとっては役立つと思います。圧縮セッションの作成中に指定するiOS 8必要があります。VTCompressionOutputCallback outputCallbackドキュメントから:

@param  outputCallback
    The callback to be called with compressed frames.
    This function may be called asynchronously, on a different thread from the one that calls VTCompressionSessionEncodeFrame.
    Pass NULL if and only if you will be calling VTCompressionSessionEncodeFrameWithOutputHandler for encoding frames.

次に、VTCompressionSessionEncodeFrameWithOutputHandlerから始まるiOS 9:

__OSX_AVAILABLE_STARTING(__MAC_10_11, __IPHONE_9_0)

于 2017-03-20T07:24:44.353 に答える