如果它是一个视频,有没有办法检查MultipartFile上传的长度?

时间:2016-11-24 15:24:08

标签: java spring

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 个答案:

答案 0 :(得分:0)

您需要一个可以读取文件并告诉您长度的库。例如,使用包含VLC的Caprica VLCJ,一旦您将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,这取决于您如何解释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

中找到