Замена медиаресурса (http на rtmp) в MediaElementsJS на основе возможностей браузера
Прежде всего, если Джон Дайер читает это, большое спасибо за ваш плеер, это фантастика!:-)
А теперь к моей проблеме. Я пытаюсь предоставить MP4-видео с использованием HTML5 (iPad, iPhone, Android, Chrome Desktop) с запасным вариантом для Flash (Firefox, IE, Opera). MediaElementJS делает это нормально из коробки, за исключением того, что решение HTML5 позволяет случайным образом переходить к видео, используя HTTP, в то время как откат Flash заставляет браузер загрузить весь файл перед воспроизведением.
По этой причине я хочу использовать rtmp вместо http, когда используется резервный Flash-сервер (помимо обычного веб-сервера у нас есть Flash Media Server, готовый для обслуживания видео), поэтому я бы хотел изменить источник в этих случаях. Но я не знаю, может ли и как MediaElementJS подсказать мне, будет ли использоваться Flash. Я пробовал это:
<video autoplay controls width="800" height="600" id="video-tag" preload="auto">
<source id="media-source-mp4" type="video/mp4" src="http://localhost/video1.mp4" />
<object width="800" height="600" type="application/x-shockwave-flash" data="js/flashmediaelement.swf">
<param name="movie" value="js/flashmediaelement.swf" />
<param name="flashvars" value="controls=true&autostart=true&file=rtmp://localhost/video1.mp4" />
</object>
</video>
<script type="text/javascript">$("#video-tag").mediaelementplayer({
success: function(media, node, player) {
if (media.pluginType != 'native') {
media.setSrc('rtmp://localhost/video1.mp4');
media.load();
media.play();
}
}
});</script>
Но это явно не работает. Я просмотрел код medialement.js и думаю, что медиа-элемент предоставляет атрибут pluginType, но я могу ошибаться. Элемент
1 ответ
Я только что нашел ответ на свой вопрос через систему отслеживания проблем Github для MediaElementJS:
https://github.com/johndyer/mediaelement/issues/337
Хитрость заключается в добавлении "mp4:" перед именем медиа-файла в URL. Итак, в моем примере последние строки будут такими:
if (media.pluginType != 'native') {
media.setSrc('rtmp://localhost/mp4:video1.mp4'); // NOTE the "mp4:" prefix
media.load();
media.play();
}
У нас это работает на Flash Media Server 3.5.:-)