開源代碼flv.js的使用說明

本文轉(zhuǎn)自PHP中文網(wǎng)募舟。

Flv.js

是 HTML5 Flash 視頻(FLV)播放器,純原生 JavaScript 開發(fā),沒有用到 Flash懂扼。由 bilibili 網(wǎng)站開源窘奏。

概覽:

一個(gè)實(shí)現(xiàn)了在 HTML5 視頻中播放 FLV 格式視頻的 JavaScript 庫嘹锁。它的工作原理是將 FLV 文件流轉(zhuǎn)碼復(fù)用成 ISO BMFF(MP4 碎片)片段,然后通過 Media Source Extensions 將 MP4 片段喂進(jìn)瀏覽器着裹。

flv.js 是使用 ECMAScript 6 編寫的领猾,然后通過 Babel Compiler 編譯成 ECMAScript 5,使用 Browserify 打包骇扇。

功能:

  • FLV 容器摔竿,具有 H.264 + AAC 編解碼器播放功能
  • 多部分分段視頻播放
  • HTTP FLV 低延遲實(shí)時(shí)流播放
  • FLV 通過 WebSocket 實(shí)時(shí)流播放
  • 兼容 Chrome, FireFox, Safari 10, IE11 和 Edge
  • 十分低開銷,并且通過你的瀏覽器進(jìn)行硬件加速
    以上是官方的介紹少孝,重點(diǎn)是開源讓我們用了继低,謝謝B站的大神們

以下是我整理的集成使用方案

一、部署方案

1韭山、前提

首先這里要使用到nodejs和npm郁季,如何安裝和部署在我之前的文章有寫過了,這里不再多說钱磅,需要可以看自行搜索梦裂。

2、下載代碼

github地址
需要同步最新代碼的同學(xué)要使用git盖淡,沒有g(shù)it的也可以下載zip文件

image

代碼下載下來后

我放在了D:\code\flv.js-master

image

3年柠、構(gòu)建代碼

因?yàn)榇a不能直接使用,我們需要用到nodejs的npm模塊進(jìn)行構(gòu)建

1)先打開cmd命令行窗口(這里記得用右鍵打開以管理員身份運(yùn)行)褪迟,不然可能運(yùn)行會(huì)error

cd命令到放置代碼的地方冗恨,我是放在D:\code\flv.js-master上

image

2)執(zhí)行npm構(gòu)建,這里是進(jìn)行安裝開發(fā)環(huán)境的操作

npm install

等待執(zhí)行完后味赃,會(huì)出現(xiàn)下圖

image

D:\code\flv.js-master會(huì)多出了一個(gè)node_modules文件夾

image

3)安裝生成工具

npm install -g gulp
image

4)包裝和最小化JS放在dist文件夾里

gulp release
image

然后D:\code\flv.js-master\dist里就終于得到我們需要flv.js和flv.min.js代碼了

flv.js壓縮前代碼

flv.min.js壓縮后代碼

image

二掀抹、整合方案

代碼DEMO-html頁面

<!DOCTYPE html>
<html>
 
<head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
    <title>flv.js demo</title>
 
    <style>
        .mainContainer {
            display: block;
            width: 1024px;
            margin-left: auto;
            margin-right: auto;
        }
 
        .urlInput {
            display: block;
            width: 100%;
            margin-left: auto;
            margin-right: auto;
            margin-top: 8px;
            margin-bottom: 8px;
        }
 
        .centeredVideo {
            display: block;
            width: 100%;
            height: 576px;
            margin-left: auto;
            margin-right: auto;
            margin-bottom: auto;
        }
 
        .controls {
            display: block;
            width: 100%;
            text-align: left;
            margin-left: auto;
            margin-right: auto;
        }
    </style>
</head>
 
