如何从存储在Dropbox上的视频中获取视频元数据?

时间:2016-08-10 12:01:48

标签: ios swift metadata dropbox-api swiftydropbox

由于SwiftyDropbox API,我不知道如何获取存储在Dropbox上的视频的持续时间。

听起来这些信息应该在Files.VideoMetadata class

的实例中

我尝试使用getMetadata方法,但结果并不包含视频时长,这是我期望得到的。

这是我目前的代码:

Dropbox.authorizedClient!
       .files
       .getMetadata(path: file.pathLower!, includeMediaInfo: true)
       .response({ (result, err) in
if let metadata = result as? Files.FileMetadata {
    print(metadata.name)
    if metadata.mediaInfo != nil {
        switch metadata.mediaInfo! as Files.MediaInfo {
            case .Pending:
                print("Pending")
            case .Metadata(let mediaMetadata):
                print(mediaMetadata)
        }
    }
}
})

mediaMetadata包含{},我无法获得视频的持续时间,也无法获得其他属性。

这似乎是因为我在Dropbox上传的视频是.mov格式。在这种情况下的任何解决方案?

2 个答案:

答案 0 :(得分:0)

首先,请确保在includeMediaInfo设置为true的情况下调用getMetadata。 (此外,这只是最近添加的,所以请确保您正在运行最新版本的SwiftyDropbox。)

生成的FileMetadata有望将MediaInfo设置为MediaMetadata的实例。 (它也可能是Pending,所以要小心。)

但是,当您查看MediaMetadata时,请注意其字段全部设置为可选字段,这意味着很遗憾无法保证它们可用。

这是因为虽然Dropbox尽力提取此元数据,但它始终无法提取。这可能因文件而异。

答案 1 :(得分:0)

您实际上很亲密,这是您获得视频时长的方法:

if metadata.mediaInfo != nil {
   switch metadata.mediaInfo! as Files.MediaInfo {
   case .pending:
       print("Pending")
   case .metadata(let mediaMetadata):
       switch mediaMetadata {
       case let videoMetadata as Files.VideoMetadata:
           print(videoMetadata)
           print(videoMetadata.duration)
       case let photoMetadata as Files.PhotoMetadata:
           print(photoMetadata)
       default: break
       }
   }
}

您可以使用它来确定文件以及视频还是照片的天气