html5 音頻和視頻(audio And video)


1、音頻和視頻

 Web 上的視頻
直到現在,仍然不存在一項旨在網頁上顯示視頻的標準。
今天,大多數視頻是通過插件(比如 Flash)來顯示的。然而,並非所有瀏覽器都擁有同樣的插件。
HTML5 規定了一種通過 video 元素來包含視頻的標準方法。

視頻格式
當前,video 元素支持三種視頻格式:
格式       IE    Firefox    Opera   Chrome   Safari
Ogg       No    3.5+    10.5+     5.0+     No
MPEG4   9.0+   No           No      5.0+     3.0+
WebM    No      4.0+    10.6+    6.0+     No
Ogg = 帶有 Theora 視頻編碼和 Vorbis 音頻編碼的 Ogg 文件
MPEG4 = 帶有 H.264 視頻編碼和 AAC 音頻編碼的 MPEG 4 文件
WebM = 帶有 VP8 視頻編碼和 Vorbis 音頻編碼的 WebM 文件

補充:在火狐最新版本下發現其是支持MP4視頻格式的,感謝樓主@正在緩衝的補充!

Web 上的音頻
直到現在,仍然不存在一項旨在網頁上播放音頻的標準。
今天,大多數音頻是通過插件(比如 Flash)來播放的。然而,並非所有瀏覽器都擁有同樣的插件。
HTML5 規定了一種通過 audio 元素來包含音頻的標準方法。
audio 元素能夠播放聲音文件或者音頻流。

音頻格式
當前,audio 元素支持三種音頻格式:
        IE 9   Firefox 3.5    Opera 10.5    Chrome 3.0    Safari 3.0
Ogg Vorbis           √          √        √  
MP3       √                        √          √
Wav               √          √                √

 

簡單的video元素創建

<video src="http://www.w3school.com.cn/example/html5/mov_bbb.ogg" controls>
        您的瀏覽器不支持video元素
</video> 

視頻默認的大小是300*150
controls:顯示視頻的默認的控件

video標籤的使用(帶字幕文件)

<video src="http://www.w3school.com.cn/example/html5/mov_bbb.ogg"> 
        <!--此處添加字幕文件-->
        <track label="English" kind="subtitles" srclang="en" src="./test.vtt" default>
        您的瀏覽器不支持html5 video
    </video> 
複製代碼
<!--字幕文件的格式如下:-->
    <pre>
        WEBVTT
        1
        00:00:00.240 --> 00:00:04.130
        大家好 最近 Visual Studio 2013 做了一些更新

        2
        00:00:04.140 --> 00:00:08.110
        那我們今天請到 twMVC 的 Dino
        來爲我們介紹這個更新裏面關於 SASS Editor 的部分

        3
        00:00:18.120 --> 00:00:19.280
    </pre>
複製代碼

audio元素創建

<audio controls src="http://www.w3school.com.cn/i/song.mp3">
</audio> 

controls:顯示通用的用戶控件,包括開始,停止,跳播,以及音量控制

audio source元素

<audio controls>
        <source src="http://www.w3school.com.cn/i/song.mp3">
        <source src="http://www.w3school.com.cn/i/song.ogg">
    </audio>
    

source提供多個音頻元素,供瀏覽器自身播放能力自動選擇,如果支持的不知一種,瀏覽器會選擇第一個來源。

媒體的控制 自動播放

<audio autoplay controls>
        <source src="http://www.w3school.com.cn/i/song.mp3">
        您的瀏覽器不支持audio
    </audio>

autoplay:設置音頻自動播放

2、可腳本話的視頻和音頻

判斷瀏覽器支持情況
  //    判斷瀏覽器是否支持audio或者video元素最簡單的辦法是用腳本動態創建它,然後檢測特定的函數是否存在
        var hasVideo = !!(document.createElement('video').canPlayType);
    
js中控制音頻或者視頻的內置的方法
      load()        加載音頻或者視頻文件,爲播放做準備。通常情況下不需要調用,除非是動態創建的的元素,用來在在播放前加載
         play()        加載(如果還未加載完成)並播放音頻或視頻文件,除非音頻或視頻已經暫停在其他位置了,否則從頭開始
         pause()        暫停處於播放的視頻或者音頻文件
         canPlayType(type)  試video元素是否支持給定MIME類型的文件
