本文轉(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文件
代碼下載下來后
我放在了D:\code\flv.js-master
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上
2)執(zhí)行npm構(gòu)建,這里是進(jìn)行安裝開發(fā)環(huán)境的操作
npm install
等待執(zhí)行完后味赃,會(huì)出現(xiàn)下圖
D:\code\flv.js-master會(huì)多出了一個(gè)node_modules文件夾
3)安裝生成工具
npm install -g gulp
4)包裝和最小化JS放在dist文件夾里
gulp release
然后D:\code\flv.js-master\dist里就終于得到我們需要flv.js和flv.min.js代碼了
flv.js壓縮前代碼
flv.min.js壓縮后代碼
二掀抹、整合方案
代碼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é)果
Ps:視頻要放在服務(wù)器上,這里我用的是Java Web項(xiàng)目心俗,tomcat部署傲武,視頻找個(gè)位置就可以了蓉驹,主要是記住位置