跨浏览器地播放视频,在网上找了一下,找到了video.js,记录一下video.js的简单用法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
<
html
>
<
head
>
...
<!-- 引入video.js的样式文件 -->
<
link
rel
=
"stylesheet"
type
=
"text/css"
href
=
"css/video-js.css"
/>
...
<!-- 如果没有使用Modernizr,则使用以下代码做shiv -->
<
script
type
=
"text/javascript"
>
document.createElement('video');document.createElement('audio');document.createElement('track');
</
script
>
...
<!-- 引入video.js的脚本文件 -->
<
script
src
=
"js/video.js"
type
=
"text/javascript"
charset
=
"utf-8"
></
script
>
<!-- 指定videojs的flash文件 -->
<
script
type
=
"text/javascript"
>
videojs.options.flash.swf = "js/video-js.swf";
</
script
>
...
</
head
>
<
body
>
...
<
video
id
=
"sample_video"
preload
=
"none"
class
=
"video-js vjs-default-skin vjs-big-play-centered"
data-setup
=
'{ "controls": true, "autoplay": false, "preload": "none", "poster": "images/sample_video_poster.png", "width": 852, "height": 480 }'
>
<
source
src
=
"videos/sample_video.mp4"
type
=
'video/mp4'
/>
<!-- 如果浏览器不兼容HTML5则使用flash播放 -->
<
object
id
=
"sample_video"
class
=
"vjs-flash-fallback"
width
=
"852"
height
=
"480"
type
=
"application/x-shockwave-flash"
data
=
"http://releases.flowplayer.org/swf/flowplayer-3.2.1.swf"
>
<
param
name
=
"movie"
value
=
"http://releases.flowplayer.org/swf/flowplayer-3.2.1.swf"
/>
<
param
name
=
"allowfullscreen"
value
=
"true"
/>
<
param
name
=
"flashvars"
value
=
'config={"playlist":["images/sample_video_poster.png", {"url": "videos/sample_video.mp4","autoPlay":false,"autoBuffering":true}]}'
/>
<!-- 视频图片. -->
<
img
src
=
"images/sample_video.png"
width
=
"852"
height
=
"480"
alt
=
"Poster Image"
title
=
"No video playback capabilities."
/>
</
object
>
</
video
>
...
<
script
type
=
"text/javascript"
>
var myPlayer = null;
$(document).ready(function() {
...
if(!myPlayer) {
// Using the video's ID or element
myPlayer = videojs("video_center_video");
}
// After you have references to your players you can...(example)
myPlayer.play(); // Starts playing the video for this player.
...
});
</
script
>
</
body
>
</
html
>
|
上面的用法是tag标签的使用办法,官方文档里还写了使用js初始化的办法,很简单,可参照https://github.com/videojs/video.js/blob/stable/docs/guides/setup.md
使用video.js有一个好处就是video标签或flashvars中可以指定多个视频源,它会根据浏览器自动寻找合适的视频进行播放。
不过今天使用video.js的时候发现一个问题,当设置了preload为auto之后,在chrome下首次刷新网页网络请求会出现一个错误。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
Request URL:
http://xxxxx/yyyy.mp4
Request Headers CAUTION: Provisional headers are shown.
Accept-Encoding:
identity;
q=1, *;q=
0
Cache-Control:
max-age=0
Range:
bytes=0-
Referer:
http://xxxxx
User-Agent:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36
|
暂时将preload设置为none规避此问题。
默认的video.js的样式不太好看,顺便附上从锤子网http://www.smartisan.com/爬下来的样式文件。
1
2
3
4
5
|
/*!
Video.js Default Styles (http://videojs.com)
Version 4.6.1
Create your own skin at http://designer.videojs.com
*/
.vjs-default-skin{
color
:
#ccc
}@font-face{
font-weight
:
400
;
font-style
:
normal
}.vjs-default-skin .vjs-slider{
outline
:
0
;
position
:
relative
;
cursor
:
pointer
;
padding
:
0
;
background
:
url
(../images/bg_player_icon_v.png)
0
-210px
repeat-x
}.vjs-default-skin .vjs-slider:focus{-webkit-box-shadow:
0
0
2em
#fff
;-moz-box-shadow:
0
0
2em
#fff
;box-shadow:
0
0
2em
#fff
}.vjs-default-skin .vjs-slider-handle{
font-family
:VideoJS;
font-size
:
1em
;
line-height
:
1
;
text-align
:
center
;
text-shadow
:
0
0
1em
#fff
;
position
:
absolute
;
top
:
-13px
;
left
:
0
;
background
:
url
(../images/bg_player_icon_v.png)
0
-90px
no-repeat
;
width
:
33px
;
height
:
33px
}.vjs-default-skin .vjs-control-bar{
display
:
none
;
position
:
absolute
;
bottom
:
0
;
left
:
0
;
right
:
0
;
height
:
39px
;
padding
:
3px
0
0
;
background-color
:
#000
}.vjs-default-skin.vjs-has-started .vjs-control-bar{
display
:
block
;
visibility
:
visible
;opacity:
1
;-webkit-transition:visibility .
1
s,opacity .
1
s;-moz-transition:visibility .
1
s,opacity .
1
s;-o-transition:visibility .
1
s,opacity .
1
s;transition:visibility .
1
s,opacity .
1
s}.vjs-default-skin.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar{
display
:
block
;
visibility
:
hidden
;opacity:
0
;-webkit-transition:visibility
1
s,opacity
1
s;-moz-transition:visibility
1
s,opacity
1
s;-o-transition:visibility
1
s,opacity
1
s;transition:visibility
1
s,opacity
1
s}.vjs-default-skin.vjs-controls-disabled .vjs-control-bar{
display
:
none
}.vjs-default-skin.vjs-using-native-controls .vjs-control-bar{
display
:
none
}.vjs-default-skin.vjs-error .vjs-control-bar{
display
:
none
}@media \
0
screen{.vjs-default-skin.vjs-user-inactive.vjs-playing .vjs-control-bar :before{
content
:
""
}}.vjs-default-skin .vjs-control{
outline
:
0
;
position
:
relative
;
float
:
left
;
text-align
:
center
;
margin
:
0
;
padding
:
0
;
height
:
3em
;
width
:
4em
}.vjs-default-skin .vjs-control:before{
font-family
:VideoJS;
font-size
:
1.5em
;
position
:
absolute
;
top
:
0
;
left
:
0
;
width
:
100%
;
height
:
100%
;
text-align
:
center
;
text-shadow
:
1px
1px
1px
rgba(
0
,
0
,
0
,.
5
)}.vjs-default-skin .vjs-control:focus:before,.vjs-default-skin .vjs-control:hover:before{
text-shadow
:
0
0
1em
#fff
}.vjs-default-skin .vjs-control-text{
border
:
0
;
clip
:rect(
0
0
0
0
);
height
:
1px
;
margin
:
-1px
;
overflow
:
hidden
;
padding
:
0
;
position
:
absolute
;
width
:
1px
}.vjs-default-skin .vjs-play-control{
width
:
5em
;
cursor
:
pointer
;
background
:
url
(../images/bg_player_icon.png)
27px
0
no-repeat
}.vjs-default-skin.vjs-playing .vjs-play-control{
background
:
url
(../images/bg_player_icon.png)
-33px
0
no-repeat
}.vjs-default-skin .vjs-playback-rate .vjs-playback-rate-value{
font-size
:
1.5em
;
line-height
:
2
;
position
:
absolute
;
top
:
0
;
left
:
0
;
width
:
100%
;
height
:
100%
;
text-align
:
center
;
text-shadow
:
1px
1px
1px
rgba(
0
,
0
,
0
,.
5
)}.vjs-default-skin .vjs-playback-rate.vjs-menu-button .vjs-menu .vjs-menu-content{
width
:
4em
;
left
:
-2em
;
list-style
:
none
}.vjs-default-skin .vjs-mute-control,.vjs-default-skin .vjs-volume-menu-button{
cursor
:
pointer
;
float
:
right
;
background
:
url
(../images/bg_player_icon.png)
-104px
0
no-repeat
}.vjs-default-skin .vjs-mute-control.vjs-vol
-0
,.vjs-default-skin .vjs-volume-menu-button.vjs-vol
-0
{
background
:
url
(../images/bg_player_icon.png)
-164px
0
no-repeat
}.vjs-default-skin .vjs-mute-control.vjs-vol
-1:
before,.vjs-default-skin .vjs-volume-menu-button.vjs-vol
-1:
before{
background
:
url
(../images/bg_player_icon.png)
-104px
0
no-repeat
}.vjs-default-skin .vjs-mute-control.vjs-vol
-2:
before,.vjs-default-skin .vjs-volume-menu-button.vjs-vol
-2:
before{
background
:
url
(../images/bg_player_icon.png)
-104px
0
no-repeat
}.vjs-default-skin .vjs-volume-control{
width
:
5em
;
float
:
right
;
top
:
2px
;
top
:
4px
\
0
}.vjs-default-skin .vjs-volume-bar{
width
:
5em
;
height
:.
6em
;
margin
:
1.1em
auto
0
}.vjs-default-skin .vjs-volume-menu-button .vjs-menu-content{
height
:
2.9em
}.vjs-default-skin .vjs-volume-
level
{
position
:
absolute
;
top
:
0
;
left
:
0
;
height
:.
5em
;
width
:
100%
;
background
:
url
(../images/bg_player_icon_v.png)
0
-150px
repeat-x
}.vjs-default-skin .vjs-volume-bar .vjs-volume-handle{
width
:
14px
;
height
:
14px
;
left
:
4.5em
;
background
:
url
(../images/bg_player_icon_v.png)
0
0
no-repeat
;
top
:
-4px
}.vjs-default-skin .vjs-volume-handle:before{
font-size
:.
9em
;
top
:-.
2em
;
left
:-.
2em
;
width
:
1em
;
height
:
1em
}.vjs-default-skin .vjs-volume-menu-button .vjs-menu .vjs-menu-content{
width
:
6em
;
left
:
-4em
}.vjs-default-skin .vjs-progress-control{
position
:
absolute
;
left
:
0
;
right
:
0
;
width
:
auto
;
font-size
:.
3em
;
height
:
6px
;
top
:
-6px
;-webkit-transition:
all
.
4
s;-moz-transition:
all
.
4
s;-o-transition:
all
.
4
s;transition:
all
.
4
s}.vjs-default-skin:hover .vjs-progress-control{
font-size
:.
9em
;-webkit-transition:
all
.
2
s;-moz-transition:
all
.
2
s;-o-transition:
all
.
2
s;transition:
all
.
2
s}.vjs-default-skin .vjs-progress-holder{
height
:
100%
}.vjs-default-skin .vjs-progress-holder .vjs-play-progress,.vjs-default-skin .vjs-progress-holder .vjs-load-progress{
position
:
absolute
;
display
:
block
;
height
:
100%
;
margin
:
0
;
padding
:
0
;
width
:
0
;
left
:
0
;
top
:
0
}.vjs-default-skin .vjs-play-progress{
background
:
url
(../images/bg_player_icon_v.png)
0
-150px
repeat-x
}.vjs-default-skin .vjs-load-progress{
background
:
url
(../images/bg_player_icon_v.png)
0
-180px
repeat-x
}.vjs-default-skin.vjs-live .vjs-time-controls,.vjs-default-skin.vjs-live .vjs-time-divider,.vjs-default-skin.vjs-live .vjs-progress-control{
display
:
none
}.vjs-default-skin.vjs-live .vjs-live-display{
display
:
block
}.vjs-default-skin .vjs-live-display{
display
:
none
;
font-size
:
1em
;
line-height
:
3em
}.vjs-default-skin .vjs-time-controls{
font-size
:
1em
;
line-height
:
36px
}.vjs-default-skin .vjs-current-time{
float
:
left
}.vjs-default-skin .vjs-duration{
float
:
left
}.vjs-default-skin .vjs-remaining-time{
display
:
none
;
float
:
left
}.vjs-default-skin .vjs-time-controls,.vjs-default-skin .vjs-duration,.vjs-default-skin .vjs-duration{
top
:
3px
\
0
;
top
:
1px
}.vjs-time-divider{
float
:
left
;
line-height
:
36px
}.vjs-default-skin .vjs-fullscreen-control{
width
:
3.8em
;
cursor
:
pointer
;
float
:
right
}.vjs-default-skin .vjs-fullscreen-control{
background
:
url
(../images/bg_player_icon.png)
-220px
0
no-repeat
}.vjs-default-skin.vjs-fullscreen .vjs-fullscreen-control{
background
:
url
(../images/bg_player_icon.png)
-284px
0
no-repeat
}.vjs-default-skin .vjs-big-play-button{
left
:
50%
;
top
:
50%
;
margin
:
-26.5px
0
0
-22.5px
;
display
:
block
;
z-index
:
2
;
position
:
absolute
;
width
:
45px
;
height
:
53px
;
cursor
:
pointer
;opacity:
1
;
background
:
url
(../images/bg_player_play.png)
left
top
no-repeat
}.vjs-default-skin .vjs-mute-control.vjs-vol
-0:
hover,.vjs-default-skin .vjs-mute-control.vjs-vol
-1:
hover,.vjs-default-skin .vjs-mute-control.vjs-vol
-2:
hover,.vjs-default-skin .vjs-mute-control.vjs-vol
-3:
hover,.vjs-default-skin .vjs-mute-control:hover,.vjs-default-skin.vjs-fullscreen .vjs-fullscreen-control:hover,.vjs-default-skin .vjs-fullscreen-control:hover,.vjs-default-skin.vjs-playing .vjs-play-control:hover,.vjs-default-skin .vjs-play-control:hover,.vjs-default-skin .vjs-big-play-button:hover{opacity:.
6
;-moz-transition:opacity .
3
s ease;-webkit-transition:opacity .
3
s ease;-o-transition:opacity .
3
s ease;transition:opacity .
3
s ease}.vjs-default-skin.vjs-big-play-centered .vjs-big-play-button{
left
:
50%
;
margin-left
:
-2.1em
;
top
:
50%
;
margin-top
:
-1.4000000000000001em
}.vjs-default-skin.vjs-controls-disabled .vjs-big-play-button{
display
:
none
}.vjs-default-skin.vjs-has-started .vjs-big-play-button{
display
:
none
}.vjs-default-skin.vjs-using-native-controls .vjs-big-play-button{
display
:
none
}.vjs-default-skin:hover .vjs-big-play-button,.vjs-default-skin .vjs-big-play-button:focus{
outline
:
0
;
border-color
:
#fff
}.vjs-error .vjs-big-play-button{
display
:
none
}.vjs-error-display{
display
:
none
}.vjs-error .vjs-error-display{
display
:
block
;
position
:
absolute
;
left
:
0
;
top
:
0
;
width
:
100%
;
height
:
100%
}.vjs-error .vjs-error-
display
:before{
content
:
'X'
;
font-family
:
Arial
;
font-size
:
4em
;
color
:
#666
;
line-height
:
1
;
text-shadow
:.
05em
.
05em
.
1em
#000
;
text-align
:
center
;
vertical-align
:
middle
;
position
:
absolute
;
top
:
50%
;
margin-top
:-.
5em
;
width
:
100%
}.vjs-error-display div{
position
:
absolute
;
font-size
:
1.4em
;
text-align
:
center
;
bottom
:
1em
;
right
:
1em
;
left
:
1em
}.vjs-error-display a,.vjs-error-display a:visited{
color
:
#F4A460
}.vjs-loading-spinner{
background
:
url
(../images/bg_player_loading.png)
no-repeat
;
display
:
none
;
position
:
absolute
;
top
:
50%
;
left
:
50%
;
font-size
:
4em
;
line-height
:
1
;
width
:
61px
;
height
:
61px
;
margin-left
:
-30.5px
;
margin-top
:
-30.5px
;opacity:.
75
;-webkit-animation:spin
1.5
s infinite linear;-moz-animation:spin
1.5
s infinite linear;-o-animation:spin
1.5
s infinite linear;animation:spin
1.5
s infinite linear}.video-js.vjs-error .vjs-loading-spinner{
display
:
none
!important
;-webkit-animation:
none
;-moz-animation:
none
;-o-animation:
none
;animation:
none
}@-moz-keyframes spin{
0%
{-moz-transform:rotate(
0
deg)}
100%
{-moz-transform:rotate(
359
deg)}}@-webkit-keyframes spin{
0%
{-webkit-transform:rotate(
0
deg)}
100%
{-webkit-transform:rotate(
359
deg)}}@-o-keyframes spin{
0%
{-o-transform:rotate(
0
deg)}
100%
{-o-transform:rotate(
359
deg)}}@keyframes spin{
0%
{transform:rotate(
0
deg)}
100%
{transform:rotate(
359
deg)}}.vjs-default-skin .vjs-menu-button{
float
:
right
;
cursor
:
pointer
}.vjs-default-skin .vjs-menu{
display
:
none
;
position
:
absolute
;
bottom
:
0
;
left
:
0
;
width
:
0
;
height
:
0
;
margin-bottom
:
3em
;
border-left
:
2em
solid
transparent
;
border-right
:
2em
solid
transparent
;
border-top
:
1.55em
solid
#000
;
border-top-color
:rgba(
7
,
40
,
50
,.
5
)}.vjs-default-skin .vjs-menu-button .vjs-menu .vjs-menu-content{
display
:
block
;
padding
:
0
;
margin
:
0
;
position
:
absolute
;
width
:
10em
;
bottom
:
1.5em
;
max-height
:
15em
;
overflow
:
auto
;
left
:
-5em
;
background-color
:
#07141e
;
background-color
:rgba(
7
,
20
,
30
,.
7
);-webkit-box-shadow:-.
2em
-.
2em
.
3em
rgba(
255
,
255
,
255
,.
2
);-moz-box-shadow:-.
2em
-.
2em
.
3em
rgba(
255
,
255
,
255
,.
2
);box-shadow:-.
2em
-.
2em
.
3em
rgba(
255
,
255
,
255
,.
2
)}.vjs-default-skin .vjs-menu-button:hover .vjs-menu{
display
:
block
}.vjs-default-skin .vjs-menu-button ul li{
list-style
:
none
;
margin
:
0
;
padding
:.
3em
0
;
line-height
:
1.4em
;
font-size
:
1.2em
;
text-align
:
center
;
text-transform
:
lowercase
}.vjs-default-skin .vjs-menu-button ul li.vjs-selected{
background-color
:
#000
}.vjs-default-skin .vjs-menu-button ul li:focus,.vjs-default-skin .vjs-menu-button ul li:hover,.vjs-default-skin .vjs-menu-button ul li.vjs-selected:focus,.vjs-default-skin .vjs-menu-button ul li.vjs-selected:hover{
outline
:
0
;
color
:
#111
;
background-color
:
#fff
;
background-color
:rgba(
255
,
255
,
255
,.
75
);-webkit-box-shadow:
0
0
1em
#fff
;-moz-box-shadow:
0
0
1em
#fff
;box-shadow:
0
0
1em
#fff
}.vjs-default-skin .vjs-menu-button ul li.vjs-menu-title{
text-align
:
center
;
text-transform
:
uppercase
;
font-size
:
1em
;
line-height
:
2em
;
padding
:
0
;
margin
:
0
0
.
3em
;
font-weight
:
700
;
cursor
:
default
}.vjs-default-skin .vjs-subtitles-button:before{
content
:
"\e00c"
}.vjs-default-skin .vjs-captions-button:before{
content
:
"\e008"
}.vjs-default-skin .vjs-captions-button:focus .vjs-control-
content
:before,.vjs-default-skin .vjs-captions-button:hover .vjs-control-
content
:before{-webkit-box-shadow:
0
0
1em
#fff
;-moz-box-shadow:
0
0
1em
#fff
;box-shadow:
0
0
1em
#fff
}.video-js{
background-color
:
#000
;
position
:
relative
;
padding
:
0
;
font-size
:
10px
;
vertical-align
:
middle
;
font-weight
:
400
;
font-style
:
normal
;
font-family
:
Arial
,
sans-serif
;-webkit-user-select:
none
;-moz-user-select:
none
;-ms-user-select:
none
;user-select:
none
}.video-js .vjs-tech{
position
:
absolute
;
top
:
0
;
left
:
0
;
width
:
100%
;
height
:
100%
}.video-js:-moz-full-
screen
{
position
:
absolute
}body.vjs-full-window{
padding
:
0
;
margin
:
0
;
height
:
100%
;overflow-y:
auto
}.video-js.vjs-fullscreen{
position
:
fixed
;
overflow
:
hidden
;
z-index
:
1000
;
left
:
0
;
top
:
0
;
bottom
:
0
;
right
:
0
;
width
:
100%
!important
;
height
:
100%
!important
;
_position
:
absolute
}.video-js:-webkit-full-
screen
{
width
:
100%
!important
;
height
:
100%
!important
}.video-js.vjs-fullscreen.vjs-user-inactive{
cursor
:
none
}.vjs-poster{
background-repeat
:
no-repeat
;
background-position
:
50%
50%
;background-
size
:contain;
cursor
:
pointer
;
height
:
100%
;
margin
:
0
;
padding
:
0
;
position
:
relative
;
width
:
100%
}.vjs-poster img{
display
:
block
;
margin
:
0
auto
;
max-height
:
100%
;
padding
:
0
;
width
:
100%
}.video-js.vjs-using-native-controls .vjs-poster{
display
:
none
}.video-js .vjs-text-track-display{
text-align
:
center
;
position
:
absolute
;
bottom
:
4em
;
left
:
1em
;
right
:
1em
}.video-js.vjs-user-inactive.vjs-playing .vjs-text-track-display{
bottom
:
1em
}.video-js .vjs-text-track{
display
:
none
;
font-size
:
1.4em
;
text-align
:
center
;
margin-bottom
:.
1em
;
background-color
:
#000
;
background-color
:rgba(
0
,
0
,
0
,.
5
)}.video-js .vjs-subtitles{
color
:
#fff
}.video-js .vjs-captions{
color
:
#fc6
}.vjs-tt-cue{
display
:
block
}.vjs-default-skin .vjs-
hidden
{
display
:
none
}.vjs-lock-showing{
display
:
block
!important
;opacity:
1
;
visibility
:
visible
}.vjs-no-js{
padding
:
20px
;
color
:
#ccc
;
background-color
:
#333
;
font-size
:
18px
;
font-family
:
Arial
,
sans-serif
;
text-align
:
center
;
width
:
300px
;
height
:
150px
;
margin
:
0
auto
}.vjs-no-js a,.vjs-no-js a:visited{
color
:
#F4A460
}
|
样式中引用了几张图片,从锤子网上下载就可以了