使用 Swift 检查 iOS 上的视频容器编解码器是否为 .mp4 或 .mov

问题描述 投票:0回答:1

在我的应用程序中,用户可以使用

PHPickerViewController
从相机胶卷中选择视频。我想读取所选文件的视频容器和/或视频编解码器,看看这是否是
.mp4
.mov
视频。有办法做到这一点吗?

我可以检查文件的文件扩展名,但这不准确。用户可能在某个时候重命名了扩展。我想看看真实的媒体。

有没有办法从

AVAsset
获取该信息?例如:
let avAsset = AVAsset(url: videoURL)

或者还有其他事情要做吗?

ios swift avfoundation
1个回答
0
投票

对于容器,我认为 avAsset.availableMetadataFormats 应该有帮助。在 lldb 输出中:

  • mp4: [__C.AVMetadataFormat(_rawValue: org.mp4ra)]
  • mov:[__C.AVMetadataFormat(_rawValue:com.apple.quicktime.mdta)]

有关编解码器信息,请参阅 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: {{...}}
}
© www.soinside.com 2019 - 2024. All rights reserved.