相關屬性
src屬性
該屬性指定媒體數據的URL地址。
autoplay屬性
在該屬性中指定是否在頁面加載后自動播放,使用方法:
- <video src="test.mov" autoplay></video>
preload屬性
在該屬性中指定視頻或音頻數據是否預加載。如果使用預加載的話,瀏覽器會預先將視頻或音頻進行緩沖,這樣可
以加快播放的速度,因為播放時數據已經預先緩沖完畢。
該性情有三個可選值:none,metadata與auto,默認值為auto.
- none表示不進行預加載。
- metadata表示只預加載媒體的元數據(媒體字節數、第一幀、播放列表、持續時間等)。
- auto表示預加載全部視頻或音頻。
該屬性的使用方法
- <video src="test.mov" preload="auto"></video>
poster (video元素獨有屬性)
當視頻的不可用時,可以使用該元素向用戶展示一幅替代用的圖片,使用方法:
- <video src="test.mov" poster="CannotUse.jpg"></video>
loop屬性
在該屬性中指定是否循環播放視頻或音頻,使用方法:
- <video src="test.mov" autuplay loop></video>
controls屬性
該屬性中指定是否為視頻或音頻添加瀏覽器自帶的播放用的控制條。控制條中具有播放、暫停等按鈕。
- <video src="test.mov" controls></video>
開發者也可以在腳本中自定義控制條,而不使用瀏覽器默認的控制條。
with與height(video獨有屬性)
在該屬性中指定視頻的寬度與高度(以像素為單位)使用方法:
- <video src="test.mov" width="500" height="300"></video>
error屬性
在讀取、使用媒體數據的過程中中,正常情況下,video元素或audio元素的error屬性為null,但是任何時候只要出
現錯誤,error屬性將返回一個MediaError對象,該對象的code返回對應的錯誤狀態,錯誤狀態共有4個可能值,如
下所示。
- MEDIA_ERR_ABORTED(數字值為1):媒體數據的下載過程由於用戶的操作原因而被中止。
- MEDIA_ERR_NETWORK(數字值為2):確認媒體資源可用,但是在下載時出現網絡錯誤,媒體數據下載過程被中止。
- MEDIA_ERR_DECODE(數字值為3):確認媒體資源可能,但是解碼時發生錯誤。
- MEDIA_ERR_SRC_NOT_SUPPORTED(數字值為4):媒體格式不被支持。
- error為只讀屬性。
讀取錯誤狀態的代碼如下:
- <video id="videoElement" src="test.mov">
- <script>
- var video = document.getElementById("videoElement");
- video.addEventListener("error", function()
- {
- var error=video.error;
- switch(error.code)
- {
- case 1:
- alert("視頻的下載過程被中止。");
- break;
- case 2:
- alert("網絡發生故障,視頻的下載過程被中止。");
- break;
- case 3:
- alert("解碼失敗。");
- break;
- case 4:
- alert("不支持播放的視頻格式。");
- break;
- }
- },false);
- </script>
networkState屬性
在媒體數據加載過程中可以使用networkState屬性讀取當前的網絡狀態,共有如下所示的4個可能值:
- NETWORK_EMPTY(數字值為0):元素牌初始狀態。
- NETWORK_IDLE(數字值為1):瀏覽器已選擇好用什么編碼格式來播放媒體,但尚未建立網絡連接。
- NETWORK_LOADING(數字值為2):媒體數據加載中。
- NETWORK_NO_SOURCE(數字值為3):沒有支持的編碼格式,不執行加載。
- error為只讀屬性。
讀取錯誤狀態的代碼如下:
- <video id="videoElement" src="test.mov">
- <script>
- var video = document.getElementById("videoElement");
- video.addEventListener("progess", function(e)
- {
- var networkStateDisplay = document.getElementById("networkState");
- //根據networkState屬性的值來執行處理
- if(video.networkState == 2)
- {
- //計算已加載的字節數與總字節數。
- networkStateDisplay.innerHTML = "加載中...[" + e.loaded + "/" + e.total + "bype]";
- }
- else if(video.networkState == 3)
- {
- networkStateDisplay.innerHTML = "加載失敗";
- }
- },false);
- </script>
currentSrc屬性
可以使用currentSrc屬性來讀取播放中媒體數據的URL地。
currentSrc屬性為只讀屬性。
buffered屬性
可以使用video元素或audio元素的buffered屬性來返回一個對象,該對象實現TimeRanges接口,以確認瀏覽器是否已緩存媒體數據。TimeRanges對象表示一段時間范圍,在大多數情況下,TimeRanges對象表示的時間范圍是一個單一的以0開始的范圍,但是如果瀏覽器發出Range Requests請求,這時TimeRanges對象表示的時間范圍是多個時間范圍。
TimeRanges對象對象具有一個length屬性,表示有多少個時間范圍,大多數情況下存在時間范圍是,該值為1;不存在時間范圍是,該值為0。TimeRanges對象還具體兩個方法,TimeRanges.start(index)與TimeRanges.end(index),大多數情況下將index值設為0就可以了。當用videoElement.buffered語句來實現TimeRanges接口時,TimeRanges.start(0)表示當前緩存區內從媒體數據的什么時間開始進行緩存,TimeRanges.end(0)表示當前緩存區內的結束時間。
readyState屬性
可以使用video元素或audio元素的readyState屬性返回媒體當前播放位置的就緒狀態,共有5個可能的值。
- HAVE_NOTHING(數字值為0):沒有獲取到媒體的任何信息,當前播放位置沒有可播放數據。
- HAVE_METADATA(數字值為1):已經獲取到足夠的媒體數據,但是當前播放位置沒有有效的媒體數據(也就是說,獲取到的媒體數據無效,不能播放)。
- HAVE_CURRENT_DATA(數字值為2):當前播放位置已經有數據可以播放,但沒有獲致到可以讓播放器前進的數據。當媒體為視頻時,意思是當前帖的數據已獲取,但沒有獲取到下一幀的數據,或者當前幀已經是播放的最重一幀。
- HAVE_FUTURE_DATA(數字值為3):當前播放位置已經有數據可以播放,而且也獲取到了可以讓播放器前進的數據。當媒體為視頻時,意思是當前幀的數據已獲取,而且也獲取到了下刺目販數據,當前幀是播放的最后一幀時,readyState屬性不可能為HAVE_FUTURE_DTAT。
- HAVE_ENOUGH)DATA(數字值為4):當前播放位置已經有數據可以播放,同時也獲取到了可以讓播放器前進的數據,而且瀏覽器確認媒體以某一種速度進行加載,可以保證有足夠的后續數據進行播放。
readyState屬性為只讀屬性。
seeking屬性與seekable屬性
可以使用video元素或audio元素的seeking屬性返回一個布爾值,表示瀏覽器是否正在請求某一特定播放位置的數
據,true表示瀏覽器正在請求數據,false表示瀏覽器已停止請求。
可以使用video元素或audio元素的seekable屬性來返回一個TimeRanges對象,該對象表示請求到的數據時間范圍。
當媒體為視頻時,開始時間為請求到視頻數據的第一幀的時間,結束時間為請求到視頻數據的最后一幀的時間。
seeking屬性與seekable屬性只讀屬性
currentTime屬性、startTime屬性與duration屬性
可以使用video元素或audio元素的currentTime屬性來讀取媒體的當前播放位置,也可以通過修改currentTime性情
為修改當前的播放位置。如果修改的位置上沒有可用的媒體數據時,將拋出INVALID_STATE_ERR異常;如果修改的
位置超出了瀏覽器在一次請求中可以請求的數據范圍,將拋出INDEX_SIZE_ERR異常。
可以使用video元素或audio元素的startTime屬性來讀取媒體播放的開始時間,通常為0。
可以使用video元素或audio元素的dutation屬性來讀取媒體文件總的播放時間。
三者的時間、單位均為秒,currentTime為可讀與屬性,其余兩個均為只讀屬性。
played屬性、paused屬性、ended屬性
可以使用video元素或audio元素的played屬性來返回一個TimeRanges對象,該對象中可以讀取媒體文件的已播放部份的時間段。開始時間為已播放部份的開始時間,結束時間為已播放部份的結束時間。
可以使用video元素或audio元素的paused屬性來返回一個布爾值檢測是否處於暫停狀態,true表示暫停播放,
false表示正在播放。
可以使用video元素或audio元素的end屬性來返回一個布爾值檢測是否播放完畢,true表示已播放完畢,false表示
還未播放完畢。
三者均為只讀屬性。
defaultPlayRate屬性與playbackRate屬性
defaultPlayRate屬性讀取或修改媒體的播放速率。
playbackRate屬性讀取或修改媒體當前的播放速率。
volume屬性和muted屬性
volume屬性讀取或修改媒體的的播放音量,范圍從0到1,0為表單,1為最大音量。
muted屬性讀取或修改媒體的表單狀態,該值為布爾值,true表示靜音狀態,false表示非靜音狀態。
相關事件
在利用video元素或audio元素讀取或播放媒體數據的時候,會觸發一系的事件,如果使用JavaScript腳本來捕捉這些事件,就可以對這些事件進行處理了。對這些事件的捕捉及處理,可以按兩種方式來進行。
第一種是監聽的方式,使用video元素或audio元素的addEventListener方法來對事件的發生進行監聽,該方法的定義如下所示。
videoElement.addEventListener ( type,listener,useCapture);
videoElement表示頁面上的video元素或audio元素。type為事件名稱,listener表示綁定的函數,useCapture是一個布爾值,表示該事件的響應順序,該值如果為true,則瀏覽器采用Capture(捕獲)響應方式,如果為false,瀏覽器采用bubbing(冒泡)響應方式,一般采用fase,默認情況下也為false,如下使用方法。
- video.addEventListener("error",function(){
- /******代碼段******/
- },false);
第二種事件處理方式為JavaScript腳本常見的獲取事件句柄的方式,如下例所示。
- <video id="video1" src="test.mov" onplay="begin_playing();"></video>
- function begin_playing(){
- /******代碼段******/
- }
事件介紹
| 事件 | 描述 |
|---|---|
| loadstart | 瀏覽器開始在網上尋找媒體數據 |
| progress | 瀏覽器正在獲取媒體數據 |
| suspend | 瀏覽器暫停獲取媒體數據,但是下載過程並滑正常結束 |
| abort | 瀏覽器在下載完全部媒體數據之前中止獲取媒體數據,但是並不是由錯誤引起的 |
| error | 獲取媒體數據過程中出錯 |
| emptied | video元素或audio元素所在網絡突然變為未初始化狀態可能原因有兩個:1.載入媒體過程中突然發生一個致命錯誤
2.在瀏覽器正在選擇支持的播放格式時,又調用 了load方法重新載入媒體 |
| stalled | 瀏覽器嘗試獲取媒體數據失敗 |
| play | 即將開始播放,當執行了play方法時觸發,或數據下載后元素被設為autoplay屬性 |
| pause | 播放暫停,當執行了pause方式時觸發 |
| loadedmetadata | 瀏覽器獲取完畢媒體的時間長和字節數 |
| waiting | 播放過程由於得不到下一幀而暫停播放(例如下一幀尚未加載完畢),但很快就能夠得到下一幀 |
| canplay | 瀏覽器能夠播放媒體,但估計以當前的播放速率不能直接播放完畢,播放期間需要緩沖 |
| canplaythrough | 瀏覽器能夠播放媒體,而且以當前播放速率能夠將媒體播放完畢,不再需要進行緩沖 |
| seeking | seeking屬性變為true,瀏覽器正在請求數據 |
| seeked | seeking屬性變為false,瀏覽器停止請求數據 |
| timeupdate | 由於播放位置被改變,可能是播放過程中的自然改變,也可能是被人為的改變,或由於播放不能連續而發生的跳變 |
| ended | 播放結束后停止播放 |
| ratechange | defaultplaybackRate屬性(默認播放速率)或playbackRate屬性(當前播放速率)被改變 |
| druationchange | 播放時長被改變 |
| volumechange | volume屬性(音量)被改變或muted屬性(靜音狀態)被改變 |
事件捕捉示例
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="UTF-8" />
- <title>事件捕捉</title>
- <script type="text/javascript">
- function playOrPauseVideo(){
- var videoUrl = document.getElementById("videoUrl").value;
- var video = document.getElementById("video");
- //使用事件監聽方式捕捉事件
- video.addEventListener("timeupdate",function(){
- var timeDisplay = document.getElementById("time");
- //用秒數來顯示當前播放進度
- timeDisplay.innerHTML = Math.floor(video.currentTime) + "/" + Math.floor(video.duration) + " 秒";
- },false);
- if(video.paused){
- if(videoUrl != video.src){
- video.src = videoUrl;
- video.load();
- }else{
- video.play();
- }
- document.getElementById("playButton").value= "暫停";
- }else{
- video.pause();
- document.getElementById("playButton").value = "播放";
- }
- }
- </script>
- </head>
- <body>
- <video id="video" width="400" height="300" autoplay loop="loop"></video>
- <br/>
- 視頻地址:<input type="text" id="videoUrl"/>
- <input type="button" id="playButton" onClick="playOrPauseVideo()" value="播放"/>
- <span id="time"></span>
- </body>
- </html>
我們看一個事件捕捉示例,在播放過程中會經常觸發timeupdat事件來通知當前的播放位置的改變,在該示例中,我們捕捉這個timeupdate事件來顯示當前的播放進度。
相關方法
play方法
使用play方法來播放媒體,自動將元素的paused屬性變為false。
pause方法
使用pause方法來暫停播放,自動將元素的paused屬性變為true。
load方法
使用load方法來重新載入媒體進行播放,自動將元素的playbackRate屬性值變為defaultPlaybackRate屬性的值,自動將元素的error的值變為null.
下面先來看一個媒體播放的示例。
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="UTF-8" />
- <title>video test</title>
- <script type="text/javascript">
- var video;
- function init(){
- video = document.getElementById("video1");
- //監聽視頻播放結束事件
- video.addEventListener("ended",function(){
- alert("播放結束。");
- },true);
- //發生錯誤
- video.addEventListener("error",function(){
- switch(video.error.code){
- case MediaError.Media_ERROR_ABORTED:
- alert("視頻的下載過程被中止。");
- break;
- case MediaError.MEDIA_ERR_NETWORK:
- alert("網絡發生故障,視頻的下載過程被中止。");
- break;
- case MediaError.MEDIA_ERR_DECODE:
- alert("解碼失敗。");
- break;
- case MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED:
- alert("不支持播放的視頻格式。");
- break;
- }
- },false);
- }
- function play(){
- //播放視頻
- video.play();
- }
- function pause(){
- //暫停視頻
- video.pause();
- }
- </script>
- </head>
- <body onLoad="init()">
- <!--可以添加controls屬性來顯示瀏覽器自帶的播放控制條-->
- <video id="video1" src="test.gov"></video>
- <br/>
- <button onClick="play()">播放</button>
- <button onClick="pause()">暫停</button>
- </body>
- </html>
canPlayType方法
使用canPlayType方法來測試瀏覽器是否支持指定的媒體類型,該方法定義如下所示。
- var support = vodeElement.canPlayType(type);
videoElement表示頁面上的video元素或者audio元素,該方法使用一個參數type,該參數的指定方法與soruce元素的type參數相同,都用播放文件的MIME類型來指定,可以在指定的字符串中加上表示媒體編碼格式的codes參數。
該方法返回3個可能值:
- 空字符串:表示瀏覽器不支持此種媒體類型。
- maybe:表示瀏覽器可能支持此種媒體類型。
- probably:表示瀏覽器確定支持此種媒體類型。
