vue中使用vue-video-player饶火,播放m3u8格式的視頻及設置請求頭

video.js

  • 提供插件API拔创,以便可以將不同類型的視頻傳遞給本機視頻元素(例如庶近,HLSFlash训挡,HTML5視頻等)澳骤。
  • 跨瀏覽器統(tǒng)一原生視頻API(必要時對功能進行填充支持)
  • 提供可擴展和可擴展的UI
  • 確保鍵盤和屏幕閱讀器用戶的可訪問性
  • 有一組核心插件,支持其他視頻格式:

后臺加密采用的是切片加密澜薄,我項目中用戶點播的時候拿到的是一個m3u8格式的視頻連接为肮,M3U8 是 Unicode 版本的M3U,用 UTF-8 編碼肤京。"M3U" 和 "M3U8" 文件都是蘋果公司使用的 HTTP Live Streaming(HLS) 協(xié)議格式的基礎(chǔ)颊艳,這種協(xié)議格式可以在 iPhone 和 Macbook 等設備播放。而 HLS是一個由蘋果公司提出的基于 HTTP 的流媒體網(wǎng)絡傳輸協(xié)議。

HLS 的工作原理是把整個流分成一個個小的基于 HTTP 的文件來下載籽暇,每次只下載一些温治。當媒體流正在播放時,客戶端可以選擇從許多不同的備用源中以不同的速率下載同樣的資源戒悠,允許流媒體會話適應不同的數(shù)據(jù)速率熬荆。在開始一個流媒體會話時,客戶端會下載一個包含元數(shù)據(jù)的 extended M3U (m3u8) playlist文件绸狐,用于尋找可用的媒體流卤恳。
HLS 只請求基本的 HTTP 報文,與實時傳輸協(xié)議(RTP)不同寒矿,HLS 可以穿過任何允許 HTTP 數(shù)據(jù)通過的防火墻或者代理服務器突琳。它也很容易使用內(nèi)容分發(fā)網(wǎng)絡來傳輸媒體流。

簡而言之符相,HLS 是新一代流媒體傳輸協(xié)議拆融,其基本實現(xiàn)原理為將一個大的媒體文件進行分片,將該分片文件資源路徑記錄于 m3u8 文件(即 playlist)內(nèi)啊终,其中附帶一些額外描述(比如該資源的多帶寬信息···)用于提供給客戶端镜豹。客戶端依據(jù)該 m3u8 文件即可獲取對應的媒體資源蓝牲,進行播放趟脂。

我去,跑題了例衍,昔期,,說重點了佛玄。

  cnpm install video.js -D
  cnpm install videojs-contrib-hls --save
main.js中引入css 
import hls from 'videojs-contrib-hls'
Vue.use(hls)
// 組件中引入video樣式
<video-player
        @click.stop
        class="video-player"
        :playsinline="playsinline"    //播放器的配置硼一,下面的方法,官方文檔中給出了對應的解釋
        :options="playerOptions"
        :headers="headers"
        @play="onPlayerPlay($event)"
        @pause="onPlayerPause($event)"
        @ended="onPlayerEnded($event)"
        @loadeddata="onPlayerLoadeddata($event)"
        @waiting="onPlayerWaiting($event)"
        @playing="onPlayerPlaying($event)"
        @timeupdate="onPlayerTimeupdate($event)"
        @canplay="onPlayerCanplay($event)"
        @canplaythrough="onPlayerCanplaythrough($event)"
        @ready="playerReadied"
        @statechanged="playerStateChanged($event)"
      >
