2013-09-22 30 views
0

我有一個完全可用的IOS6應用程序,在使用AVComposition時會在IOS7中中斷。AVPlayerItemVideoOutput文件不能用於AVComposition IOS7

這裏的問題是: 在先前的視圖控制器,我捕捉到用戶使用AVPlayerItemVideoOutput & AVAssetWriterInputPixelBufferAdaptor生成視頻輸出文件屏幕。在我當前的視圖控制器中,我將生成的視頻文件添加到AVComposition中,以生成該文件與某些音頻之間的視頻合成。在IOS6中,此過程完美工作,並且AVExportSession完成。在IOS7中,導出過程沒有完成(完成處理程序永遠不會被調用,狀態始終爲AVAssetExportSessionStatusExporting)。

這裏是我的僞代碼:

AVURLAsset *asset = [AVURLAsset URLAssetWithURL:self.metaInfo.videoCaptureFile options:nil]; 

    AVMutableComposition* mixComposition = [[AVMutableComposition alloc] init]; 


    AVMutableCompositionTrack *track = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; 
    [track insertTimeRange:CMTimeRangeMake(kCMTimeZero, firstAsset.duration) ofTrack:[[asset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] atTime:kCMTimeZero error:&error]; 

    AVMutableCompositionTrack *audioTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid]; 
    [audioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, secondAsset.duration) ofTrack:[[audioAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0] atTime:kCMTimeZero error:&error]; 


    AVMutableVideoCompositionInstruction * MainInstruction = [AVMutableVideoCompositionInstruction videoCompositionInstruction]; 


    /// Code for processing the composition 

    AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset:mixComposition presetName:AVAssetExportPreset640x480]; 


    // Code for setting up exporter 

    [exporter exportAsynchronouslyWithCompletionHandler:^ 
    { 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      [self exportDidFinished:exporter]; 
     }); 
    }]; 

了代碼調試後,問題就來了下來,目前正在使用的生成的視頻文件。如果我將asset更改爲硬編碼文件,則導出器完成。有趣的是,從AVPlayerItemVideoOutput生成的視頻文件在MPMoviePlayerViewController中可以正常播放。 IOS7中的AVPlayerItemVideoOutputAVAssetWriterInputPixelBufferAdaptor有什麼變化,會阻止輸出文件在合成中使用?我是否需要在構圖中添加其他規範?它是否必須處理不同的幀率?

感謝您的幫助!

+0

我有同樣的問題 - 這在iOS6中運行良好。我仍然在尋找解決方案。 –

+0

謝謝吉姆。我正在提交bugist sdk。讓我知道如果你想出任何東西。 – kungfoo

回答

0

這可能是您的測試設備特有的低存儲空間問題,其中AVAssetExportSession無法將最終電影資產(或某些中間數據)寫入磁盤。我會檢查問題是否存在於其他設備上。在使用普通版本時,我在iPhone 4(iOS 7)上遇到了同樣的問題,但在iPad 2(iOS 7)上遇到了同樣的問題。

+0

我會檢查這一點,但我認爲這不太可能。 1.我有很多空間2.如果我用另一個工具替換第一個輸出(~10秒)。這100%的時間複製。 – kungfoo

+0

@kungfoo - 這很有趣;有我的直覺。你有沒有用你的代碼試過不同的設備/模型?讓我感到困惑的是,我的類似AVAssetExportSession錯誤是(迄今爲止)特定於iPhone 4的。任何其他新的開發或對蘋果bug的移動? –