在我的应用程序中,用户可以使用
PHPickerViewController
从相机胶卷中选择视频。我想读取所选文件的视频容器和/或视频编解码器,看看这是否是 .mp4
或 .mov
视频。有办法做到这一点吗?
我可以检查文件的文件扩展名,但这不准确。用户可能在某个时候重命名了扩展。我想看看真实的媒体。
有没有办法从
AVAsset
获取该信息?例如:let avAsset = AVAsset(url: videoURL)
。
或者还有其他事情要做吗?
对于容器,我认为 avAsset.availableMetadataFormats 应该有帮助。在 lldb 输出中:
有关编解码器信息,请参阅 avAsset.tracks[n].formatDescriptions,您将得到如下内容:
视频:
(lldb) po avAsset.tracks[0].formatDescriptions
▿ 1 element
- 0 : <CMVideoFormatDescription> {
mediaType:'vide'
mediaSubType:'avc1'
mediaSpecific: {
codecType: 'avc1' dimensions: 1080 x 1920
}
extensions: {{...}}
}
音频:
(lldb) po avAsset.tracks[1].formatDescriptions
▿ 1 element
- 0 : <CMAudioFormatDescription> {
mediaType:'soun'
mediaSubType:'aac '
mediaSpecific: {
ASBD: {
mSampleRate: 48000.000000
mFormatID: 'aac '
mFormatFlags: 0x0
mBytesPerPacket: 0
mFramesPerPacket: 1024
mBytesPerFrame: 0
mChannelsPerFrame: 2
mBitsPerChannel: 0 }
...
}
extensions: {{...}}
}