如何使用fineuploader或javascript检测MP4文件是音频还是视频?

Posted

技术标签:

【中文标题】如何使用fineuploader或javascript检测MP4文件是音频还是视频?【英文标题】:How to detect if MP4 file is audio or video with fineuploader or javascript? 【发布时间】:2015-08-27 05:30:17 【问题描述】:

我正在使用 Fineuploader,我允许用户上传音频和视频文件,但我遇到了 MP4 文件的问题,我有不同的音频和视频视频播放器,所以我需要跟踪上传的文件是否是音频或视频,以便我可以将它们保存在他们的特定文件夹中并使用他们的特定播放器播放。

如果有人可以提供带有 javascript 或 Fineuploader 核心功能的解决方案,我更愿意,但 php 解决方案也可以。

PS:我只是需要一个方法,休息我会照顾的

谢谢

【问题讨论】:

【参考方案1】:

在最新的 Firefox 和 chrome 中测试了以下代码,使用 html5 的Video 元素进行检查,不确定是否是 hack,我正在检查视频的高度/宽度是否为零,如果是则音频,否则视频:

function isVideo(url)
  return new Promise(function(res, rej)
    var video = document.createElement('video');
    video.preload='metadata';
    video.onloadedmetadata = function(evt)
      res(!!(video.videoHeight && video.videoWidth));
      video.src = null;      
    ;
    video.src = url;
  );

用法:

isVideo('http://example.com/aa.mp4').then(function(bool)...);
isVideo(window.URL.createObjectURL(blob)).then... // for file objects and blobs

与回调相同:

function isVideo(url, callback)
  return new Promise(function(res, rej)
    var video = document.createElement('video');
    video.preload='metadata';
    video.onloadedmetadata = function(evt)
      callback(!!(video.videoHeight && video.videoWidth));
      video.src = null;      
    ;
    video.src = url;
  );

【讨论】:

谢谢,我也会尝试实现它,但目前是用 ffmpeg 实现的,但两者都需要检查流 干得好 - 谢谢 - 就像一个魅力 - 从 300MB 的音频文件读取 3MB 并获得结果【参考方案2】:

处理这个问题的最好或至少最简单的方法可能是使用 ffmpeg。例如,ffmpeg -i file.mp4 将提供一些关于文件的元数据,包括流/轨道。如果有任何个视频流,或者只有个音频流,则该文件不是视频。

【讨论】:

Stream #0:0(eng): Video: ... vs Stream #0:1(eng): Audio: ...【参考方案3】:

如果您可以在一个变量中获取上传的文件名,假设它是一个名为 filename 的变量,那么以下检查将为您提供解决方案

if(filename.split('.').pop().toUpperCase()=="MP4")

【讨论】:

这种情况下仅扩展名检查不起作用,音频和视频文件都使用 MP4 扩展名

以上是关于如何使用fineuploader或javascript检测MP4文件是音频还是视频?的主要内容,如果未能解决你的问题,请参考以下文章

初步学习FineUploader(java)

策略文档或请求标头无效

Fine Uploader 到 S3 存储桶收到 405 Method Not Allowed 错误

Fine Uploader 无法从亚马逊 S3 绘制缩略图

Fine Uploader 无法上传文件

在 [FINE UPLOADER] 中显示以前上传的图像