3

我正在构建一个移动网络应用程序,并且我正在实现视频和音频标签。显然,并非所有设备都知道可以运行所有文件格式。Modernizr 知道将编解码器返回给我,但我怎么知道我的文件是否有这个特定的编解码器?

我可以识别文件扩展名或 mim 类型,但我需要将编解码器与文件扩展名进行比较,并用这些数据维护一个数组,这似乎是一个孤注一掷的任务。

你们说什么?任何人都知道一个知道为我们提供这些信息的好图书馆吗?或者也许我的方法是错误的,并且有更好的方法来实现它。

请不要让 Firefox OS 例如向用户显示操作系统不支持特定文件格式的消息,但他在处理音频文件时不提供此消息。这意味着我需要向用户提供这种反馈,而且我也更喜欢以自定义的可视化方式对我的应用程序进行反馈。

一个例子: 我有video.mp4。Modernizr 返回 H264 的编解码器。这两条信息不相关。我无法为我的视频以所有可用的视频格式运行后备。该应用程序是云文件托管(如保管箱)的浏览器,如果用户上传了一个无法在 FirefoxOS 上运行的文件,那么他必须明白为什么它的文件无法运行,为此我需要这个库,而不是自己管理这种压缩。

一些参考资料:

谢谢你。

4

1 回答 1

2

如果您可以访问 mime 类型,您可以简单地使用audioorvideocanPlayType()方法:

canPlay = (function(){
  var a = document.createElement('audio'),
      v = document.createElement('video');

  function canPlayAudio(type){
    var mime = 'audio/';
    if (a && a.canPlayType) {
      if (type.indexOf(mime) === -1) type = mime+type;
      return !!a.canPlayType(type) || !!a.canPlayType(type.replace(/^audio\/(x-)?(.+)$/, mime+'x-$2'))
    } return false
  }

  function canPlayVideo(type){
    var mime = 'video/';
    if (v && v.canPlayType) {
      if (type.indexOf(mime) === -1) type = mime+type;
      return !!v.canPlayType(type) || !!v.canPlayType(type.replace(/^video\/(x-)?(.+)$/, mime+'x-$2'))
    } return false
  }

  return {
    audio: canPlayAudio,
    video: canPlayVideo
  }
})();

然后您可以执行这样的测试(注意:包括"audio/"or"video/"部分是可选的):

canPlay.audio('audio/mpeg')  // true
canPlay.audio('m4a')         // true
canPlay.audio('wav')         // true
canPlay.audio('flac')        // false
canPlay.audio('audio/ogg')   // true

canPlay.video('video/mpeg')  // false
canPlay.video('video/mp4')   // true
canPlay.video('m4v')         // true
canPlay.video('video/webm')  // true
canPlay.video('avi')         // false
于 2013-08-05T17:42:52.213 回答