В поисках библиотеки, которая умеет обнаруживать поддержку определенных файлов аудио-видео формата

Я создаю мобильное веб-приложение и внедряю теги видео и аудио. Очевидно, не все устройства умеют работать со всеми форматами файлов. Modernizr знает, как вернуть мне кодек, но как я могу узнать, есть ли в моем файле этот конкретный кодек?

Я могу определить расширение файла или mim-тип, но затем мне нужно будет сравнить кодек с расширением файла и поддерживать массив с этими данными, а это похоже на сизифическую задачу.

Что вы, ребята, говорите? Кто-нибудь знает о хорошей библиотеке, которая знает, как предоставить нам эту информацию? Или, может быть, мой подход неверен, и есть лучший способ добиться этого.

Обратите внимание, что ОС Firefox, например, не отображает пользователю сообщение о том, что конкретный формат файла не поддерживается ОС, но он не предоставляет это сообщение при работе с аудиофайлами. Это означает, что мне нужно предоставить эту обратную связь пользователю, и я также предпочитаю делать это настраиваемым визуальным образом для моего приложения.

Пример: я получил видео.mp4. Modernizr возвращает кодек H264. эти две части информации не связаны. Я не могу разместить резервные копии для воспроизведения моего видео во всех доступных видеоформатах. Приложение представляет собой браузер хостинга облачных файлов (например, дропбокс), и если пользователь загрузил файл, который не может работать в FirefoxOS, то он должен понять, почему его файл не запускается, и для этого мне нужна эта библиотека, а не управлять этим сжатием самостоятельно.

Некоторые ссылки:

Спасибо.


person neoswf    schedule 01.08.2013    source источник


Ответы (1)


Если у вас есть доступ к типу mime, вы можете просто использовать метод audio или video canPlayType():

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/" или "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
person idbehold    schedule 05.08.2013
comment
Спасибо @idbehold за это прекрасное направление. Для того, чтобы получить Вероятно, я должен передать кодек. Любая идея, как я могу этого добиться? - person neoswf; 06.08.2013
comment
Чувак, у тебя есть ответ насчет распознавания кодеков, чтобы я действительно мог в полной мере наградить тебя своей наградой? - person neoswf; 12.08.2013
comment
@NeoSwf Я не верю, что есть программный способ работы с кодеками. Если вы знаете о некоторых типах пантомимы, требующих включения кодека, я могу попытаться добавить для них специальные проверки. Просто дайте мне знать, что они собой представляют. - person idbehold; 12.08.2013
comment
Я уже делаю эту проверку на расширения вручную, чтобы достучаться наверное. Спасибо, мужик. Я думаю, нет - person neoswf; 12.08.2013