# 前端直播
## 流格式
**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变化