2012-11-23 105 views
0

我想检索最终用户在上传到我的服务器之前上传到我的网站的视频文件的分辨率和持续时间。 这样,我想检查分辨率和持续时间是否符合我的要求。通过很多API,只有在视频上传到服务器后,他们才会提供这些元数据信息。我的服务器在Linux上运行,并使用Java,Struts。在视频文件上传之前是否有任何API会提供这些信息?检索上传前的视频文件的分辨率和持续时间

回答

2

考虑由AJAX将文件开头的一小部分上载到服务器端。在大多数文件格式中,50-100kbytes的数据应该足够了(这个数字可以根据文件格式来确定;在FLV中,AVI和MKV文件应该足够少)。然后,服务器端可以使用mediainfoxuggle或plain ffmpeg来获取维度和持续时间,并相应地允许或禁止客户端上传。

Here's a tutorial有关如何仅使用HTML5文件API发送文件的一部分的代码示例。

+0

这要求浏览器符合HTML5。我的目标用户也是使用IE7/IE8而不是HTML5兼容的用户。你的评论? –

+0

我们将在这里深入讨论...... :)您可以使用常规上传,并在服务器中途中止上传(通过强烈关闭套接字)。我不认为你可以用Java servlet来做到这一点,你需要类似CGI的接口,在这个接口中你可以以套接字流的形式访问请求负载。 – onon15

1

在浏览器支持HTML5的情况下,您可以使用MP4解析器(如mp4.js)解析文件头。

  • 要获取文件时间,你需要找到的文件moov原子,里面的mvhd原子。持续时间(以秒为单位)可以通过将Timebar字段除以mvhd的持续时间字段来计算。
  • 要获得分辨率,您将需要在原子的moov,原子的trak内找到视频轨道(忽略音轨或其他轨道(如果遇到它们;通常该文件只有一个视频轨道),以及在其中有tkhd原子,它有宽度和高度域。
+0

它只适用于MP4,如果我没有错。就我而言,最终用户也可以上传其他格式的视频文件(avi等)。如果视频文件是其他格式,这可以实现如何? –

+0

你*可以*为其他文件格式实现解析器。最有可能的是,你不会找到像mp4.js这样的预先制作的库用于不太常见的格式,但实际上大多数格式比mp4更容易解析。但我承认,这让我的整个想法变得不切实际。 – onon15

+0

好的。任何指向您可以建议在Java中使用不同格式的教程的链接? –

相关问题