Быстро определить, является ли файл допустимым видео - PullRequest
8 голосов
/ 04 июля 2010

Какой самый быстрый способ определить, является ли файл воспроизводимым видео? Я не беспокоюсь о том, что он поврежден или нет, а просто о том, что это mime-тип, который должен воспроизводиться на iPad.

Я поиграл с проталкиванием файла через NSURL, как предполагает другой вопрос, но это может занять> 1 секунду на файл, что слишком медленно.

В настоящее время я смотрю на расширение файла, но предпочитаю что-то более определенное.

обновление

Мне бы очень хотелось использовать UTI внутри приложения, но я также не нашел никакого открытого подхода к нему с этой стороны. Если кто-нибудь знает способ получить в UTI файл на 3.2, который будет работать.

Ответы [ 5 ]

7 голосов
/ 14 июля 2010

Команда file(1) (и связанная с ней libmagic) могут выполнять эту работу в стандартных системах Unix; если Apple не включит его в операционную систему телефона, вы, вероятно, сможете запустить его на телефоне самостоятельно. (В моей системе Linux x86-64 библиотека имеет размер 109 КБ.)

На моем компьютере он классифицировал 146 легко доступных видео в 18 различных форматах менее чем за семь секунд. (120 гигабайт.) Это неправильно:

$ 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

На этих скоростях, возможно, вы можете терпеть небольшой шум и вернуться к более медленному механизму; или, возможно, заполните правила в форматах, которые он еще не знает.

0 голосов
/ 17 июля 2010

Как правило, первые несколько байтов файла сообщают вам тип файла.Вот что делают libmagic и команда file.Если вы не хотите собирать libmagic на iOS, вы можете просто посмотреть, что он делает, и включить подмножество таблицы поиска, которая вас волнует.

0 голосов
/ 10 июля 2010

Я бы сказал, что вам нужно получить UTI файла, что на рабочем столе будет сделано с помощью LaunchServices. Я не знаю, выставлял ли Apple API для этого на iOS.

0 голосов
/ 10 июля 2010

Помимо проверки расширения файла, разве вы не сможете просто воспроизвести файл, и объект проигрывателя фильмов сообщит делегату, что он не может быть воспроизведен?Или, в худшем случае, вы можете попробовать противную попытку / поймать.

0 голосов
/ 04 июля 2010

Прочитать заголовок и поискать информацию о кодеке?
Mediainfo - это анализатор информации о видеофайлах с открытым исходным кодом

Извините, я не знаю ничего о ipad

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...