2014-01-26 32 views
7

我試圖在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中,這似乎工作正常。我可能會就此與蘋果進行接觸。

+0

對我來說固定的是將音頻轉換爲.m4a而不是.mp3。 – buildsucceeded

回答

5

我提出了TSI這個與蘋果,我不久後收到回覆:

感謝您的蘋果開發者技術支持(DTS)接觸。我們的工程師已審覈您的請求,並確定您遇到了目前尚無已知解決方法的已知錯誤。

他們指示我繼續並通過bugreport.apple.com提交bug,所以我這樣做了。希望他們能夠得到解決,因爲我們有相當多的功能駐留在此。

我的希望是,這有助於他人節省調試時的痛苦,如果它們遇到它,也是如此!

+0

蘋果是否在iOS 8中修復它?我有同樣的問題。 – derpoliuk

+0

它是iOS9,仍然一樣! –

+0

這實際上在iOS8中爲我做插入和附加音頻。它看起來像我在iOS7中被破解的核心問題,但在iOS8中修復(在iOS9中仍然適用於我)。如果您仍然看到問題,則可能值得使用您的特定代碼向Apple公開一個錯誤 – svguerin3