我試圖在iOS7下使用AVAssetExportSession合併2個WAV文件。我已經確認這些文件在那裏,並且似乎沒有損壞或任何東西。這些是從設備本身完成的錄製內容中獲得的WAV文件,它們是相對較小的文件。AVAssetExportSession失敗 - 合併2個WAV文件(iOS7)
當它調用exportAsync方法時,立即失敗,立即在完成塊中出現「Operation Stopped」錯誤(原因描述爲:「此操作不支持此介質」)。這發生在模擬器和設備本身。請參閱下面我出口代碼:
NSError *avError = nil;
NSFileManager *fileManager = [NSFileManager defaultManager];
AVURLAsset *tmpAsset = [[AVURLAsset alloc] initWithURL:_tmpRecordingUrl options:@{AVURLAssetPreferPreciseDurationAndTimingKey: @YES}];
AVURLAsset *permAsset = [[AVURLAsset alloc] initWithURL:_url options:@{AVURLAssetPreferPreciseDurationAndTimingKey: @YES}];
AVMutableComposition *composition = [AVMutableComposition composition];
[composition insertTimeRange:CMTimeRangeMake(kCMTimeZero, permAsset.duration) ofAsset:permAsset atTime:kCMTimeZero error:&avError];
[composition insertTimeRange:CMTimeRangeMake(kCMTimeZero, tmpAsset.duration) ofAsset:tmpAsset atTime:CMTimeMakeWithSeconds(_positionSlider.value, 1) error:&avError];
AVAssetExportSession *export = [[AVAssetExportSession alloc] initWithAsset:composition presetName:AVAssetExportPresetPassthrough];
if ([fileManager fileExistsAtPath:[_workingUrl path]]) {
[fileManager removeItemAtURL:_workingUrl error:&avError];
}
export.outputFileType = AVFileTypeWAVE;
export.outputURL = _workingUrl;
[export exportAsynchronouslyWithCompletionHandler:^(void) {
// fails
}];
我還證實,「avError」從來沒有被填充,所以似乎沒有能與插入timeRanges或創建導出會話的問題。我對資產進行了檢查,並且它們都是可讀的,可播放的和可導出的(根據obj上的bool值)。
我在這裏錯過了一些明顯的東西嗎?此代碼適用於iOS6。隨時讓我知道,如果我需要提供更多的信息,並提前感謝您可以提供任何方向!
編輯#1:我試圖添加跟蹤機制,類似於這篇文章有:AVAssetExportSession - Join 2 mp4 files in IOS,但沒有運氣那裏,同樣的問題。另外,如果需要知道,當我從WAV切換到CAF時發生同樣的錯誤。這裏是我所得到的,當我打印出來的supportedFileTypes
嘗試使用任何音頻類型格式時:
(
"com.apple.quicktime-movie",
"com.apple.m4a-audio",
"public.mpeg-4",
"com.apple.m4v-video",
"public.3gpp",
"org.3gpp.adaptive-multi-rate-audio",
"com.microsoft.waveform-audio",
"public.aiff-audio",
"public.aifc-audio",
"com.apple.coreaudio-format"
)
由於音頻格式都在那裏,並出口正在恢復是對資產可以出口,可玩並且可讀,我沒有看到爲什麼它會因這種錯誤而失敗。
EDIT#2:一些附加信息 - 甚至當我剝去代碼下降到其最低限度,只是從一個NSURL創建AVAsset,然後將其與直通預設供給到AVAssetExportSession,它仍然只是失敗在IOS 7。我必須在這裏失去一些東西。
我測試了這個相同的代碼與視頻(MP4)文件,它在iOS7中完美的作品。我使用了相同的代碼,並對WAV,CAF和M4A文件進行了調整,並且每次都出現「該操作不支持該介質」的問題。錯誤。
這是Apple的代碼中的錯誤,還是我們甚至可以使用iOS7對音頻文件進行此操作?我沒有在「iOS7新增功能」文檔的Apple AV Foundation部分中看到有關此事的任何具體內容,在iOS6中,這似乎工作正常。我可能會就此與蘋果進行接觸。
對我來說固定的是將音頻轉換爲.m4a而不是.mp3。 – buildsucceeded