AVAssetExportSession失败 – 合并2个WAV文件(iOS7)

我试图合并2个WAV文件,使用AVAssetExportSession,在iOS7下。 我已经确认文件在那里,似乎并没有腐败或任何东西。 这些WAV文件是从设备本身的录制文件中提取的,而且是相对较小的文件。

调用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或创build导出会话似乎没有问题。 我对资产进行了检查,并且它们都是可读的,可播放的和可导出的(根据obj上的bool值)。

我在这里错过了很明显的东西吗 此代码适用于iOS6。 随时让我知道,如果我需要提供更多的信息,并提前感谢您可以提供任何方向!

编辑#1 :我试图添加跟踪机制,类似于这个职位: AVAssetExportSession – 在IOS中join2个MP4文件 ,但在那里没有运气,同样的问题。 此外,如果需要知道,当我从WAV切换到CAF时发生同样的错误。 这是我在打印出supportedFileTypes的时候supportedFileTypes ,当试图使用任何audio格式时:

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

由于audio格式在那里,并且出口商对于可导出,可播放和可读的资产都返回YES,所以我没有理由认为这种错误会导致失败。

编辑#2 :一些额外的信息 – 即使当我把代码剥离到最低限度,只需从NSURL创build一个AVAsset,然后用透传预设将它提供给AVAssetExportSession,它仍然只是在iOS7失败。 必须有我在这里失踪的东西。

我testing了这个相同的代码与video(MP4)文件,并在iOS7完美的作品。 我使用了相同的代码,并对WAV,CAF和M4A文件进行了调整,每次都会出现“该操作不支持该介质”的错误。 错误。

这是苹果的代码中的错误,或者我们甚至能够与iOS7的audio文件做到这一点? 在“iOS7新增function”文档的Apple AV Foundation部分中,我没有看到任何具体的内容,在iOS6中,这似乎工作正常。 我可能会在这方面与苹果进行接触。

我向苹果提交了TSI,不久之后我收到了一个回应:

感谢您联系Apple开发者技术支持(DTS)。 我们的工程师已经审查了您的请求,并确定您遇到了目前尚无已知解决方法的已知错误。

他们指示我继续并通过bugreport.apple.com提交bug,所以我这样做了。 希望他们能够得到解决,因为我们有相当多的function驻留在此。

我的希望是,这有助于他人节省时间来debugging痛苦,如果他们遇到它,以及!