rtmp/flv直播配置
必須引入flash
//npm install videojs-flash
//import videojs-flash
<video
id="my-player"
class="video-js vjs-default-skin vjs-big-play-centered vjs-fluid"
preload="auto"
autoplay
style="width: 1200px;height: 640px;"
controls
data-setup="{}"
></video>
import videojs from "video.js";
import "video.js/dist/video-js.css";
import "videojs-flash";
methods: {
playVideo() { var videoPlayer = videojs( "my-player", { sources: [ { src: "rtmp://www.91cb.site:8510/live/product1621", type: "rtmp/flv" } ], muted: true, controls: true, autoplay: true, loop: true, techOrder: ["html5", "flash"], width: "1200", height: "640" }, function() { this.play(); } ); },
}
videojs(el, options, cb)
: 接受三個參數: video
標簽id
, 要實例化的videojs
配置, 回調函數;
常用的videojs
配置選項:
- preload: 是否預加載
- muted : 實現靜音播放, 有一些瀏覽器需要靜音才能實現加載之后自動播放
- controls: 將顯示視頻控件, 如果不需要則去掉controls即可
- autoplay: 視頻在加載完成之后自動播放
- poster: 視頻封面圖片
- loop: true/false, 是否循環播放
- notSupportMessage: 瀏覽器無法播放時的提示信息
- techOrder: 播放控件,默認是
html5
,這里需要播放rtmp
所以首選項要是flash
- fluid: 流式布局,自適應父元素大小
更多的配置可以看videojs-options
常用方法和事件
- autoplay()獲取或者設置自動播放屬性
- currentTime()設置或者獲取當前播放進度
- duration()獲取視屏的總長度,一般要等到視屏對象完全加載后才能獲取到,一般我們會使用定時輪詢的方式來獲取總時長
- ended()獲取當前視屏對象是否已經處於結束狀態
- enterFullWindow() 當全屏不支持我們可以視頻容器延伸到瀏覽器將讓我們一樣寬。經過試驗改api完全無法使視屏進入全屏。分析源碼后發現真正進入全屏的api應該是requestFullscreen(),但可惜該api只能又手勢觸發函數執行,連模擬點擊都沒法觸發他。
- exitFullscreen() 退出全屏,有效的
- exitFullWindow() 退出全屏,試了沒什么用
- height() 設置/獲取播放器的高度
- width() 設置/獲取播放器的寬度
- isFullscreen() 檢查是否處於全屏模式
- load() 開始加載視屏
- loop() 在視頻中獲取或設置循環屬性元素
- muted() 獲取當前的靜音狀態
- pause() 暫停視頻
- paused() 檢查視屏是否暫停
- play() 播放視屏
- played() 檢查視屏播放狀態
- preload() 獲取或設置預加載屬性
- ready() 視屏對象加載完成后調用ready中的回調函數
- poster() 獲取或設置海報圖像源url
- reset() 重載視屏
- src() 更換視頻源
- dispose() 銷毀視頻實例
更多事件以及api
videojs-api
事件監聽采用on('listener', cb)
,off('list')
移除事件監聽
this.on('firstplay', e => {}); this.on('progress', e => {}); this.on('timeupdate', e => {});
- 視頻開始加載時會觸發
firstplay
- 實例化之后會觸發
progress
,有時候實例化之后無法與后台建立連接,可以在回調設置一個定時器,監聽3s后的currentTime()
判斷是否建立連接 - 視頻播放時會不斷觸發
timeupdate
事件,結合currentTime()
可以檢測是否播放中斷
遇到的問題
-
videojs
播放窗口小於400300時無法自動播放,因為video-js.swf
文件跨域.播放rtmp
視頻時videojs
會在cdn
上加載一個video-js.swf
文件,該文件必須同源才能支持播放窗口小於400300時自動播放 -
使用
dispose()
銷毀實例時會將頁面上的dom
節點一並移除,如果需要二次復用,則可以在初始實例化時先將節點保存起來 -
videojs提示 (CODE:4 MEDIA_ERR_SRC_NOT_SUPPORTED) No compatible source was found for this video.可能是沒有開始瀏覽器
flash
支持,chrome
默認是詢問,需要改成允許