基于 Nginx 直播解决方案
▪ 环境
系统:阿里云 CentOS 7
后台:nginx nginx-rtmp-module
推流软件:OBS(将视频流推送到服务器)
播放软件:VLC Media Player(支持 rtmp 协议,http 协议播放)
▪ 软件安装
1. nginx 的安装文章:《CentOS 7 之源码编译安装 Nginx 1.13》
2. nginx-rtmp-module 的安装参考文章:《Nginx 之增加扩展模块 nginx-rtmp-module》
3. OBS 和 VLC Media Player 的安装自行百度
▪ 服务器端视频文件播放(RTMP协议)
场景:视频文件已经存放到服务器端,利用 nginx-rtmp 提供 rtmp 协议的播放方式
1. 配置
编辑 Nginx 的配置文件:
vim /usr/local/nginx/conf/nginx.conf
在配置文件的最底部增加 rtmp 配置:
# RTMP服务
rtmp{server{listen 1935; # 服务端口chunk_size 4096; # 数据传输块的大小# 视频文件播放application vod {play /data/httpd/htdocs/rtmp/video; # 视频文件存放位置}# 直播application live{ live on;}}
}
注1:需要在阿里云安全组开发 1935 端口
注2:新建 /data/httpd/htdocs/rtmp/video 目录用于存放视频文件
配置完成后重启 Nginx 服务。
2. 播放测试
上传一个视频文件 myvod.flv 到 /data/httpd/htdocs/rtmp/video 目录下。
自行去百度下载一个flv文件,并命名为myvod.flv(名字没有固定,可以随意)
打开 VLC media player 软件,在 “媒体->打开网络串流”,在 URL 一览中填入:rtmp://[ip]:1935/vod/myvod.flv,点击播放
播放 mp4 视频时可以拖动,不过好像会先全部下载文件
播放 flv 视频时不可拖动,需要使用其它工具插入关键帧,生成性的flv
▪ 利用 OBS 实现简单的推流直播(RTMP)
场景:利用 OBS 将客户终端的视频或者摄像头视频推流到服务器,同时在另外客户终端用 VLC media player 播放推流过来的视频内容( 采用 rtmp 协议播放)
1. 配置
基于上面 “▪ 服务器端视频文件播放(RTMP协议)” 的配置内容,我们新增一个 Nginx 虚拟主机配置
server {listen 80;server_name [xxx.xxxx.com];# Nginx Rtmp 监控location /stat {rtmp_stat all;rtmp_stat_stylesheet stat.xsl;}location /stat.xsl {# nginx-rtmp-module pathroot /usr/local/nginx-rtmp-module/;}
}
重启 Nginx 服务器,至此,我们得到了以下几个链接地址:
推流地址:rtmp://[xxx.xxxx.com]:1935/live/[xxxxx]
播放地址:rtmp://[xxx.xxxx.com]:1935/live/[xxxxx]
推流监控:http://[xxx.xxxx.com]/stat
推流地址主要用于直播客户或摄像头等终端将本地的视频流推到服务器
播放地址主要用于访客播放视频,由于使用了 rtmp 协议直接播放,一般的暴风影音等还无法播放,可以使用本文章最开始介绍的 VLC Media Player 进行播放
推流监控地址是 nginx-rtmp-module 自带的监控页面,可以监控推流情况等数据
2. 利用 OBS 和推流地址进行推流
“点击推流” 以后,如果软件没有弹出错误即说明了推流正常,当然我们也可以访问:http://[xxx.xxxx.com]/stat 查看推流是否正常
2. 利用 VLC 播放OBS推流过来的视频
点击播放即可。
至此,基于 rtmp 协议的简单直播就完成了。当然推流和观看都是基于专业的软件。这对一般的客户基本上没有什么可操作性和观看性。接下来我们将继续深入。
▪ 实现浏览器播放直播内容
场景:基于上面 “▪ 利用 OBS 实现简单的推流直播(RTMP)” 的配置和使用,我们发现对于观看的客户来说是非常不友好的,因为他们无法使用 VLC 之类专业的软件来播放 rtmp 协议的视频。基于此,我们就像进行改造,实现利用浏览器播放 rtmp 协议
1. 配置回放模式
修改 rtmp 配置,增加 HLS 功能:
# RTMP服务
rtmp{server{listen 1935; # 服务端口chunk_size 4096; # 数据传输块的大小# 视频文件播放application vod {play /data/httpd/htdocs/rtmp/video; # 视频文件存放位置}# 直播application live{ live on;allow play all;hls on; # 这个参数把直播服务器改造成实时回放服务器hls_path /data/httpd/htdocs/rtmp/live; # 切片视频文件(.ts, .m3u8)存放位置hls_fragment 5s; # 每个视频切片的时长hls_playlist_length 10s; # 总共可以回看的事件,这里设置的是1分钟hls_continuous on; # 连续模式hls_cleanup on; # 对多余的切片进行删除hls_nested on; # 嵌套模式(启用后,系统能自动根据串流密钥创建独立的文件夹存放切片视频文件)}}
}
注意:务必设置 /data/httpd/htdocs/rtmp 目录的权限和 Nginx 服务器一样,否则视频文件会无法创建
重启 Nginx 服务器,然后按照上面 “▪ 利用 OBS 实现简单的推流直播(RTMP)” 中介绍的,利用 OBS 推送视频流到服务器。
此时我们再进入服务器,可以看到在 /data/httpd/htdocs/rtmp/live 下面多出一下 myvod 文件目录,里面有了一个 index.m3u8 文件和多个 .ts 文件
myvod 是自由定义的一个串流秘钥,Nginx rmtp 服务会根据配置自动创建目录或者文件
基于 Nginx 直播解决方案相关推荐
- php与hls,转: 基于nginx的hls直播系统
标签: 转自:http://blog.csdn.net/cjsafty/article/details/9108587 看点: 1. 详细解解答了 nginx rtmp配置过程. 前写了一篇基于ngi ...
- 基于EasyNVR二次开发实现自己的摄像机IPC/NVR无插件化直播解决方案
基于EasyNVR二次开发实现自己的摄像机IPC/NVR无插件化直播解决方案 参考文章: (1)基于EasyNVR二次开发实现自己的摄像机IPC/NVR无插件化直播解决方案 (2)https://ww ...
- 直播系统开发:基于Nginx与Nginx-rtmp-module PDF文件下载
本博客做为实践补充. 大纲就不写了,首先,书偏应用,适合新手! 直播系统开发:基于Nginx与Nginx-rtmp-module下载地址 https://download.csdn.n ...
- 如何基于 Nginx 搭建个人直播服务器.md
前言 最近这几年做直播和短视频领域是真的很火,而且直播的领域也很广泛,可以预见,未来的音视频技术将会作为一种基础技术应用到更广泛的场景中.它可以与 AR/VR 结合,让你在远端体验虚拟与现实,如虚拟服 ...
- php直播平台源码基于 Nginx 搭建(rtmp、http)直播服务器
php直播平台源码基于 Nginx 搭建(rtmp.http)直播服务器 直播协议介绍 国内常见公开的直播协议有几个:RTMP.HLS.HDL(HTTP-FLV).RTP,我们来逐一介绍. RTMP ...
- 基于Nginx模块搭建直播服务
转载请标明出处: https://blog.csdn.net/u014214308/article/details/82698542 直播技术原理: 客户端(A:主播,推流)通过摄像头采集到视频数据, ...
- Android音视频学习系列(八) — 基于Nginx搭建(rtmp、http)直播服务器
系列文章 Android音视频学习系列(一) - JNI从入门到精通 Android音视频学习系列(二) - 交叉编译动态库.静态库的入门 Android音视频学习系列(三) - Shell脚本入门 ...
- FFmpeg入门详解之99:基于nginx的rtmp直播服务器(nginx-rtmp-module实现)
基于nginx的rtmp直播服务器(nginx-rtmp-module实现) 首先,在搭建服务之前先了解下目前主流的几个直播协议: 1.RTMP: 实时消息传输协议,Real Time Messagi ...
- 使用Java实现视频直播解决方案
使用Java实现视频直播解决方案 1.概述 本博客使用JavaCV开发的rtsp流转rtmp流并进行推流,并使用nginx实现流媒体直播方案 1.1 网络摄像头协议(一般网络摄像头支持协议有GB/T2 ...
最新文章
- c语言 狸抓兔子,捕捉猫狸的方法-
抓野猫的最好方法
- 马路上的“懦夫游戏”和比特币现金共识升级冲突
- HTML+JS弹出可移动DIV遮罩层
- 生产者-消费者模式的实现
- 十进制数怎样转成十六进制数
- python数据库连接池neo4j_在python中操作neo4j数据库的方法
- android-tv
- Linux 命令行编辑快捷键
- sizeof和strlen的简单使用方法和区别
- CZMDUI,简约而不简单的typecho模板
- PSPNet 使用问题
- redis集群原理及三种模式解析
- linux中怎么粘贴复制文件路径,如何在Linux中复制文件和目录
- Win 10提升隐藏性能
- 就知道你喜欢中文版:Spread .NET 15.2 FOR WPF
- 人活着到底为了什么?
- Windows 的应急事件分类-
- 网站维护需要做些什么?
- 未来五年,做淘宝电商不做好私域流量,将寸步难行!
- 阿里巴巴Canal原理剖析