Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
web - tec / HTML5.pdf
Скачиваний:
45
Добавлен:
12.06.2015
Размер:
2.87 Mб
Скачать

Форматы видео

29

Спецификация тега <video> такова, что его можно использовать без вспомогательных сценариев. Если указать несколько видеофайлов одного и того же содержания, то браузер с поддержкой HTML5-видео сам выберет, исходя из поддерживаемых форматов, какой из них показать пользователю1.

Браузеры, которые не поддерживают HTML5-видео, совершенно игнорируют теги <video>. Но этот факт можно обратить в свою пользу и заставить браузер воспроизводить видео с помощью стороннего приложения. Такое решение предложил Крок Кэмен (Kroc Camen). Его разработка Video for Everybody! («Видео для каждого», http://camendesign..com/code/video_for_everybody) позволяет опирать-

ся на возможности HTML5-видео там, где они присутствуют, а в более старых браузерах пользоваться QuickTime или Flash. Разработка Кэмена построена не на основе JavaScript и поэтому может обслуживать, в принципе, любой браузер, в том числе мобильный.

Чтобы выполнять с видеоданными кое-какие операции посложнее, чем только вставка на страницу и воспроизведение, надо пользоваться JavaScript. Протестировать поддержку видео можно способом 2 (см. раздел «Способы тестирования браузера» этой главы). Если в браузере поддерживается HTML5-видео, то для DOM-объекта, соответствующего тегу <video>, будет определен метод canPlayType(), а при отсутствии поддержки HTML5-видео набор свойств DOM-объекта будет стандартным. Проверить, работает ли в браузере новая видеофункциональность, вам поможет следующая функция:

function supports_video() {

return !!document.createElement('video').canPlayType;

}

Чтобынеписатьсобственнуюфункцию,прибегнитек помощиModernizr(см.раздел «Modernizr: библиотека для тестирования HTML5-функций» этой главы):

if (Modernizr.video) {

// воспроизведем ролик!

} else {

// встроенной поддержки видео нет,

// надо пользоваться QuickTime или Flash

}

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

Форматы видео

Форматы видеоданных сродни разным языкам. В английской газете может быть написано то же самое, что и в испанской, но если вы умеете читать только поанглийски, то вторая газета будет вам без надобности (во всяком случае для чтения). Так и с видео: чтобы воспроизвести ролик, браузер должен знать «язык» его данных.

1 О различных форматах видео читайте «Элементарное введение в кодировки видеодан-

ных»: часть 1 «Форматы файлов» (http://diveintomark.org/archives/2008/12/18/give- part-1-container-formats) и часть 2 «Видеокодеки, сжимающие с потерями» (http:// diveintomark.org/archives/2008/12/19/give-part-2-lossy-video-codecs). — Примеч. авт.

30

Глава 2.. Тестирование функций HTML5 в браузере

«Языки» видеоформатов называются кодеками. Кодек — это алгоритм, в соответствии с которым последовательность графических образов кодируется последовательностью бит. Сейчас в мире несколько десятков широко используемых кодеков. Какой же выбрать? Суровая реальность HTML5 такова, что разработчики браузеров не сумели договориться о едином общепринятом видеокодеке. Впрочем, количество альтернатив немногим больше: две. Один из этих кодеков платный (лицензионный сбор), но работает в Safari и на iPhone (а также в Adobe Flash, если пользоваться разработками типа «Видео для каждого»). Другой — бесплатный, он работает в браузерах с открытым исходным кодом, таких как Chromium и Mozilla Firefox.

Протестировать поддержку разных форматов видео можно способом 3 (см. раздел «Способы тестирования браузера» этой главы). Если в браузере поддерживается HTML5-видео,тодляDOM-объекта,соответствующеготегу<video>,будетопределен метод canPlayType(), который и сообщит, с какими форматами видео может работать браузер.

Рассмотрим функцию, проверяющую браузер на умение читать патентованный формат Macintosh и iPhone:

function supports_h264_baseline_video() { if (!supports_video()) { return false; } var v = document.createElement("video");

return v.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"');

}

Впервойстрокеэтогокодаспомощьюсозданнойранеефункцииsupports_video() мы проверяем, есть ли в браузере поддержка HTML5-видео:

if (!supports_video()) { return false; }

Если браузер не поддерживает HTML5-видео, то и разные форматы он, конечно, не будет читать.

Теперь создадим пустой тег <video> (но не будем присоединять его к странице, чтобы он не был виден) и вызовем метод canPlayType(). Этот метод наверняка будет доступен, ведь в его существовании только что удостоверилась функция supports_ video().

var v = document.createElement("video");

return v.canPlayType(‘video/mp4; codecs=”avc1.42E01E, mp4a.40.2”’);

Формат видеоданных — это, вообще говоря, сочетание нескольких компонентов. Если говорить технически, показанный выше код спрашивает у браузера, может ли тот воспроизводить видео H.264 базового профиля и звук AAC профиля низкой сложности в контейнере MPEG-41.

Функция canPlayType() не возвращает булевы значения true и false. Зная, что некоторые видеоформаты очень сложны, функция отвечает одним из трех значений:

1Что все это значит, я объясню в главе 5. Возможно, вам не помешает также ознакомиться с «Элементарным введением в кодировки видеоданных» (http://diveintomark.org/ tag/give). — Примеч. авт.

Локальное хранилище

31

"probably" — браузер уверен, что может проигрывать видео данного формата;"maybe" — браузер считает, что, возможно, сумел бы воспроизвести видео дан-

ного формата;

"" (пустая строка) — браузер полагает, что наверняка не может воспроизвести такое видео.

Для проверки браузера на умение читать открытый формат, используемый в Mozilla Firefox и иных браузерах с открытым кодом, есть другая функция. Она сконструирована точно так же. Разница лишь в том, что функции canPlayType() передается не такая строка, как в примере выше. На этот раз мы спрашиваем у браузера, может ли тот воспроизводить видео формата Theora и аудио формата Vorbis в Ogg-контейнере:

function supports_ogg_theora_video() {

if (!supports_video()) { return false; } var v = document.createElement("video");

return v.canPlayType(‘video/ogg; codecs=”theora, vorbis”’);

}

Есть еще третья альтернатива — WebM (http://www..webmproject..org), не защищенный патентом видеокодек, код которого недавно был открыт. Его намереваются включить в последующие версии популярных браузеров, в частности Chrome, Firefox и Opera. Тестирование поддержки WebM-видео проводится по той же схеме:

function supports_webm_video() {

if (!supports_video()) { return false; } var v = document.createElement("video");

return v.canPlayType(‘video/webm; codecs=”vp8, vorbis”’);

}

Чтобынеписатьсобственнуюфункцию,можетеприбегнутьк помощиModernizr (но имейте в виду, что тестировать поддержку открытого видеоформата WebM эта библиотека пока не умеет):

if (Modernizr.video) {

// воспроизведем ролик, но вот в каком формате? if (Modernizr.video.ogg) {

//попробуем Ogg Theora + Vorbis в Ogg-контейнере

}else if (Modernizr.video.h264){

//попробуем видео H.264 + аудио AAC в MP4-контейнере

}

Локальное хранилище

ЛокальноехранилищеHTML5(http://dev..w3..org/html5/webstorage/)даетспособхранить часть сайтовых данных в памяти вашего компьютера, чтобы потом было удобнее их загружать. На схожей идее основана система cookies, но мы говорим о значительных

32

Глава 2.. Тестирование функций HTML5 в браузере

объемахинформации.Cookiesимеютограниченныйразмер,икаждыйразпризагрузке очередной страницы ваш браузер отсылает их веб-серверу, а это лишний расход времени и трафика. Локальное хранилище HTML5 устроено так, что при загрузке сайтовойстраницынедостающиеданныемогутбытьполученыизпамятивашегокомпьютера с помощью JavaScript.

Разметка в вопросах и ответах

Вопрос: Локальное хранилище — это действительно

раздел в основной спецификации HTML5, но потом

часть HTML5? И почему ему посвящена особая спец-

некоторые участники рабочей группы HTML5 пожа-

ификация?

ловались на чрезмерно возросший объем стандарта,

Ответ: Если кратко, то да: локальное хранилище —

и спецификацию хранилища выделили в особый до-

кумент. Поступать так, конечно, ничуть не разумнее,

часть HTML5. Чуть более подробный ответ таков:

чем разрезать торт на кусочки, чтобы уменьшить

исторически локальному хранилищу был посвящен

общее количество калорий в нем.

 

 

Протестировать поддержку локального хранилища HTML5 можно способом 1 (см. раздел «Способы тестирования браузера» этой главы). Если HTML5хранилище поддерживается браузером, то для глобального объекта window будет определено свойство localStorage. Соответственно, если поддержки хранилища в браузере нет, то свойство тоже не будет определено. Проверить поможет такая функция:

function supports_local_storage() {

return (‘localStorage’ in window) && window[‘localStorage’] !== null;

}

Чтобы не писать собственную функцию, прибегните к помощи Modernizr: if (Modernizr.localstorage) {

//хранилище доступно!

}else {

//встроенной поддержки хранилища нет,

//стоит попробовать Gears или иное стороннее решение

Помните, что JavaScript чувствителен к регистру. Атрибут объекта Modernizr называетсяlocalstorage (всебуквыстрочные),аDOM-свойство—window.localStorage (буква S прописная).

Разметка в вопросах и ответах

Вопрос: Насколько хорошо защищены данные моего

зический доступ к вашему компьютеру. Через браузер

локального хранилища HTML5? Может ли кто-нибудь

к локальному хранилищу могут обращаться все сайты,

их читать?

но каждому из них разрешено читать и видоизменять

Ответ: Читать данные вашего локального хранилища

только «свои» данные, а не информацию, сохранен-

ную другими сайтами. Это так называемое «ограниче-

и даже видоизменять их могут все лица, имеющие фи-

ние по источнику» (http://bit.ly/9YyPpj).

 

 

Соседние файлы в папке web - tec