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"
または、標準のDOMメソッドの代わりにjQueryを使用します。
$("#myVideoTag > source").attr("src", "http://example.com/new_url.mp4")
私はこの問題に何度か直面しましたが、以前の経験と掘り起こしに基づいて、これらのオプションを提案できます:
はい、新しいソースを使用して_<video>
_要素を再挿入するだけです。それは簡単ですが、効果的なアプローチです。イベントリスナーを再初期化することを忘れないでください。
video.src
_これは私がここで答え、stackoverflow、そしてgithubのソースでたくさん見ました。
_var video = document.getElementById('#myVideo');
video.src = newSourceURL;
_
動作しますが、ブラウザオプションから選択することはできません。
.load()
ビデオ要素documentation に従って、_<video>
_の_<source>
_タグのsrc
属性を更新し、.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>
_
それにもかかわらず ここ それはいくつかのブラウザに問題があると言われています。
これをすべて1か所にまとめることが役立つことを願っています。
私はそれがうまくいくことを望み、あなたの必要に応じて属性名とIDを調整してください
以下の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();
});
これをチェックしてください。この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>
子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);
}
}
これは働いています
<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()関数です。