从 MPMediaPickerController 导出视频 - 没有音频

Posted

技术标签:

【中文标题】从 MPMediaPickerController 导出视频 - 没有音频【英文标题】:Exporting video from MPMediaPickerController - no audio 【发布时间】:2013-03-04 00:28:58 【问题描述】:

我正在使用 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 中(我把它做成了一个“音乐视频”,这样它就可以正确显示并可以导出到我的手机库中)。然后我同步并将其发送到我的设备进行测试。

在应用程序中,视频在媒体选择器中显示良好,我可以将其导出而没有任何错误。但是,当我在应用程序中播放它时,它只播放视频而不播放音频。我从其他来源导入的其他视频可以很好地播放视频的音频,所以我不“认为”它是播放器本身。

关于为什么音频不会从媒体选择器的这种导出中出现,我可能在这里遗漏了什么吗?提前感谢您在此问题上提供的任何帮助!

【问题讨论】:

【参考方案1】:

不确定这是否是理想的解决方案,但我们发现解决此问题的唯一方法是将其更改为强制设置了 PresetPassthrough 的 m4v 格式。即:

exportSession = [[AVAssetExportSession alloc] initWithAsset:[AVAsset assetWithURL:assetUrl] presetName:AVAssetExportPresetPassthrough];
exportSession.shouldOptimizeForNetworkUse = YES;
exportSession.outputFileType = AVFileTypeAppleM4V;
filePath = [title stringByAppendingString:@".m4v"];

在进行更改后,音频和视频似乎适用于以这种方式在本地导入的视频。

【讨论】:

以上是关于从 MPMediaPickerController 导出视频 - 没有音频的主要内容,如果未能解决你的问题,请参考以下文章

Ios 8.4 MPMediaPickerController 不再显示有声读物

iOS 13:MPMediaPickerController - 内部错误/找不到请求的应用扩展

一个视图中的 MPMediaPickerController 和另一个视图中的 MPMediaPlayback。如何?

iPad 上的 MPMediaPickerController 方向

iOS - MPMediaPickerController - 改变 barStyle

MPMediaPickerController 自定义标签和图标的颜色