Nginx初窥:视频、直播
前篇文章说了Sftp下的文件上传,访问时比如图片、json文件等是可以直接显示的。可压缩包或视频文件等,访问时只能下载,如何让视频在线播放?
环境准备:
可用的服务器(CentOS 7系统)、Nginx、Nginx-Rtmp模块 、Ffmpeg、Jwplayer(可以从连接另存文件,不用登录)
工具:Xshell 6、Xftp 5
1. 在线视频播放
其实要播放比较简单,主要问题是网速、负载等,这些是生产环境需要考虑的。
1.1. 安装Nginx
服务器安装Nginx,包括远程工具,参照我之前的文章即可。
###
1.2. 安装Nginx-Rtmp模块
在Github上下载nginx-rtmp-module-1.2.1.tar.gz
使用Xftp将下载的压缩包传到服务器的/usr/local文件夹。放哪都行,自己能找到就行。
使用tar命令解压该文件,得到nginx-rtmp-module-1.2.1文件夹,我的文件夹位置为:
1 | /usr/local/nginx-rtmp-module-1.2.1 |
此时,你需要找到之前Nginx解压后的文件夹,就是那个带版本号的文件夹。我的Nginx源码目录是:
1 | /usr/local/nginx-1.17.1 |
- 进入Nginx源码文件夹
1 | cd /usr/local/nginx-1.17.1 |
- 安装Nginx-Rtmp模块
此时,一定要进入nginx源码文件,不然找不到configure。还要注意找到之前rtmp模块解压后的文件夹位置,此时我nginx-1.17.1和nginx-rtmp-module-1.2.1都是放在/usr/local下的,所以用../就能找到。
1 | ./configure --add-module=../nginx-rtmp-module-1.2.1 --with-http_ssl_module |
模块安装完成。
参考:官方文档
1.3. 视频播放配置
- 打开/usr/local/nginx/conf目录下的nginx.conf配置文件,nginx是Nginx的安装目录
1 | vi /usr/local/nginx/conf/nginx.conf |
键盘按i编辑,方向键移动光标,编辑完按 ” :wq “ 保存退出
编辑内容:
光标移动到文件最底部大括号外 (http{}代码块外),增加rtmp代码块:
1 | rtmp{ |
此时虽然可以播放视频了,但http还找不到资源,所以还需要定义访问路径。
把光标移到http代码块里,按如下内容修改和增加代码,其实只加了个location,配置文件里#后内容是注释,忽略或删除。
1 | http { |
保存并退出,然后重启Nginx服务。
1 | systemctl restart nginx.service |
1.4. 测试视频播放
在服务器的/data/video目录下放入一个mll.mp4视频文件,目录/data/video要建个,根据你的配置的目录来。

播放成功即可,我服务器速度贼慢,后面换个服务器试试效果。
这时,就可以把视频嵌入到html中播放了,比如:
1 | <iframe src="http://78.141.206.203/video/ct.mp4" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" autoplay="" width="100%" height="450px"> </iframe> |
效果:
服务器我换成伦敦的了,现在速度好些了,有的时间段比较卡。
2. 直播
这里搭建一个简单的直播体系,实际要复杂的多。
直播应该有推流端、服务器处理端、和接收端。
2.1. 服务器端配置
之前配过视频播放了,这里也用Nginx-Rtmp模块,配置一下nginx就行了。
- 还是打开/usr/local/nginx/conf目录下的nginx.conf配置文件
1 | vi /usr/local/nginx/conf/nginx.conf |
键盘按i编辑,方向键移动光标,编辑完按 ” :wq “ 保存退出
编辑内容:
rtmp代码块
1 |
|
http代码块
1 |
|
重启Nginx服务。
1 | systemctl restart nginx.service |
顺便让防火墙开放你配置的端口,比如这里我配置的2019端口:
1 | #添加2019端口配置防火墙 |
浏览器访问http://你的服务器Ip/stat,如http://108.160.134.51/stat,若出现以下页面,则服务器配置成功。

2.2. 推流端
推流可以用FFmpeg,功能强大,使用命令行进行操作,可以在服务器上使用,就是参数比较多,对新手不友好。
还可以用OBS,有windows版本,是大家常用的直播工具了。
OBS
- 先说下Obs,这个软件比较常见。在设置里面,左侧菜单选输出,输出模式选高级,点录像,选择输出到URL

URL的格式是:rtmp://你的服务器ip:端口号/服务器配置的应用名/自定义个名字,容器格式最好选flv,因为体积会小点,其他看自己情况选。
FFmpeg
- FFmpeg,这个可以装在windows本机上,也可以装在服务器上,使用方式是命令行,下面说一下服务器上怎么装。windows同理,无所谓,可以用其他软件。
- 【FFmpeg使用示例:】ffmpeg -i /data/video/am.mkv -vcodec h264 -s 1920*1080 /data/video/am.mp4
- 我的服务器系统:CentOs 7,安装流程:
- 先安装环境支持,EPEL Release
1 | sudo yum install -y epel-release rpm |
- 安装Nux-Dextop
1 | sudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro |
- 正式安装FFmpeg
1 | sudo yum install -y ffmpeg |
- 使用
这里使用服务器上的视频/data/video/mll.mp4,模拟推流。
推流到rtmp://localhost:2019/live/test,本地2019端口下的live应用,当然也可以推到远处的服务器,后面的test是自定义的名字。
1 | ffmpeg -re -i /data/video/mll.mp4 -c copy -f flv rtmp://localhost:2019/live/test |
可以根据网速自定义码率:
-b:v 3000k 意为视频码率3000k
-b:a 320k 指音频
1 | ffmpeg -re -i /data/video/mllo.mp4 -c copy -b:v 3000k -b:a 320k -f flv rtmp://localhost:2019/live/test |
更多使用参考:ffmpeg基础使用
推流后,我们需要一个接收端才能看到推流的效果。
2.3. 接收端(拉流端)
这里我用的JWPlayer
- 解压JWPlayer,新建个html,与jwPlayer文件夹同级目录。
Html内容如下:
1 |
|
其中live_url应与推流端的推流地址一致,此html可传到服务器上Nginx管理的目录下,直接访问。也可在本地运行。
运行效果如图:

一个简单的直播系统便建好了。
参考文章: