在此处的 Mac 应用程序中使用 AVPlayer 从文件夹全屏播放随机视频,但是当我尝试播放 .vob 文件或 .mpg 文件时,我只会看到黑屏,黑屏的持续时间与视频播放的时间一样长。
AVFoundation 不支持从这些容器播放吗?我认为,由于它们可以与普通的 QuickTime Player 一起播放,因此它们也可以与 AVPlayer 一起使用。
AVURLAsset 类 有一个静态方法,您可以查询支持的视频 UTI:
+ (NSArray *)audiovisualTypes
在 10.9.1 上,它返回这些系统定义的 UTI:
这里是系统UTI的解释。所以看起来至少应该支持 .mpg 容器。
根据 wiki,.mpg 文件可以包含 MPEG-1 或 MPEG-2 视频,但仅支持 MPEG-2 视频。所以也许这就是文件加载但未显示任何内容的原因。
QuickTime 在内部使用 QTMovieModernizer 来播放传统格式的视频(如 本次 WWDC 会议 中所述),所以也许您可以研究一下。它甚至有一种方法来确定文件是否需要现代化:
+ requiresModernization:error:
要获取支持的扩展列表,您可以使用以下功能:
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"]
斯威夫特,iOS 15+
import AVFoundation
func getAllowedAVPlayerFileExtensions() -> [String] {
let avTypes: [AVFileType] = AVURLAsset.audiovisualTypes()
let avExtensions: [String] =
avTypes
.compactMap({ UTType($0.rawValue)?.preferredFilenameExtension })
.sorted()
return avExtensions
}
返回排序的文件扩展名列表:
["3g2", "3gp", "aa", "aac", "aax", "ac3", "aifc", "aiff", "amr", "au", "avi", "caf", "eac3", "flac", "itt", "loas", "m1a", "m2a", "m3u", "m4a", "m4b", "m4p", "m4r", "m4v", "mov", "mp1", "mp2", "mp3", "mp4", "mp4", "mpa", "mqv", "pls", "ttml", "vtt", "vtt", "w64", "wav", "webvtt", "xhe"]