2016-09-20 32 views
0

ビデオファイルを圧縮する関数を作成しました。これはAVAssetWriterを使用し、ビデオトラックとオーディオトラックの入力と出力を追加します。書き込みを開始すると、オーディオトラックのAVAssetReaderが読み込みを開始すると、エラーが発生します。audioReader.startReading()エラーは*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[AVAssetReader startReading] cannot be called again after reading has already started'です。AVAssetWriterを使用したビデオ圧縮

コード:https://gist.github.com/jaumevn/9ba329aaf49c81c57a276fd135f53f20

は、誰もがここで問題なのかを見ることができますか?ありがとう!

答えて

0

コードの77行目で、同じファイルで2番目のAVAssetReaderを開始しています。

2人の読者を接続する必要はなく、AVAudioAssetReaderを既存のAVAssetReaderの出力として接続する必要があります。このような

何か:キャプチャし、読者からのバッファを処理するためにAVCaptureVideoDataOutputSampleBufferDelegateとAVCaptureAudioDataOutputSampleBufferDelegateを使っへ

let videoReaderSettings : [String : Int] = [kCVPixelBufferPixelFormatTypeKey as String : Int(kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange)] 
    let videoReaderOutput = AVAssetReaderTrackOutput(track: videoAssetTrack, outputSettings: videoReaderSettings) 
    let videoReader = try! AVAssetReader(asset: videoAssetUrl) 

    var settings = [String : AnyObject]() 
    settings[AVFormatIDKey] = Int(kAudioFormatLinearPCM) 
    let audioReaderOutput = AVAssetReaderTrackOutput(track: audioAssetTrack, outputSettings: settings) 

    videoReader.addOutput(videoReaderOutput) 
    videoReader.addOutput(audioReaderOutput) 

    videoWriter.startWriting() 
    videoReader.startReading() 

ルック。

関連する問題