2016-11-24 2 views
1

Есть ли элегантный способ проверить длину видео в миллисекундах при загрузке в MultipartFile?Есть ли способ проверить длину загрузки MultipartFile, если это видео?

public long checkVideoLength(MultipartFile video) { 
    long length = 0; 
    if(video.getContentType().equals("video/mp4")) { 
      //Resolve the video's length if it's an mp4 
    } 
    return length; 
} 

Мне не удалось найти элегантное решение.

+1

Я думаю, что [это] (HTTP: // stackoverflow.com/a/3048229/1678362) может ответить на ваш вопрос, хотя речь идет об аудиопотоках. – Aaron

ответ

0

Вам нужна библиотека, которая может читать файл и указывать длину. Например, используя Caprica's VLCJ, который обертывает VLC, как только вы укажете MediaPlayer на свой файл, вы можете запросить его для its length in seconds. Я не уверен, будет ли это работать без интерфейса.

Другой вариант: Xuggler, который обертывает FFMPEG. Там, вы можете написать следующее, чтобы открыть файл и попросить его продолжительность:

IMediaReader reader = ToolFactory.makeReader(filename); 
IContainer container = reader.getContainer(); 
if (container.queryStreamMetaData() >= 0) { 
    long duration = container.getDuration(); // <-- got it 
} 

Обратите внимание, что есть много изменчивости в том, что вы можете ожидать от файла .mp4 (mp4 is a container, а не кодировка) - поэтому будьте осторожны с неправильными или неподдерживаемыми вариантами.

Оба VLCJ и Xuggler являются GPLv3; вам может понадобиться изолировать вашу программу от них как плагинов, если ваш код также не будет GPL'd, в зависимости от того, как вы интерпретируете java-ссылку.

Другой вариант - вызвать системный скрипт, который предоставит вам номер. Это избавляет от интеграции с Java, но заставляет вас обновлять сценарий и иметь доступ к своей системе. Для Ubuntu Linux, они могут работать:

ffprobe file.mp4 -show_format_entry duration 

или

avprobe file.mp4 -show_format_entry duration 

или

$ mediainfo --Inform="Video;%Duration%" [inputfile] 

все они нашли в this answer

+0

Я попытался найти банки для Xuggler, но не смог найти их нигде. Зависимость maven также не работает, поскольку Xuggler был оставлен. Знаете ли вы какие-либо альтернативы или место, где я могу приобрести банки Xuggler? –

+0

Если вы хотите, чтобы ffmpeg был предварительно установлен, использование ffprobe может быть легким ответом. В противном случае я бы пошел на VLC - он читает * все * – tucuxi

Смежные вопросы