【问题标题】:Video compression using AVAssetWriter使用 AVAssetWriter 进行视频压缩
【发布时间】:2016-09-20 10:23:42
【问题描述】:

我创建了一个压缩视频文件的函数。它使用AVAssetWriter 并为视频和音频轨道添加输入和输出。当它开始写入时,当音轨的AVAssetReader 开始读取时,我收到一个错误audioReader.startReading()。这里是错误,*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[AVAssetReader startReading] cannot be called again after reading has already started'

代码:https://gist.github.com/jaumevn/9ba329aaf49c81c57a276fd135f53f20

谁能看出这里有什么问题?谢谢!

【问题讨论】:

    标签: ios video compression avfoundation


    【解决方案1】:

    代码的第 77 行,您正在同一个文件上启动第二个 AVAssetReader。

    您不需要连接两个阅读器,而是应该连接您的 AVAudioAssetReader 作为现有 AVAssetReader 的输出。

    类似这样的:

    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()
    

    研究使用 AVCaptureVideoDataOutputSampleBufferDelegate 和 AVCaptureAudioDataOutputSampleBufferDelegate 来捕获和处理来自阅读器的缓冲区。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-09
      • 2022-11-02
      • 1970-01-01
      • 1970-01-01
      • 2014-05-28
      • 1970-01-01
      相关资源
      最近更新 更多