Я работал над этой проблемой, так как меня очень интересовал xHtml + RDFa, и я нашел способ воспроизвести видео в строгом документе xHtml 1.0 на браузерах HTML5, не блокируя не браузеры HTML5.
Я опубликовал плагин JQuery здесь: https://github.com/charlycoste/xhtml-video
и демо здесь: http://demo.ccoste.fr/video
На самом деле, это довольно менее мощный, чем с помощью тега HTML5, но, по крайней мере ... это работает!
Решение основано на javascript и холсте, но может быть изящно деградировано с использованием тегов <object>
(вот что делает мой плагин jQuery).
Что я на самом деле просто:
создать новое видео элемент (а не тега) в памяти, но я не добавляйте его в документ DOM:
var video = document.createElement('video');
создать новый canvas
элемент в памяти, но я не добавляют его документа DOM:
var canvas = document.createElement('canvas');
создать новый img
элемент и я добавить его в DOM.
// var parent = ... ;
// var width = ...;
// var height = ...;
var img = document.createElement('img');
img.setAttribute('width', width);
img.setAttribute('height', height);
parent.appendChild(img);
При воспроизведении видео (video.play()
), я делаю это сделать каждый кадр в холсте (который не виден, так как не добавляются в DOM - что делает DOM оставаться Valid XHTML 1.0 документа)
canvas.getContext("2d").drawImage(video, 0, 0, width, height);
Наконец я использовать toDataURL()
метод canvas
элемента, чтобы получить base64 кодированное изображение для кадра и поместить его в атрибут img
элемента src
.
img.setAttribute('src', canvas.toDataURL());
Делая это, вы делаете JavaScript объектов воспроизведение видео из DOM и нажмите каждый кадр в элементе img
DOM. Таким образом, вы можете воспроизводить видео с помощью возможностей HTML5 в браузере, но без документа HTML5.
И если у браузера нет возможностей HTML5 или если он не может обработать используемый кодек, он вернется к поведению <object>
(в общем ... браузер будет искать плагин, такой как VLC, или так на...)
И если нет способа воспроизвести видео (для него нет плагина), будет использоваться альтернативный контент, указанный внутри тега <object>
.
Performance аспект: как это приводит к очень высокой трудоемкий процесс, воспроизведение может мерцать ... Чтобы избежать этого, вы можете уменьшить качество рендеринга с помощью сжатия Jpeg таким образом: canvas.toDataURL('image/jpeg', quality)
где quality
это значение от 0 до 1
Hugo, я удалил ваше «личное» мнение о Flash из вашего вопроса. Вы просто зажжетесь, и тогда ваш вопрос будет закрыт как «субъективный и спорный». –
Дело не в критике, а в том, чтобы сказать «Я НЕ ХОЧУ использовать его». :) – WhyNotHugo
Я чувствую то же самое, и мне понадобилось несколько лет, чтобы найти решение ... Вот оно! Это не лучшее решение когда-либо ... Производительность не очень хорошая ... Но это работает! (Просто отправил его здесь в качестве ответа) –