</video-player>
import 'video.js/dist/video-js.css'
import 'vue-video-player/src/custom-theme.css'
// js部分
export default {
  name: 'index',
  props: ['videoPath'],
  data () {
    return {
      playsinline: true,
      playerOptions: {
        events: [],
        playbackRates: [0.7, 1.0, 1.5, 2.0], // 播放速度
        autoplay: true, // 如果true,瀏覽器準備好時開始回放翎嫡。
        controls: true, //  控制條
        preload: 'auto', // 視頻預加載
        muted: false, //  默認情況下將會消除任何音頻欠动。
        loop: false, // 導致視頻一結(jié)束就重新開始。
        language: 'zh-CN',
        controlBar: {
          timeDivider: true,
          durationDisplay: true
        },
        aspectRatio: '16:9', // 將播放器置于流暢模式惑申,并在計算播放器的動態(tài)大小時使用該值具伍。值應該代表一個比例 - 用冒號分隔的兩個數(shù)字(例如"16:9"或"4:3")
        fluid: true, // 當true時,Video.js player將擁有流體大小圈驼。換句話說人芽,它將按比例縮放以適應其容器。
        sources: [{
          type: 'application/x-mpegURL',
          src: ''
        }],
        hls: true, // 啟用hls绩脆?
        poster: '', // 你的封面地址
        width: document.documentElement.clientWidth,
        notSupportedMessage: '此視頻暫無法播放萤厅,請稍后再試' //  允許覆蓋Video.js無法播放媒體源時顯示的默認信息橄抹。
      },
  
    }
  },
  created () {
    let userInfo = localStorage.getItem('userInfo')
    let token = JSON.parse(userInfo).accessToken
    this.playerOptions.sources[0].src = this.videoPath
  },
  methods: {
    // listen event
    onPlayerPlay (player) {
      console.log('player play!', player)
    },
    onPlayerPause (player) {
      console.log('player pause!', player)
    },
    onPlayerEnded (player) {
      console.log('player ended!', player)
    },
    onPlayerLoadeddata (player) {
      console.log('player Loadeddata!', player)
    },
    onPlayerWaiting (player) {
      console.log('player Waiting!', player)
    },
    onPlayerPlaying (player) {
      console.log('player Playing!', player)
    },
    onPlayerTimeupdate (player) {
      console.log('player Timeupdate!', player.currentTime())
    },
    onPlayerCanplay (player) {
      console.log('player Canplay!', player)
    },
    onPlayerCanplaythrough (player) {
      console.log('player Canplaythrough!', player)
    },
    playerStateChanged (playerCurrentState) {
      console.log(playerCurrentState)
    },
    playerReadied (player) {
      let _this = this
      var hls = player.tech({ IWillNotUseThisInPlugins: true }).hls
      player.tech_.hls.xhr.beforeRequest = function (options) {
        console.log(options)
        let userInfo = localStorage.getItem('userInfo')
        let token = JSON.parse(userInfo).accessToken
        options.headers = {
          'Accept': 'application/json, text/plain, */*',
          'Content-Type': 'application/json;charset=UTF-8',
          'Accept-Language': 'zh-CN,zh;q=0.9,hy;q=0.8,mn;q=0.7',
          'Authorization': 'Bearer ' + token
        }
        return options
      }
    },
    close () {
      this.$emit('close')
    }
  }
}

let userInfo = localStorage.getItem('userInfo')
let token = JSON.parse(userInfo).accessToken
options.headers = {
'Accept': 'application/json, text/plain, /',
'Content-Type': 'application/json;charset=UTF-8',
'Accept-Language': 'zh-CN,zh;q=0.9,hy;q=0.8,mn;q=0.7',
'Authorization': 'Bearer ' + token
}
return options

重點在以上部分,因為當用戶點播的時候惕味,后臺需要對其進行鑒權(quán)楼誓。需要設置請求頭將用戶的token傳給后臺,查閱了好多博客名挥,沒有給出合理的配置疟羹,也有說修改源碼解決的,我也嘗試著改了源碼禀倔,都模塊化了榄融,好多東西找不到修改的位置。改的也是一團糟救湖,也嘗試了別的播放器愧杯,發(fā)現(xiàn)都沒有vue-video-player成熟。就在官網(wǎng)中又找了找鞋既。查閱好幾遍力九,就發(fā)現(xiàn)只有這塊能攔截到請求,但并沒有告訴怎么改涛救,扎心了畏邢。試了好幾種。最后這種形式的成功的把請求頭設置了检吆。希望能幫到正在觀看的你。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末程储,一起剝皮案震驚了整個濱河市蹭沛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌章鲤,老刑警劉巖摊灭,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異败徊,居然都是意外死亡帚呼,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門皱蹦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來煤杀,“玉大人,你說我怎么就攤上這事沪哺∩蜃裕” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵辜妓,是天一觀的道長枯途。 經(jīng)常有香客問我忌怎,道長,這世上最難降的妖魔是什么酪夷? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任榴啸,我火速辦了婚禮,結(jié)果婚禮上晚岭,老公的妹妹穿的比我還像新娘鸥印。我一直安慰自己,他們只是感情好腥例,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布辅甥。 她就那樣靜靜地躺著,像睡著了一般燎竖。 火紅的嫁衣襯著肌膚如雪璃弄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天构回,我揣著相機與錄音夏块,去河邊找鬼。 笑死纤掸,一個胖子當著我的面吹牛脐供,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播借跪,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼政己,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了掏愁?” 一聲冷哼從身側(cè)響起歇由,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎果港,沒想到半個月后沦泌,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡辛掠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年谢谦,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片萝衩。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡回挽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出欠气,到底是詐尸還是另有隱情厅各,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布预柒,位于F島的核電站队塘,受9級特大地震影響袁梗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜憔古,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一遮怜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鸿市,春花似錦锯梁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至内舟,卻和暖如春合敦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背验游。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工充岛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人耕蝉。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓崔梗,卻偏偏與公主長得像,于是被迫代替她去往敵國和親垒在。 傳聞我的和親對象是個殘疾皇子蒜魄,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容