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

How to detect if MP4 file is audio or video with fineuploader or javascript?

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

我希望有人能提供具有 javascript 或 fineuploader 核心功能的解决方案,但 php 解决方案也可以。

PS : 我只是需要一个方法来做到这一点,休息我会照顾

谢谢

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

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

处理此问题的最佳或至少是最简单的方法可能是使用 ffmpeg。例如,ffmpeg -i file.mp4 将提供有关文件的一些元数据,包括 streams/tracks。如果有 any 视频流,或者如果有 only 音频流,则文件是 not一个视频。

在最新的 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;
  });
}