<body>
     
    <p class="mainContainer">
        <input name="urlinput" class="urlInput" type="text" value="http://localhost/Test/test1.mp4"/>
        <video name="videoElement" class="centeredVideo" controls autoplay width="1024" height="576">
            Your browser is too old which doesn't support HTML5 video.
        </video>
        <br>
        <p class="controls">
            <button onclick="flv_load()">Load</button>
            <button onclick="flv_start()">Start</button>
            <button onclick="flv_pause()">Pause</button>
            <button onclick="flv_destroy()">Destroy</button>
            <input style="width:100px" type="text" name="seekpoint"/>
            <button onclick="flv_seekto()">SeekTo</button>
        </p>
    </p>
 
    <script src="flv.min.js?1.1.9"></script>
     
    <script>
        function flv_load() {
            console.log('isSupported: ' + flvjs.isSupported());
            var urlinput = document.getElementsByName('urlinput')[0];
            var xhr = new XMLHttpRequest();
            xhr.open('GET', urlinput.value, true);
            xhr.onload = function (e) {
                var player;
                var element = document.getElementsByName('videoElement')[0];
                if (typeof player !== "undefined") {
                    if (player != null) {
                        player.unload();
                        player.detachMediaElement();
                        player.destroy();
                        player = null;
                    }
                }
               
                player = flvjs.createPlayer({
                    type: 'mp4',
                    url: urlinput.value
                });
                player.attachMediaElement(element);
                player.load();
            }
            xhr.send();
        }
 
        function flv_start() {
            player.play();
        }
 
        function flv_pause() {
            player.pause();
        }
 
        function flv_destroy() {
            player.pause();
            player.unload();
            player.detachMediaElement();
            player.destroy();
            player = null;
        }
 
        function flv_seekto() {
            var input = document.getElementsByName('seekpoint')[0];
            player.currentTime = parseFloat(input.value);
        }
 
        function getUrlParam(key, defaultValue) {
            var pageUrl = window.location.search.substring(1);
            var pairs = pageUrl.split('&');
            for (var i = 0; i < pairs.length; i++) {
                var keyAndValue = pairs[i].split('=');
                if (keyAndValue[0] === key) {
                    return keyAndValue[1];
                }
            }
            return defaultValue;
        }
 
        var urlInputBox = document.getElementsByName('urlinput')[0];
        var url = decodeURIComponent(getUrlParam('src', urlInputBox.value));
        urlInputBox.value = url;
         
        document.addEventListener('DOMContentLoaded', function () {
            flv_load();
        });
    </script>
     
</body>
 
</html>

結(jié)果

image

Ps:視頻要放在服務(wù)器上,這里我用的是Java Web項(xiàng)目心俗,tomcat部署傲武,視頻找個(gè)位置就可以了蓉驹,主要是記住位置

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市揪利,隨后出現(xiàn)的幾起案子态兴,更是在濱河造成了極大的恐慌,老刑警劉巖疟位,帶你破解...
    沈念sama閱讀 212,029評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瞻润,死亡現(xiàn)場離奇詭異,居然都是意外死亡甜刻,警方通過查閱死者的電腦和手機(jī)绍撞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來罢吃,“玉大人楚午,你說我怎么就攤上這事昭齐∧蛘校” “怎么了?”我有些...
    開封第一講書人閱讀 157,570評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵阱驾,是天一觀的道長就谜。 經(jīng)常有香客問我,道長里覆,這世上最難降的妖魔是什么丧荐? 我笑而不...
    開封第一講書人閱讀 56,535評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮喧枷,結(jié)果婚禮上虹统,老公的妹妹穿的比我還像新娘。我一直安慰自己隧甚,他們只是感情好车荔,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,650評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著戚扳,像睡著了一般忧便。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上帽借,一...
    開封第一講書人閱讀 49,850評(píng)論 1 290
  • 那天珠增,我揣著相機(jī)與錄音,去河邊找鬼砍艾。 笑死蒂教,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的脆荷。 我是一名探鬼主播凝垛,決...
    沈念sama閱讀 39,006評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了苔严?” 一聲冷哼從身側(cè)響起定枷,我...
    開封第一講書人閱讀 37,747評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎届氢,沒想到半個(gè)月后欠窒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,207評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡退子,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,536評(píng)論 2 327
  • 正文 我和宋清朗相戀三年岖妄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寂祥。...
    茶點(diǎn)故事閱讀 38,683評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡荐虐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出丸凭,到底是詐尸還是另有隱情福扬,我是刑警寧澤,帶...
    沈念sama閱讀 34,342評(píng)論 4 330
  • 正文 年R本政府宣布惜犀,位于F島的核電站铛碑,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏虽界。R本人自食惡果不足惜汽烦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,964評(píng)論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望莉御。 院中可真熱鬧撇吞,春花似錦、人聲如沸礁叔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,772評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽晴圾。三九已至颂砸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間死姚,已是汗流浹背人乓。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留都毒,地道東北人色罚。 一個(gè)月前我還...
    沈念sama閱讀 46,401評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像账劲,于是被迫代替她去往敵國和親戳护。 傳聞我的和親對(duì)象是個(gè)殘疾皇子金抡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,566評(píng)論 2 349

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