网站首页 > 技术教程 正文
推流只能用rtmp协议,拉流可以使用rtmp协议和hls协议。rtmp协议是adobe公司开发的开放协议,hls是苹果公司推出的直播协议。我们使用nginx的rtmp插件来搭建推流服务器
基于nginx的rtmp直播服务器
安装加载nginx-rtmp-module模块的nginx
- 首先下载nginx
- 到 https://github.com/arut/nginx-rtmp-module 下载rtmp模块(git clone https://github.com/arut/nginx-rtmp-module.git)
- 分别解压nginx和rtmp模块,使他们在同一目录下。
- 编译nginx./configure --prefix=/usr/local/nginx --add-module=../nginx-rtmp-module.1.1.4 --with-http_ssl_module
- make && make install 安装
- 配置rtmp模块
rtmp {
server {
listen 9999;
?
application myapp {
live on;
}
application live {
live on; #开启实时
hls on; #开启hls
hls_path /usr/local/etc/nginx/html/multimedia/hls; #hls的ts切片存放路径
hls_fragment 2s; #本地切片长度
hls_playlist_length 6s; #HLS播放列表长度
}
}
}
使用rtmp协议并且监听了9999端口,如果我们的推流地址填写的是rtmp://ip:9999/myapp,那么就是纯粹的rmtp协议的流,如果推流地址填写的是rmtp://ip:9999/live,那么推流之后会在/usr/local/etc/nginx/html/multimedia/hls目录下生成很多ts格式的视频切片和一个m3u8格式的文件,我们想要用http协议访问这个m3u8文件就需要再配置http模块。
- 配置http模块
location /live {
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
alias /usr/local/etc/nginx/html/multimedia/hls/;
add_header Cache-Control no-cache;
}
当我们的推流地址填写的是rtmp://ip:9999/live/room1时,使用http://ip:80/live/room1.m3u8就能把rtmp转成hls访问这个直播流了。
- 新建文件夹 mkdir -p /usr/local/etc/nginx/html/multimedia/hls/
- 重启nginx nginx -s reload
以上就完成了直播服务器的搭建。
使用video.js在h5播放rtmp
使用obs推流,推流地址可以填写rtmp://ip:9999/myapp或者rtmp://ip:9999/live,如果用的是rtmp://ip:9999/myapp,在h5端播放的时候会涉及到h5播放rtmp协议的问题,h5安装vide.js之后还要额外安装videojs-flash插件。
video.js版本是7.8.3
安装好之后在相关页面引入:
import videojs from 'video.js';
import "videojs-flash"
import 'video.js/dist/video-js.css'
然后初始化videojs即可:
player = videojs("myVideo", {
poster: baseUrl + '/file/download?file_id='+that.props.videos.foreImg,
controls: true,
preload: 'auto',
// fluid:false,
fill: true,
playsinline: true,
languages: 'en',
suppressNotSupportedError: false,
sources: that.props.videos.url,
techOrder: ['flash', 'html5']
})
在pc端播放rtmp时依赖flash播放器,所以要打开flash,这样就解决了pc端rtmp协议直播流的问题。
但问题是现在流行的是移动端直播,而苹果就没支持过flash播放器,所以目前正常方法解决不了在移动端使用rtmp协议拉流的问题。
移动端使用rtmp协议拉流
因为苹果不支持flash所以使用rtmp拉流肯定是不行的,但是可能客户给我们的就只有rtmp协议,那么我们就可以用到上面的另外一个地址,把rtmp协议转成hls协议。
搭建ffmpeg
rtmp转flv
ffmpeg -re -i rtmp://ip:9999/myapp/room1
-vcodec libx264 -vprofile baseline -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://ip:9999/live/room1
这样当客户给的拉流地址是rtmp://ip:9999/myapp/room1时,可以用ffmpeg 转成http://ip:9999/live/room1.m3u8实现全平台播放了。
但是这样还有个问题,因为客户给地址的话,用户拉流是从客户平台上拉,但是如果使用自己的服务器转了一下的话,那就变成用户从我们自己的服务器拉流了,如果用户比较多的话那带宽的问题就要考虑一下了。
猜你喜欢
- 2024-10-15 音视频录制+RTMP直播推拉流(rtsp 推流 拉流)
- 2024-10-15 ffmpeg内存实时转码(ffmpeg timecode)
- 2024-10-15 项目分享|基于ElfBoard的远程监测系统
- 2024-10-15 「前端」H5直播入门教程(h5视频直播)
- 2024-10-15 在浏览器也能享受H.265播放器的高清画面
- 2024-10-15 学成在线-第13天-讲义-在线学习 HLS
- 2024-10-15 Linux环境下的多媒体处理与流媒体服务
- 2024-10-15 流媒体解码及H.264编码推流(流媒体解码及H.264编码推流失败)
- 2024-10-15 仪表板对接海康威视摄像头实现实时监控方案
- 2024-10-15 SRS之安装与使用(安装ssms教程)
你 发表评论:
欢迎- 最近发表
-
- 阿里P8大佬总结的Nacos入门笔记,从安装到进阶小白也能轻松学会
- Linux环境下,Jmeter压力测试的搭建及报错解决方法
- Java 在Word中合并单元格时删除重复值
- 解压缩软件哪个好用?4款大多数人常用的软件~
- Hadoop高可用集群搭建及API调用(hadoop3高可用)
- lombok注解@Data没有toString和getter、setter问题
- Apache Felix介绍(apache fineract)
- Spring Boot官方推荐的Docker镜像编译方式-分层jar包
- Gradle 使用手册(gradle详细教程)
- 字节二面:为什么SpringBoot的 jar可以直接运行?
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)