js中控制音頻或者視頻的內置只讀屬性
     duration    整個媒體文件的播放時長,以s爲單位,如果無法獲取時長返回NaN
        paused        如果媒體文件當前被暫停,則返回true,如果還未開始播放也返回true
        ended        如果媒體文件已經播放完畢。返回true
        startTime    返回最早的播放起始時間,一般是0.0,除非是從緩衝過的文件,並且一部分已經不在緩衝區了!
        error        在發生錯誤的時候返回的錯誤代碼
        currentSrc    以字符串的形式返回當前正在播放的或已經加載的文件,對應於瀏覽器就是source選擇的文件
js中可被腳本修改並影響播放的部分媒體元素的特性
複製代碼
     autoplay        將媒體文件設置爲創建後自動播放,或者查詢是否已經設置autoplay
        loop            如果媒體文件已經播放完畢後能重新播放則返回true,或者媒體將媒體文件設置爲循環播放
        currentTime        以s爲單位返回從開始播放到現在所用的時間,在播放過程中,設置currentTime來進行搜索,並定位到媒體文件特定的位置
        controls        顯示或隱藏用戶控制界面,或者查詢用戶控制界面當前是否可見
        volume            在0.0到1.0之前設置音頻音量的值,或者查詢當前音量的相對值
        muted            爲音頻文件設置靜音或者消除靜音,或者檢測當前是否爲靜音
        autobuffer        通知播放器在媒體文件開始播放前是否進行緩衝加載,如果媒體文件設置autoplay,則忽略該屬性
複製代碼
video元素的額外特性
    poster                    在視頻加載完成之前,代表視頻內容的圖片的url地址,該屬性可讀可寫,可以隨意修改
        width,height             取或設置顯示的尺寸。如果設置的寬度與視頻本身大小不匹配,可能導致四周會出現黑色區域
        videoWidth,videoHeight   返回視頻固有的寬度和高度,只讀

3、html5通過canvas抓取視頻(實例演示)

複製代碼
<!doctype html>
<meta charset="utf-8">
<html>
    <title></title>
    <body>
        <video id="movies" src="test.mp4" controls="controls" autobuffer="true" οncanplay="startVideo()" οnended="stopTimeLine()" width="1920px" height="758px">
        </video>
        <canvas id="timeLine" width="1920px" height="758px">
        </canvas>
    </body>
    <script>    
        var updataInterval = 100;//抓取幀的時間間隔
        var frameWidth = 1920;//時序中幀的尺寸
        var frameHeight = 758;
        //時序中總的幀數
        var frameRows = 4;
        var frameColumns = 4;
        var frameGrid = frameRows*frameColumns;
//當前幀 var frameCount = 0; //播放完取消計時器 var intervalid; var videoStart = false; //添加updateFrame函數 function updateFrame(){ var video = document.getElementById('movies'); console.log(video.videoWidth); console.log(video.videoHeight); var timeline = document.getElementById('timeLine'); var cxt = timeline.getContext('2d'); //根據幀數計算出當前播放的播放的位置 //然後以視頻爲輸入參數繪製圖像 var framePos = frameCount%frameGrid; var frameX = (framePos%frameColumns)*frameWidth; var frameY = (framePos%frameRows)*frameHeight; cxt.drawImage(video,0,0,1920,758,frameX,frameY,frameWidth,frameHeight); frameCount++; } function startVideo(){ if(videoStart){ return; } videoStart = true; updateFrame(); intervalId = setInterval(updateFrame,updataInterval); } //處理用戶輸入 var timeLine = document.getElementById('timeLine'); timeLine.onclick = function(evt){ var offX = evt.layerX - timeLine.offsetLeft; var offY = evt.layerY - timeLine.offsetTop; var clickedFrame = Math.floor(offY/frameHeight)*frameRows; clickedFrame += Math.floor(offX/frameWidth); var seekedFramed = (((Math.floor(frameCount/frameGrid)*frameGrid)) + clickedFrame); if(clickedFrame > (frameCount%16)){ seekedFramed = frameGrid; } if(seekedFramed < 0){ return; } var video = document.getElementById('movies'); video.currentTime = seekedFramed*updataInterval/1000; frameCount = seekedFramed; } function stopTimeLine(){ clearInterval(intervalId); } </script> </html>
複製代碼

html5的audio和video元素的引入,讓html5在媒體選擇上可以不需要通過引入插件的形式來播放音頻和視頻文件,此外音頻和視頻的集成API方法也可以方便我們控制音頻和視頻!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章