Как изменить источник видео с помощью JS?
<video id="myVideoTag" width="670" height="377" autoplay="true" controls="controls">
<source src="http://www.test.com/test.mp4" type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"'>
</video>
Как изменить источник видео с помощью JS?
<video id="myVideoTag" width="670" height="377" autoplay="true" controls="controls">
<source src="http://www.test.com/test.mp4" type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"'>
</video>
Конечно, вы можете просто установить атрибут src
в элементе source
:
document.querySelector("#myVideoTag > source").src = "http://example.com/new_url.mp4"
Или используя jQuery вместо стандартных методов DOM:
$("#myVideoTag > source").attr("src", "http://example.com/new_url.mp4")
Я столкнулся с этой проблемой несколько раз и основываясь на предыдущем опыте и копании, я могу предложить следующие варианты:
да, просто вставьте элемент <video>
с новыми источниками. Это простой, но эффективный подход. Не забудьте повторно инициализировать прослушиватели событий.
video.src
Это я видел много в ответах здесь, на stackoverflow, а также в источниках на github.
var video = document.getElementById('#myVideo');
video.src = newSourceURL;
Он работает, но вы не можете предоставить варианты браузера на выбор.
.load()
в видеоэлементев соответствии с документацией вы можете обновить атрибуты src
для тегов <video>
<source>
, а затем вызвать .load()
, чтобы изменения вступили в силу
<video id="myVideo">
<source src="video.mp4" type="video/mp4" />
<source src="video.ogg" type="video/ogg" />
</video>
<script>
var video = document.getElementById('myVideo');
var sources = video.getElementsByTagName('source');
sources[0].src = anotherMp4URL;
sources[1].src = anotherOggURL;
video.load();
</script>
Тем не менее здесь он сказал, что в некоторых браузерах есть проблемы.
Надеюсь, будет полезно иметь все это в одном месте.
Я столкнулся с той же проблемой. Согласно этой теме:
изменение источника на тег html5
изменить src исходного тега невозможно. вам придется использовать src самого тега видео.
Несмотря на то, что Campbell предоставил правильное решение, более полное решение "специфичного для плейлиста" вопроса (как указано в комментариях) предоставляется здесь. Это решение может быть применено ко всем видеоформатам, если оно выполнено правильно (я использовал modernizr, чтобы определить, какой источник будет играть за данный браузер, в сочетании с решением выше).
Это решение будет работать (и было протестировано) для изменения видео в тегах HTML5 во всех браузерах HTML5, включая IE8.
Проверьте это. Этот javascript изменяет src исходного тега. https://jsfiddle.net/a94zcrtq/8/
<script>
function toggle() {
if ($(this).attr('data-click-state') == 1) {
$(this).attr('data-click-state', 0)
document.getElementById("source").src = "http://www.quirksmode.org/html5/videos/big_buck_bunny.mp4";
document.getElementById("videoPlayer").load();
} else {
$(this).attr('data-click-state', 1)
document.getElementById("source").src = "http://techslides.com/demos/sample-videos/small.mp4";
document.getElementById("videoPlayer").load();
}
}
</script>
Это работает
<video id="videoplayer1" width="240" height="160" controls>
<source id="video_res_1" src="" type="video/ogg">
</video>
и в javascript
document.getElementById("video_res_1").src = "my video url.ogv";
document.getElementById("videoplayer1").load();
Ключ - это функция .load(), которая перезагружает видеоплеер.
Я надеюсь, что он должен работать, и, пожалуйста, отрегулируйте имя и идентификатор атрибута в соответствии с вашими потребностями
html-код ниже
<video controls style="max-width: 90%;" id="filePreview">
<source type="video/mp4" id="video_source">
</video>
js код ниже
$("#fileToUpload").change(function(e){
var source = $('#video_source');
source[0].src = URL.createObjectURL(this.files[0]);
source.parent()[0].load();
});
Я обнаружил, что динамическое создание и добавление дочерних source
элементов делает свое дело.
var videoElement = document.querySelector('.my-video');
var videoSources = ["video.mp4","video.webm"]
if (videoElement) {
for (var i = 0; i < videoSources.length; i++) {
var sourceTag = document.createElement("source");
sourceTag.type = "video/" + videoSources[i].split('.')[1];
sourceTag.src = videoSources[i];
videoElement.appendChild(sourceTag);
}
}