# 前端直播
## 流格式
**HLS、RTMP、HTTP-FLV**
[https://blog.csdn.net/liuyuqin1991/article/details/79310080](https://blog.csdn.net/liuyuqin1991/article/details/79310080)
[https://savokiss.com/tech/web-live-tech-with-vue.html](https://savokiss.com/tech/web-live-tech-with-vue.html)
> 1、HLS --> 移動端 .m3u8
>
> > url: "[http://vdn-hls.xuetangx.com/xuetanglive/"+data.live\_stream\_id+"/index.m3u8](http://vdn-hls.xuetangx.com/xuetanglive/%22+data.live_stream_id+%22/index.m3u8)"
> > type: "application/x-mpegURL"
> 2、RTMP
>
> > 依賴flash技術
> > url: "rtmp://vdn-rtmp.xuetangx.com/xuetanglive/"+data.live\_stream\_id
> > type: "rtmp/flv"
~~~
//初始化視頻
let player = videojs('container',{
//像data-setup那樣設置的參數
},function onPlayerReady(){
//視頻播放器初始化完畢,就會調用這個回調函數
this.src({
src: "rtmp流地址",
type:'rtmp/flv'
});
});
~~~
> 3、HTTP-FLV --> .flv
>
> > 依賴flash技術.
> > 也是當前主流直播網站所用的格式
> > url: "[http://vdn-flv.xuetangx.com/xuetanglive/"+data.live\_stream\_id+".flv](http://vdn-flv.xuetangx.com/xuetanglive/%22+data.live_stream_id+%22.flv)"
> > type: "video/x-flv"
> 4、切換不同種類視頻源
~~~
player.ready(function() {
var myPlayer = this;
myPlayer.reset();
if (scope.type == 'hls') {
console.log('hls');
myPlayer.src({ type: "application/x-mpegURL", src: scope.url });
} else {
myPlayer.src({ type: "rtmp/flv", src: scope.url });
console.log('rtmp');
}
myPlayer.load(scope.url);
myPlayer.play();
});
我們借助 player.src() 方法就是實現,根據不同的類型設置 src 的type 就可以。但是每次我們更改地址的時候,記得調用一下 player.reset() 方法會重置播放器 。要不會有問題,切換不了。
~~~
~~~
搭建rtmp直播流服務之4:videojs和ckPlayer開源播放器二次開發(播放rtmp、hls直播流及普通視頻)
https://blog.csdn.net/eguid_1/article/details/51898912
~~~
### videojs常用api
~~~
/*
* 根據videoJS官方文檔編寫的播放器常用操作
*/
~~~
~~~
//獲取當前類型
function getCurrentType(idnex) {
return idnex.currentType();
}
//獲取當前播放地址
function getCurrentAddr(index) {
return index.currentSrc();
}
//獲取當前播放時間
function getCurrentTime(index) {
return index.currentTime();
}
//獲取當前網絡狀態
function networkState(index) {
return index.networkState();
}
//修改播放地址
function setsrc(index, url, type) {
index.src({
type : type,
src : url
});
}
//重載播放器
function reset(index) {
index.reset();
index.load();
}
//播放
function play(index) {
index.play();
}
//暫停
function pause(index) {
index.pause();
}
~~~
- 前言
- 指南使用手冊
- 為什么會有這個項目
- 面試技巧
- 面試官到底想看什么樣的簡歷?
- 面試回答問題的技巧
- 如何通過HR面
- 推薦
- 書籍/課程推薦
- 前端基礎
- HTML基礎
- CSS基礎
- JavaScript基礎
- 瀏覽器與新技術
- DOM
- 前端基礎筆試
- HTTP筆試部分
- JavaScript筆試部分
- 前端原理詳解
- JavaScript的『預解釋』與『變量提升』
- Event Loop詳解
- 實現不可變數據
- JavaScript內存管理
- 實現深克隆
- 如何實現一個Event
- JavaScript的運行機制
- 計算機基礎
- HTTP協議
- TCP面試題
- 進程與線程
- 數據結構與算法
- 算法面試題
- 字符串類面試題
- 前端框架
- 關于前端框架的面試須知
- Vue面試題
- React面試題
- 框架原理詳解
- 虛擬DOM原理
- Proxy比defineproperty優劣對比?
- setState到底是異步的還是同步的?
- 前端路由的實現
- redux原理全解
- React Fiber 架構解析
- React組件復用指南
- React-hooks 抽象組件
- 框架實戰技巧
- 如何搭建一個組件庫的開發環境
- 組件設計原則
- 實現輪播圖組件
- 性能優化
- 前端性能優化-加載篇
- 前端性能優化-執行篇
- 工程化
- webpack面試題
- 前端工程化
- Vite
- 安全
- 前端安全面試題
- npm
- 工程化原理
- 如何寫一個babel
- Webpack HMR 原理解析
- webpack插件編寫
- webpack 插件化設計
- Webpack 模塊機制
- webpack loader實現
- 如何開發Babel插件
- git
- 比較
- 查看遠程倉庫地址
- git flow
- 比較分支的不同并保存壓縮文件
- Tag
- 回退
- 前端項目經驗
- 確定用戶是否在當前頁面
- 前端下載文件
- 只能在微信中訪問
- 打開新頁面-被瀏覽器攔截
- textarea高度隨內容變化 vue版
- 去掉ios原始播放大按鈕
- nginx在MAC上的安裝、啟動、重啟和關閉
- 解析latex格式的數學公式
- 正則-格式化a鏈接
- 封裝的JQ插件庫
- 打包問題總結
- NPM UI插件
- 帶你入門前端工程
- webWorker+indexedDB性能優化
- 多個相鄰元素切換效果出現邊框重疊問題的解決方法
- 監聽前端storage變化