您好,登錄后才能下訂單哦!
HTML5新增了兩個與媒體相關的標簽,讓開發人員不必依賴任何插件就能在網頁中嵌入跨瀏覽器的音頻和視頻內容,這兩個標簽是<audio>和<video>,且不被IE8-瀏覽器支持
以視頻文件舉例,它包含了音頻軌道、視頻軌道和其他一些元數據(封面、標題、子標題、字幕等)
使用這兩個元素至少要在標簽中包含src屬性。位于開始和結束標簽之間的任何內容都將作為后備內容,在瀏覽器不支持這兩個媒體元素的情況下顯示
autoplay 自動播放 controls 顯示控件 loop 循環播放 preload 音頻在頁面加載時進行加載,并預備播放(若使用autoplay,則忽略該屬性) src 要播放的音頻的URL
<audio controls autoplay loop muted src="song.mp3"> <source src="song.mp3" type="audio/mp3" /> </audio>
[注意]<audio>元素不支持播放wma格式的文件
<演示框>點擊下列相應屬性值可進行演示
autoplay 自動播放 controls 顯示控件 height 播放器高度 width 播放器寬度 loop 循環播放 preload 視頻在頁面加載時進行加載,并預備播放(若使用autoplay,則忽略該屬性) preload="none" //當頁面加載后不載入視頻preload="auto" //當頁面加載后載入整個視頻preload="meta" //當頁面加載后只載入元數據src 要播放的視頻的URL poster 規定視頻下載時顯示的圖像,或者在用戶點擊播放按鈕前顯示的圖像
<video id="test" src="movie.mp4" width="280" height="200" poster="diejia.jpg"></video>
<演示框>點擊下列相應屬性值可進行演示
為<video>和<audio>提供媒介資源
media 規定媒體資源的類型(沒有瀏覽器支持) src 規定媒體文件的URL type 規定媒體資源的MIME類型
常用類型
視頻 [1]video/ogg [2]video/mp4 [3]video/webm
音頻 [1]audio/ogg [2]audio/mpeg
使用<audio>和<video>至少要在標簽中包含src屬性。位于開始和結束標簽之間的任何內容都將作為后備內容,在瀏覽器不支持這兩個媒體元素的情況下顯示
<video src="#"> video player not available.</video>
<audio src="#"> audio player not available.</audio>
因為并非所有瀏覽器都支持所有媒體格式,所以可以指定多個不同的媒體來源。為此,不用在標簽中指定src屬性,而是使用一個或多個<source>元素
<video> <source src="video.webm" type="video/webm; codecs='vp8,vorbis'"> <source src="video.ogg" type="video/ogg; codecs='theora,vorbis'"> <source src="video.mp4"> video player not available.</video>
<audio> <source src="audio.ogg" type="audio/ogg"> <source src="audio.mp3" type="audio/mp3"> audio player not available.</audio>
因為并非所有瀏覽器都支持<audio>和<video>標簽,所以更好的解決辦法是有備選內容
<audio controls="controls" height="100" width="100"> <source src="song.mp3" type="audio/mp3" /> <embed height="100" width="100" src="song.mp3" /> </audio>
<video width="320" height="240" controls="controls"> <source src="movie.mp4" type="video/mp4" /> <object data="movie.mp4" width="320" height="240"> <embed src="movie.mp4" width="320" height="240" /> </object> </video>
<track>
元素被當作媒體元素—<audio>
和<video>
的子元素來使用。它允許指定計時字幕(或者基于事件的數據),例如自動處理字幕
track
給媒體元素添加的數據的類型在kind
屬性中設置,屬性值可以是 subtitles
, captions
, descriptions
, chapters
或 metadata
。該元素指向當用戶請求額外的數據時瀏覽器公開的包含定時文本的源文件。一個media
元素的任意兩個track
子元素不能有相同的 kind、
srclang
和 label
屬性
【default】
default屬性規定該軌道是默認的,假如沒有選擇任何軌道
【kind】
kind屬性表示軌道屬于什么文本類型
captions 該軌道定義將在播放器中顯示的簡短說明 chapters 該軌道定義章節,用于導航媒介資源 descriptions 該軌道定義描述,用于通過音頻描述媒介的內容,假如內容不可播放或不可見 metadata 該軌道定義腳本使用的內容 subtitles 該軌道定義字幕,用于在視頻中顯示字幕
【label】
label屬性表示軌道的標簽或標題
【url】
URL屬性表示字幕文件的URL
【srclang】
srclang屬性表示軌道的語言,若 kind 屬性值是 "subtitles",則該屬性必需的。中文為"zh",英文為"en"
字幕文件書寫格式如下所示,注意,毫秒位的3個0不能省略
WEBVTT100:00:01.000 --> 00:00:08.000歡迎來到小火柴的個人網站
<video width="320" height="240" controls="controls"> <source src="mov.mp4" type="video/mp4" /> <track src="cn_track.vtt" srclang="zh" default kind="captions" label="歡迎你"> <object data="mov.mp4" width="320" height="240"> <embed src="mov.mp4" width="320" height="240" /> </object> </video>
HTML5 DOM為<audio>和<video>元素提供了方法、屬性和事件
1、canPlayType()
檢測瀏覽器是否能播放指定的音頻或視頻類型,返回值為下列之一:
'probable':瀏覽器最可能支持該類型'maybe':瀏覽器也許支持該類型'':瀏覽器不支持該類型
//常用值video/ogg video/mp4 video/webm audio/mpeg audio/ogg audio/mp4 video/ogg;codecs="theora,vorbis"video/mp4;codecs="avc1.4D401E,mp4a.40.2"video/webm;codecs="vp8.0,vorbis"audio/ogg;codecs="vorbis"audio/mp4;codecs="mp4a.40.5"
<audio id="audio" src="song.mp3"></audio> <script>var audio = document.getElementById('audio');//probablyconsole.log(audio.canPlayType('video/ogg;codecs="theora,vorbis"'));</script>
2、load()
重新加載音頻或視頻元素,用于在更改src來源或其他設置后對音頻或視頻元素進行更新
<audio id="audio" src="song.mp3" autoplay controls></audio> <script> var audio = document.getElementById('audio'); audio.src = 'myocean.mp3'; audio.load();</script>
3、play()
開始播放音頻或視頻
4、pause()
暫停當前播放的音頻或視頻
<button onclick = 'audio.play();'>播放</button> <button onclick = 'audio.pause();'>暫停</button> <audio id="audio" src="myocean.mp3" controls></audio>
<演示框>點擊下列相應屬性值可進行演示
[注意]所有屬性中,只有videoWidth和videoHeight是立即可用的,在音視頻的元數據加載后,其他屬性才可用
【只讀】
1、buffered
buffered.length//獲取已緩沖范圍的數量buffered.start(index)//獲取某個已緩沖范圍的開始位置buffered.end(index)//獲取某個已緩沖范圍的結束位置buffered.end(0)//獲取當前已緩沖的秒數
<button>獲取緩沖時間</button> <audio id="audio" src="http://7xpdkf.com1.z0.glb.clouddn.com/myocean.mp3" controls></audio> <script>var oBtn = document.getElementsByTagName('button')[0]; oBtn.onclick = function(){ alert(audio.buffered.end(0)); }</script>
2、currentSrc
返回當前音頻或視頻的URL
<audio id="audio" src="http://7xpdkf.com1.z0.glb.clouddn.com/myocean.mp3" controls></audio> <script>var audio = document.getElementById('audio');//http://7xpdkf.com1.z0.glb.clouddn.com/myocean.mp3setInterval(function(){ console.log(audio.currentSrc); },1000); </script>
3、ended
返回音頻或視頻是否已結束
<audio id="audio" src="http://7xpdkf.com1.z0.glb.clouddn.com/myocean.mp3" controls></audio> <script>document.onclick = function(){ console.log(audio.ended); } </script>
4、duration
返回當前音頻或視頻的長度(以秒計),如果未設置則返回NaN
<audio id="audio" src="http://7xpdkf.com1.z0.glb.clouddn.com/myocean.mp3" controls></audio> <script> //NaNconsole.log(audio.duration); //317.022041setTimeout(function(){ console.log(audio.duration); },1000);
5、networkState
返回音頻或視頻當前網絡狀態
networkState:0(尚未初始化) networkState:1(已選取資源,但并未使用網絡) networkState:2(正在下載數據) networkState:3(未找到資源來源)
<audio id="audio" src="http://7xpdkf.com1.z0.glb.clouddn.com/myocean.mp3" controls></audio> <script>//3console.log(audio.networkState)//1document.onclick = function(){ console.log(audio.networkState); }</script>
6、paused
返回音頻或視頻是否已暫停新航道雅思培訓
paused:true;(已暫停) paused:false;(未暫停)
<audio id="audio" src="http://7xpdkf.com1.z0.glb.clouddn.com/myocean.mp3" controls></audio> <script>console.log(audio.paused) document.onclick = function(){ console.log(audio.paused); }</script>
7、played
已播范圍是指音頻或視頻的時間范圍。如果用戶在音頻或視頻中跳躍,會獲得多個播放范圍
played.length(獲得音頻或視頻已播放范圍的數量) played.start(index)(獲得某個已播范圍的開始位置) played.end(index)(獲得某個已播范圍的結束位置)
[注意]首段已播范圍的下標是0
<audio id="audio" src="http://7xpdkf.com1.z0.glb.clouddn.com/myocean.mp3" controls></audio> <script>document.onclick = function(){ console.log(audio.played.end(0)); }</script>
8、readyState
返回音頻或視頻的當前就緒狀態
readyState:0(沒有關于音頻或視頻是否就緒的信息) readyState:1(關于音頻或視頻就緒的元數據) readyState:2(關于當前播放位置的數據是可用的,但沒有足夠的數據來播放下一幀) readyState:3(當前及至少下一幀的數據是可用的) readyState:4(可用數據足以開始播放)
<audio id="audio" src="http://7xpdkf.com1.z0.glb.clouddn.com/myocean.mp3" controls></audio> <script>//0console.log(audio.readyState);//4document.onclick = function(){ console.log(audio.readyState); }</script>
9、seekable
返回可尋址范圍,可尋址范圍是指用戶在視頻或音頻中可尋址(移動播放位置)的時間范圍。對于流視頻,通常可以尋址到視頻中的任何位置,即使其尚未完成緩沖
seekable.length(獲得音頻或視頻中可尋址范圍的數量) seekable.start(index)(獲得可尋址范圍的開始位置) seekable.end(index)(獲得可尋址范圍的結束位置)
<audio id="audio" src="http://7xpdkf.com1.z0.glb.clouddn.com/myocean.mp3" controls></audio> <script>document.onclick = function(){ console.log(audio.seekable.end(0)); }</script>
10、seeking
seeking:true(用戶正在尋址) seeking:false(用戶沒有在尋址)
<audio id="audio" src="http://7xpdkf.com1.z0.glb.clouddn.com/myocean.mp3" controls></audio> <script>audio.onseeking = function(){ console.log(audio.seeking); } </script>
【可讀寫】
1、autoplay
autoplay:false(默認,不自動播放) autoplay:true(自動播放)
2、controls
controls:false(默認,不顯示控件) controls:true(顯示控件)
3、crossOrigin
設置或返回CORS設置
4、currentTime
設置或返回音頻或視頻的當前位置(以秒計)
<audio id="audio" src="http://7xpdkf.com1.z0.glb.clouddn.com/myocean.mp3" controls></audio> <script>var audio = document.getElementById('audio'); document.onclick = function(){ console.log(audio.currentTime); audio.currentTime = 5; console.log(audio.currentTime); }; </script>
5、defaultMuted(只有chrome支持)
defaultMuted:true(初始靜音) defaultMuted:false(默認,初始不靜音)
audio.defaultMuted = true;
6、muted
muted:true(靜音) muted:false(不靜音)
<button onclick="audio.muted = !audio.muted">音量開關</button> <audio id="audio" src="http://7xpdkf.com1.z0.glb.clouddn.com/myocean.mp3" controls></audio>
7、defaultPlaybackRate
defaultPlaybackRate:1(正常速度) defaultPlaybackRate:0.5(半速) defaultPlaybackRate:2(倍速) defaultPlaybackRate:-1(向后正常速度) defaultPlaybackRate:-0.5(向后半速)
var audio = document.getElementById('audio'); setTimeout(function(){ audio.defaultPlaybackRate = 0.5; audio.load(); },1000);
8、playbackRate
playbackRate:1(正常速度) playbackRate:0.5(半速) playbackRate:2(倍速) playbackRate:-1(向后正常速度) playbackRate:-0.5(向后半速)
<audio id="audio" src="http://7xpdkf.com1.z0.glb.clouddn.com/myocean.mp3" controls></audio> <script>var array = [-1,-0.5,0.5,1,2];var i = 0;var audio = document.getElementById('audio'); document.onclick = function(){ audio.playbackRate = array[i]; console.log(audio.playbackRate); i++; i=i%5; }
9、loop
loop:true(循環播放) loop:false(默認,不循環播放)
10、preload
設置或返回是否在頁面加載后立即加載音頻或視頻
preload:auto;(一旦頁面加載,則開始加載音頻或視頻) preload:metadata;(當頁面加載后僅加載音頻或視頻的元數據) preload:none;(頁面加載后不加載音頻或視頻)
[注意]當設置autoplay時,該屬性無效
11、src
設置或返回音頻或視頻的當前來源
<audio id="audio" src="http://7xpdkf.com1.z0.glb.clouddn.com/myocean.mp3" controls></audio> <script>console.log(audio.src); document.onclick = function(){ console.log(audio.src); audio.src = 'http://7xpdkf.com1.z0.glb.clouddn.com/song.mp3'; audio.load(); console.log(audio.src); } </script>
12、volume
設置或返回音頻或視頻的當前音量
volume(取得為0-1,0為靜音,1為最大,默認為1)
<button onclick = "if(audio.volume<=0.9)audio.volume+=0.1;">增大音量</button> <button onclick = "if(audio.volume>=0.1)audio.volume-=0.1;">減小音量</button> <audio id="audio" src="http://7xpdkf.com1.z0.glb.clouddn.com/myocean.mp3" controls></audio>
當音頻或視頻正在加載過程中,會依次發生以下事件:
loadstart:提示瀏覽器開始尋找指定的音頻或視頻 progress:提示瀏覽器正在下載指定的音頻或視頻 durationchange:提示音頻或視頻的時長已改變 loadedmetadata:提示音頻或視頻的元數據已加載 loadeddata:提示音頻或視頻的當前幀已加載,但沒有足夠數據播放下一幀 canplay:提示瀏覽器能夠開始播放指定的音頻或視頻 canplaythrough:提示音頻或視頻能夠不停頓地一直播放 progress:提示瀏覽器正在下載指定的音頻或視頻
<audio id="audio" src="http://7xpdkf.com1.z0.glb.clouddn.com/myocean.mp3" controls></audio> <script> audio.onloadstart = function(){ console.log('loadstart'); } audio.ondurationchange = function(){ console.log('durationchange'); } audio.onloadedmetadata = function(){ console.log('loadedmetadata'); } audio.onloadeddata = function(){ console.log('loadeddata'); } audio.onprogress = function(){ console.log('progress'); } audio.oncanplay = function(){ console.log('canplay'); } audio.oncanplaythrough = function(){ console.log('canplaythrough'); } </script>
影響音頻或視頻數據加載的事件有以下幾個:
abort:在音頻或視頻終止加載時觸發
error:在音頻或視頻加載發生錯誤時觸發
stalled:在瀏覽器嘗試獲取媒體數據,但數據不可用時觸發
suspend:在音頻或視頻數據被阻止加載時觸發(可以是完成加載后觸發,或者因為被暫停)
empted:在發生故障并且文件突然不可用時觸發
<video id="video" src="http://7xpdkf.com1.z0.glb.clouddn.com/movie.mp4" controls></video> <script>setTimeout(function(){ video.src=''; },2000); video.onabort = function(){ console.log('abort'); } video.onerror = function(){ console.log('error'); } video.onstalled = function(){ console.log('stalled'); } video.onsuspend = function(){ console.log('suspend'); } video.onemptied = function(){ console.log('emptied'); }</script>
音頻或視頻控制按鈕發生改變時觸發以下事件:
play:音頻或視頻文件已經就緒可以開始播放時觸發 playing:音頻或視頻已開始播放時觸發 ended:音頻或視頻文件播放完畢后觸發 pause:音頻或視頻文件暫停時觸發 ratechange:播放速度改變進觸發 seeked:指示定位已結束時觸發 seeking:正在進行指示定位時觸發 timeupdate:播放位置改變時觸發[注意:播放和調整指示定位時都會觸發] volumechange:音量改變時觸發 waiting:需要緩沖下一幀而停止時觸發
<audio id="audio" src="http://7xpdkf.com1.z0.glb.clouddn.com/honey.mp3" controls></audio> <script> var i = 1; document.onclick = function(){ i+=0.1; audio.playbackRate = i; } audio.onended = function(){ console.log('ended'); } audio.onpause = function(){ console.log('pause'); } audio.onplay = function(){ console.log('play'); } audio.onplaying = function(){ console.log('playing'); } audio.onratechange = function(){ console.log('ratechange'); } audio.onseeked = function(){ console.log('seeked'); } audio.onseeking = function(){ console.log('seeking'); } audio.ontimeupdate = function(){ console.log('timeupdate'); } audio.onvolumechange = function(){ console.log('volumechange'); } audio.onwaiting = function(){ console.log('waiting'); } </script>
<audio>元素在一個原生的javascript構造函數Audio,可以在任何時候播放音頻。Audio和Image很像,但Audio不用像Image那樣必須插入到文檔中,只要創建一個新實例,并傳入音頻源文件即可
var audio = new Audio('test.mp3');
<script>var audio = new Audio('http://7xpdkf.com1.z0.glb.clouddn.com/honey.mp3'); audio.oncanplaythrough = function(){ audio.controls = true; document.body.appendChild(audio); }</script>
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。