【问题标题】:Determine if a file is a valid video quickly快速确定文件是否为有效视频
【发布时间】:2010-07-04 00:00:59
【问题描述】:

确定文件是否为可播放视频的最快方法是什么?我不关心它是否损坏,而只关心它是否是一种应该可以在 iPad 上播放的 mime 类型。

按照另一个问题的建议,我已经尝试通过 NSURL 推送文件,但每个文件可能需要超过 1 秒,这太慢了。

我目前正在查看文件扩展名,但更希望有更确定的内容。

更新

我很想在应用程序内部使用 UTI,但我也没有找到任何公开的方式从那个方向来实现它。如果有人知道在 3.2 上获取文件的 UTI 的方法,那将是可行的。

【问题讨论】:

    标签: objective-c video ipad


    【解决方案1】:

    file(1) 命令(以及相关的libmagic)可以在标准 Unix 系统上完成这项工作;如果 Apple 没有将它包含在手机操作系统中,您可能可以自己让它在手机上运行。 (在我的 x86-64 Linux 系统上,库是 109k。)

    在我的电脑上,它在 7 秒内将 146 个易于访问的视频分类为 18 种不同的格式。 (120 GB。)出了点问题:

    $ sort -u /tmp/out
    data
    ISO Media, MPEG v4 system, version 1
    Matroska data
    Microsoft ASF
    MPEG transport stream data
    RIFF (little-endian) data, AVI, 384 x 240, 25.00 fps, video: DivX 5, audio: MPEG-1 Layer 3 (mono, 44100 Hz)
    RIFF (little-endian) data, AVI, 384 x 288, 25.00 fps, video: DivX 3 Low-Motion, audio: DivX (stereo, 44100 Hz)
    RIFF (little-endian) data, AVI, 512 x 272, 25.00 fps, video: XviD, audio: MPEG-1 Layer 3 (stereo, 48000 Hz)
    RIFF (little-endian) data, AVI, 512 x 288, 25.00 fps, video: XviD, audio: MPEG-1 Layer 3 (stereo, 44100 Hz)
    RIFF (little-endian) data, AVI, 512 x 288, 25.00 fps, video: XviD, audio: MPEG-1 Layer 3 (stereo, 48000 Hz)
    RIFF (little-endian) data, AVI, 512 x 328, 25.00 fps, video: DivX 5, audio: MPEG-1 Layer 3 (stereo, 32000 Hz)
    RIFF (little-endian) data, AVI, 512 x 328, 25.00 fps, video: XviD, audio: MPEG-1 Layer 3 (stereo, 32000 Hz)
    RIFF (little-endian) data, AVI, 572 x 304, 25.00 fps, video: XviD, audio: MPEG-1 Layer 3 (stereo, 48000 Hz)
    RIFF (little-endian) data, AVI, 576 x 320, 25.00 fps, video: XviD, audio: MPEG-1 Layer 3 (stereo, 48000 Hz)
    RIFF (little-endian) data, AVI, 608 x 336, 25.00 fps, video: XviD, audio: MPEG-1 Layer 3 (stereo, 48000 Hz)
    RIFF (little-endian) data, AVI, 624 x 352, 25.00 fps, video: XviD, audio: MPEG-1 Layer 3 (stereo, 48000 Hz)
    RIFF (little-endian) data, AVI, 640 x 352, 25.00 fps, video: XviD, audio: MPEG-1 Layer 3 (stereo, 48000 Hz)
    TeX font metric data (\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377
    

    在这样的速度下,也许您可​​以容忍一点噪音并退回到较慢的机制;或者用它还不知道的格式填写规则。

    【讨论】:

    • file(1) 默认情况下不在 iOS 上,但我将探索编译并使用应用程序添加它。
    【解决方案2】:

    阅读标题并查找编解码器详细信息?
    Mediainfo 是一个开源视频文件信息分析器

    抱歉,不知道任何 ipad 特定的东西

    【讨论】:

      【解决方案3】:

      我想说您需要做的是获取文件的 UTI,这将在桌面上使用 LaunchServices 完成。我不知道苹果是否在 iOS 上公开了一个 API。

      【讨论】:

        【解决方案4】:

        除了检查文件扩展名之外,您是否应该不能简单地播放文件,并且电影播放器​​对象会向代理发出无法播放的信号?或者在最坏的情况下,你可以尝试一个讨厌的 try/catch。

        【讨论】:

        • 是的,但这很慢。每个文件可能需要几秒钟的时间来准备它们。
        • 在什么情况下视频会出现在手机上?从服务器?你不能在库更多可用的服务器上做这个处理吗?
        【解决方案5】:

        通常,文件的前几个字节会告诉您文件类型。这就是libmagicfile 命令的作用。如果你不想在 iOS 上构建 libmagic,你可以简单地看看它在做什么,然后拉入你关心的查找表的子集。

        【讨论】:

          猜你喜欢
          • 2021-09-05
          • 1970-01-01
          • 1970-01-01
          • 2017-12-07
          • 1970-01-01
          • 1970-01-01
          • 2015-09-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多