video 直播 視頻播放

video.js
擁有豐富的插件,使用簡(jiǎn)單

hls.js
小巧,適合直播推流

video標(biāo)簽屬性及事件

/**
* poster           貼圖
* controls         自動(dòng)播放
* muted            靜音
* loop             循環(huán)播放
* preload          預(yù)加載
* controls         自動(dòng)播放
*/
<video src="test.mp4" poster="./poster.jpg" controls muted loop preload>

<!-- 音量控制 -->
<video src="test.mp4" id="_volume"></video>
<script type="text/javascript">
   var v = document.getElementById('_volume');
   v.volume = 0.5;
</script>

<!--播放時(shí)間控制 -->
<video src="test.mp4" id="_time"></video>
<script type="text/javascript">
   var t = document.getElementById('_time');
   t.currentTime = 60; //秒
</script>

<!--播放地址切換 -->
<video src="test.mp4" id="_src"></video>
<script type="text/javascript">
   var s = document.getElementById('_src');
   setTimeout(()=>{
      s.src = 'test-2.mp4'
   },1000)
</script>

<!--備用地址切換 -->
<video  id="_source">
  <source src="test-1.mp4" type="video/mp4"> 
  <source src="test-2.mp4" type="video/mp4"> 
  <source src="test-3.mp4" type="video/mp4"> 
</video>
<script type="text/javascript">
  //播放失敗時(shí),切換下一個(gè)
   var s = document.getElementById('_source');
   setTimeout(()=>{
     console.log('src',s.currentSrc)
   },1000)
</script>

以下簡(jiǎn)單介紹事件

<video src="text.mp4" id="video">
var video = document.getElementById('video');
//視頻在創(chuàng)立初期時(shí),duration是NaN  需要加載完視頻元數(shù)據(jù)之后才能獲取到視頻時(shí)長(zhǎng)(有可能只獲取一部分)
console.log(video.duration,'duration')
video.paused     //播放是否暫停
video.play()        //開(kāi)始播放
video.pause()     //暫停播放

//視頻開(kāi)始加載   第一個(gè)執(zhí)行的事件
video.addEventListener('loadstart',function(e){
  console.log(e,'loadstart')
})

//視頻時(shí)長(zhǎng)發(fā)生變化
video.addEventListener('durationchange',function(e){
   //此時(shí)可以獲取到視頻時(shí)長(zhǎng)
  console.log(e,'durationchange')
})

//視頻元數(shù)據(jù)加載完畢
video.addEventListener('loadedmetadata',function(e){
  console.log(e,'loadedmetadata')
})

//沒(méi)有足夠的數(shù)據(jù),來(lái)播放下一個(gè)視頻片段
video.addEventListener('loadeddata',function(e){
  console.log(e,'loadeddata')
})

//正在加載數(shù)據(jù)  會(huì)多次觸發(fā)
video.addEventListener('progress',function(e){
  console.log(e,'progress')
})

//通常視頻播放需要canplay,canplaythrough事件
//播放視頻有部分幀準(zhǔn)備完畢,可以播放
video.addEventListener('canplay',function(e){
  console.log(e,'canplay')
})

//已經(jīng)可以流暢的播放
video.addEventListener('canplaythrough',function(e){
  console.log(e,'canplaythrough')
})

//監(jiān)聽(tīng)視頻播放   (暫停到播放狀態(tài)的改變)
video.addEventListener('play',function(e){
  console.log(e,'play')
})

//監(jiān)聽(tīng)視頻暫停   (播放到暫停狀態(tài)的改變)
video.addEventListener('pause',function(e){
  console.log(e,'pause')
})

//跳轉(zhuǎn)到指定地方時(shí)觸發(fā)
video.addEventListener('seeking',function(e){
  console.log(e,'seeking')
})

//跳轉(zhuǎn)到指定地方后觸發(fā)
video.addEventListener('seeked',function(e){
  console.log(e,'seeked')
})

//無(wú)法解碼,視頻無(wú)法更新  (緩沖)
video.addEventListener('waiting',function(e){
  console.log(e,'waiting')
})

//從waiting狀態(tài)解碼成功后可到playing狀態(tài)
video.addEventListener('playing',function(e){
  console.log(e,'playing')
})

//視頻時(shí)間實(shí)時(shí)更新 (自定義進(jìn)度條)
video.addEventListener('timeupdate',function(e){
  console.log(e,'timeupdate')
})

//視頻播放結(jié)束(結(jié)束后插入廣告)
video.addEventListener('ended',function(e){
  console.log(e,'ended')
})

//視頻播放報(bào)錯(cuò) (測(cè)試時(shí) 重試大概31次觸發(fā)error事件)
video.addEventListener('error',function(e){
  console.log(e,'error')
})

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容