AVFoundation(AVPlayer)支持格式?没有.vob或.mpg容器?

时间:2014-02-19 12:06:05

标签: macos video avfoundation avplayer

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

AVFoundation不支持从这些容器播放吗?我认为既然他们可以使用QuickTime Player股票,他们也可以使用AVPlayer。

2 个答案:

答案 0 :(得分:16)

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

+ (NSArray *)audiovisualTypes

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

  • public.mpeg
  • public.mpeg -2-视频
  • public.avi
  • public.aifc音频
  • public.aac音频
  • public.mpeg-4
  • public.au音频
  • public.aiff音频
  • public.mp2
  • public.3gpp2
  • public.ac3音频
  • public.mp3
  • public.mpeg -2-传输流
  • public.3gpp
  • public.mpeg -4-音频

这是explanation of system UTIs。所以似乎至少应该支持.mpg容器。

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

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

+ requiresModernization:error:

答案 1 :(得分:1)

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

right: 3em;

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

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