2

基本的に、Apple が提供する 2 つのエンコーダー、h264 または avc1 と jpeg があります。

let settings:[String:AnyObject] = [
    AVVideoCodecKey: AVVideoCodecJPEG,
    AVVideoWidthKey: 720,
    AVVideoHeightKey: 1280,
    AVVideoQualityKey: 0.5
]
//Line below is where the compilation error happened
VideoInput = AVAssetWriterInput(mediaType: AVMediaTypeVideo, outputSettings: settings) 
VideoInput.expectsMediaDataInRealTime = true
assetWriter.addInput(VideoInput)

ここで、辞書から AVVideoQualityKey:0.5 を削除すると、完全に実行されます。鍵付き?いいえ。以下に引用されているエラー メッセージによるコンパイル エラーです。

出力設定ディクショナリには無効なキーが 1 つ以上含まれています: Quality'

辞書に AVVideoQualityKey がない場合、最終的なムービー ファイルは mjpeg エンコーダーでエンコードされました。大きすぎるので、jpeg の品質キーを 0.5 に設定する必要があります。

別の方法として、samplebuffer を処理して cvpixelbuffer に変換し、自分でエンコードしてから元に戻して、assetwriter で書き込む方法を考えました。しかし、AVVideoQualityKey を使用できればエンコーディングがハードウェア アクセラレーションされると確信しているため、あまり効率的ではないようです。

4

1 に答える 1

8

私も同じ問題を抱えていました。しかし、私は答えを見つけました。これを試して:

let videoSettings: [String: AnyObject] = [
                AVVideoCodecKey: AVVideoCodecJPEG,
                AVVideoWidthKey: 720,
                AVVideoHeightKey: 1280,
                AVVideoCompressionPropertiesKey: [AVVideoQualityKey: 0.5]
            ]

これは私にとってはうまくいきます。

于 2016-03-26T18:24:14.277 に答える