【问题标题】:AVFoundation (AVPlayer) supported formats? No .vob or .mpg containers?AVFoundation (AVPlayer) 支持的格式?没有 .vob 或 .mpg 容器?
【发布时间】:2014-03-19 18:05:11
【问题描述】:

在此处使用 Mac 应用程序中的 AVPlayer 从文件夹中全屏播放随机视频,但是当我尝试播放 .vob 文件或 .mpg 文件时,我只是得到一个黑屏,持续时间与视频持续时间一样长。

AVFoundation 不支持从这些容器中播放吗?我想既然它们可以与股票 QuickTime Player 一起播放,它们也可以与 AVPlayer 一起使用。

【问题讨论】:

    标签: macos video avfoundation avplayer


    【解决方案1】:

    AVURLAsset class 有一个静态方法,您可以查询支持的视频 UTI:

    + (NSArray *)audiovisualTypes
    

    在 10.9.1 上,它返回这些系统定义的 UTI:

    • public.mpeg
    • public.mpeg-2-video
    • public.avi
    • public.aifc-audio
    • public.aac-audio
    • public.mpeg-4
    • public.au-audio
    • public.aiff-音频
    • public.mp2
    • public.3gpp2
    • public.ac3-audio
    • public.mp3
    • public.mpeg-2-transport-stream
    • public.3gpp
    • public.mpeg-4-audio

    这是explanation of system UTIs。所以看起来至少应该支持.mpg容器。

    According to wiki, .mpg 文件可以包含 MPEG-1 或 MPEG-2 视频,但仅支持 MPEG-2 视频。所以也许这就是文件加载但没有显示的原因。

    QuickTime 在内部使用QTMovieModernizer 来播放旧格式的视频(如this WWDC session 中所述),所以也许您可以研究一下。它甚至有一种方法可以确定文件是否需要现代化:

    + requiresModernization:error:
    

    【讨论】:

    • 我刚刚对这里的文件执行了 requiresModernization:error: ,但没有返回。
    • 在这里检查了 mpg 文件,视频是 MPEG-1。那么由于 QTMovieModernizer 拒绝,我将如何转换它呢?它为 mpg 和 vob 的该类方法返回 no,当我尝试仍然现代化文件时,它以状态 QTMovieModernizerStatusNotRequired 完成。
    • 不确定,在这种情况下。我认为它一定是某种遗留格式有问题。也许您可以使用 FFmpeg 之类的东西来检查视频是否有错误或获取有关它的更多信息(例如,查看 'ffmpeg -i myfile.avi' 输出的内容)。然后,如果它报告错误,或者如果它报告文件是某种意外的视频格式,您可以使用 FFmpeg 库将这些检查和/或转码集成到您的应用程序中。
    【解决方案2】:

    要获取支持的扩展列表,可以使用以下函数:

    import AVKit
    import MobileCoreServices
    
    func getAllowedAVPlayerFileExtensions() -> [String] {
        let avTypes = AVURLAsset.audiovisualTypes()
        var avExtensions = avTypes.map({ UTTypeCopyPreferredTagWithClass($0 as CFString, kUTTagClassFilenameExtension)?.takeRetainedValue() as String? ?? "" })
        avExtensions = avExtensions.filter { !$0.isEmpty }
        return avExtensions
    }
    

    这将返回一个像这样的列表:

    ["caf", "ttml", "au", "ts", "mqv", "pls", "flac", "dv", "amr", "mp1", "mp3", "ac3", "loas", "3gp", "aifc", "m2v", "m2t", "m4b", "m2a", "m4r", "aa", "webvtt", "aiff", "m4a", "scc", "mp4", "m4p", "mp2", "eac3", "mpa", "vob", "scc", "aax", "mpg", "wav", "mov", "itt", "xhe", "m3u", "mts", "mod", "vtt", "m4v", "3g2", "sc2", "aac", "mp4", "vtt", "m1a", "mp2", "avi"]
    

    【讨论】:

    • 虽然不完全是这个问题的要求,而且由于这些问题得到的关注很少,我想我会在这里问 - 如果你有可能知道 AVPlayer 正在播放的当前媒体文件格式正在流式传输实时数据?
    猜你喜欢
    • 2013-09-12
    • 1970-01-01
    • 2013-12-11
    • 2013-02-23
    • 2019-02-26
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多