我正在尝试使用嵌入视频的页面,当点击视频框架下方的链接时,该页面会动态更改源。源视频在我的主机服务器上。 即这张照片说明了:
![页面样本] [1]
我遇到了this page,似乎有答案,但我尝试了它并没有用。按照这个例子,我粘贴了css& javascript中的和身体中必要的html。我更新了对我的网址的所有引用,并尝试保持文件名与测试示例相同。 以下是我的尝试。
有人可以指出我的错误,或提供更优雅的方式吗?单击链接时,基本上动态更改嵌入视频,视频可在所有典型浏览器和大多数设备中使用。
这是一个wordpress网站,使用JW Player进行wordpress ,(我的错误)而不是我发现这个脚本/代码实际上是Video.js
加载预图像但不播放。
作为测试我试过这个并且它确实正确播放单个视频:
<video id="testvideo" class="video-js vjs-default-skin" width="440" height="300" controls="controls">
<source src="http://www.mywebsite.net/videos/testvid_01.mp4" type="video/mp4"/>
<source src="http://www.mywebsite.net/videos/testvid_01.webm" type="video/webm"/>
<source src="http://www.mywebsite.net/videos/testvid_01.ogv" type="video/ogg"/>
</video>
多源链接的javascript版本
<html>
<head>
<title></title>
<style media="screen" type="text/css">
.wrap { margin:30px auto 10px; text-align:center }
.container { width:440px; height:300px; border:5px solid #ccc }
p { font: 10px/1.0em 'Helvetica',sans-serif; margin:20px }
</style>
<script>
$("input[type=button]").click(function() {
var $target = "testvid_"+$(this).attr("rel");
var $content_path = "http://www.mywebsite.net/videos/";
var $vid_obj = _V_("div_video");
// hide the current loaded poster
$("img.vjs-poster").hide();
$vid_obj.ready(function() {
// hide the video UI
$("#div_video_html5_api").hide();
// and stop it from playing
$vid_obj.pause();
// assign the targeted videos to the source nodes
$("video:nth-child(1)").attr("src",$content_path+$target+".mp4");
$("video:nth-child(1)").attr("src",$content_path+$target+".ogv");
$("video:nth-child(1)").attr("src",$content_path+$target+".webm");
// replace the poster source
$("img.vjs-poster").attr("src",$content_path+$target+".png").show();
// reset the UI states
$(".vjs-big-play-button").show();
$("#div_video").removeClass("vjs-playing").addClass("vjs-paused");
// load the new sources
$vid_obj.load();
$("#div_video_html5_api").show();
});
});
$("input[rel='01']").click();
</script> </head>
<body>
<section class="container wrap">
<video id="div_video" class="video-js vjs-default-skin" controls preload="auto" width="440" height="300" poster="http://www.mywebsite.net/videos/testvid_01.png" data-
setup="{}">
<source src="" type="video/mp4">
<source src="" type="video/ogg">
<source src="" type="video/webm">
</video>
</section>
<div class="wrap">
<input rel="01" type="button" value="load video 1">
<input rel="02" type="button" value="load video 2">
<input rel="03" type="button" value="load video 3">
</div>
</body>
</html>
第一个视频的预加载图像加载但没有视频,错误是 “找不到支持格式和MIME类型的视频”
所以我在本节中添加了第一个视频的来源
setup="{}">
<source src="http://www.mywebsite.net/videos/videos/testvid_01.mp4" type="video/mp4">
<source src="http://www.mywebsite.net/videos/videos/testvid_01.ogv" type="video/ogg">
<source src="http://www.mywebsite.net/videos/videos/testvid_01.webm type="video/webm">
</video>
结果是第一个视频加载但不加载其他链接的视频。
视频名称/ png: testvid_01.mp4,testvid_01.ogv,testvid_01.webm,testvid_01.png testvid_02.mp4,testvid_02.ogv,testvid_02.webm,testvid_02.png testvid_03.mp4,testvid_03.ogv,testvid_03.webm,testvid_03.png
我在wordpress页面和html页面都试过这个结果是相同的。
我不确定即使这个脚本会做我想做的事情吗?
答案 0 :(得分:17)
这会三次覆盖视频元素的src属性,因此它将始终设置为webm视频。
$("video:nth-child(1)").attr("src",$content_path+$target+".mp4");
$("video:nth-child(1)").attr("src",$content_path+$target+".ogv");
$("video:nth-child(1)").attr("src",$content_path+$target+".webm");
而是使用video.js API加载一系列来源,以便video.js可以选择当前播放技术可以播放的一个:
$vid_obj.src([
{ type: "video/mp4", src: $content_path+$target+".mp4" },
{ type: "video/webm", src: $content_path+$target+".webm" },
{ type: "video/ogg", src: $content_path+$target+".ogv" }
]);
答案 1 :(得分:3)
javascript示例似乎不包含video.js库。您可以尝试在头部包含以下内容。
<link href="http://vjs.zencdn.net/c/video-js.css" rel="stylesheet">
<script src="http://vjs.zencdn.net/c/video.js"></script>
否则,有没有办法在某处查看页面?
答案 2 :(得分:0)
添加到原始问题的总体答案,上面由misterben回答的视频切换仍然适用于video.js的当前版本(4.8.0),但更改海报图像的代码无效原始问题的帖子,或截至2014年9月5日的jsfiddle code sample。
您需要对以下内容对user239759的原始问题代码(参见下文)进行两处小修改:
// hide the current loaded poster
$("img.vjs-poster").hide();
...
...
...
// replace the poster source
$("img.vjs-poster").attr("src",$content_path+$target+".png").show();
到此:
// hide the current loaded poster
$(".vjs-poster").hide();
...
...
...
// replace the poster source
$(".vjs-poster").css("background-image","url("+$content_path+$target+".png)").show();
如果您使用的是标准的video.js代码和相关的css。
还应该注意的是,对于那些尚未从上面的代码中找出答案的人来说,海报图片的名称应该与视频的名称相同,但文件扩展名除外,并且与视频放在同一目录中。除非您为海报图片使用$content_path
的其他变量。