我正在使用 MPMediaPickerController 来允许用户从设备上的库中选择视频和歌曲。我允许这样做:initWithMediaTypes:MPMediaTypeAny
选择器的初始化。导出完成后,用户可以在应用内播放歌曲或视频。这是我将其剥离为核心功能后的电影导出代码:
- (void)mediaPicker:(MPMediaPickerController*)mediaPicker didPickMediaItems:(MPMediaItemCollection*)mediaItemCollection {
AVAssetExportSession *exportSession;
NSString *filePath;
NSURL *fileUrl;
for (MPMediaItem *item in mediaItemCollection.items) {
NSURL *assetUrl = [item valueForProperty:MPMediaItemPropertyAssetURL];
AVAsset *currAsset = [AVAsset assetWithURL:assetUrl];
exportSession = [[AVAssetExportSession alloc] initWithAsset:[AVAsset assetWithURL:assetUrl] presetName:AVAssetExportPresetHighestQuality];
exportSession.shouldOptimizeForNetworkUse = YES;
exportSession.outputFileType = AVFileTypeQuickTimeMovie;
filePath = [title stringByAppendingString:@".mov"];
fileUrl = [NSURL fileURLWithPath:[[NSFileManager documentDirectory] stringByAppendingPathComponent:filePath]];
exportSession.outputURL = fileUrl;
dispatch_group_enter(dispatchGroup);
[exportSession exportAsynchronouslyWithCompletionHandler:^{
// success
}
dispatch_group_leave(dispatchGroup);
}];
}
这个类似的代码可以很好地处理音频,但对于视频,视频的音频不会播放。iTunes 中的大多数内容都受保护且不可导出,因此我想用我用 iPhone 拍摄的自制快速视频进行测试。我拍摄了视频,将它拖到了 iTunes 中(我把它做成了一个“音乐视频”,这样它就可以正确显示并可以导出到我的手机库中)。然后我同步并将其发送到我的设备进行测试。
在应用程序中,视频在媒体选择器中显示良好,我可以将其导出,并且看不到任何错误。但是,当我在应用程序中播放它时,它只播放视频而不播放音频。我从其他来源导入的其他视频可以很好地播放视频的音频,所以我不“认为”它是播放器本身。
关于为什么音频不会来自媒体选择器的这种导出,我可能会在这里遗漏一些东西吗?提前感谢您在此问题上提供的任何帮助!