- 背景
最近做一个直播平台项目,调研了一些开源的或者商用的流媒体服务器,包括Live555,Red5,Wowza,ffmpeg,EasyDarwin,FMS等;经过对比考量,因为本次需求相对比较简单,流协议基于RTMP,因此最终决定选型Nginx+ffmpeg。
- 选型
Nginx + nginx-rtmp-module + ffmpeg
Nginx本身是一个非常出色的HTTP服务器,ffmpeg也是目前最好用的音视频解决方案,而这两个框架通过一个nginx的模块nginx-rtmp-module组合在一起既可以搭建一个相对完善的流媒体服务器。
- 支持的协议
RTMP(Adobe公司的协议,主要用在Flash/AIR平台)
HLS(http live stream 苹果公司的协议)
- 环境
系统环境:Centos 6.5
- 步骤
- 官网下载Nginx最新稳定版本 传送门[http://nginx.org/]
- 下载nginx-rtmp-module 传送门[https://github.com/arut/nginx-rtmp-module]
- 编译安装Nginx
# 创建下载目录 mkdir /home/download # 进入目录 cd /home/download # 下载Nginx wget http://nginx.org/download/nginx-1.12.1.tar.gz # 下载nginx-rtmp-module wget https://github.com/arut/nginx-rtmp-module/archive/master.zip # 解压 tar -xvf nginx-1.12.1.tar.gz unzip master.zip # 编译Nginx cd nginx-1.12.1 ./configure --prefix=/usr/local/nginx --add-module=../nginx-rtmp-module-master --with-http_ssl_module make && make install # [!敲黑板]在这里需要重点说一下,有的人也许编码安装不成功,原因是环境依赖问题,可根据具体的错误提示,安装依赖的lib包等,具体就不在这里说了,因为我们重点是流媒体服务器,出错的同学可以参考其他Nginx编译安装的博客。
- 安装完之后,下一步就是配置nginx.conf文件,下面我贴出自己的配置文件以及重要的配置说明,供大家参考:
1 #user nobody; 2 worker_processes 8; 3 4 #error_log logs/error.log; 5 #error_log logs/error.log notice; 6 #error_log logs/error.log info; 7 8 #pid logs/nginx.pid; 9 10 events { 11 use epoll; 12 worker_connections 65535; 13 } 14 15 http { 16 include mime.types; 17 default_type application/octet-stream; 18 19 #log_format main ‘$remote_addr - $remote_user [$time_local] "$request" ‘ 20 # ‘$status $body_bytes_sent "$http_referer" ‘ 21 # ‘"$http_user_agent" "$http_x_forwarded_for"‘; 22 23 #access_log logs/access.log main; 24 25 add_header Accept-Ranges bytes; 26 tcp_nopush on; 27 tcp_nodelay on; 28 sendfile on; 29 #tcp_nopush on; 30 31 #keepalive_timeout 0; 32 keepalive_timeout 65; 33 34 #gzip on; 35 36 server { 37 listen 80; 38 server_name localhost; 39 40 #charset koi8-r; 41 42 #access_log logs/host.access.log main; 43 44 location / { 45 root html; 46 index index.html index.htm; 47 } 48 49 ############ yyqailaopo start ############## 50 51 #配置nginx拉流服务 52 location /hls { 53 types { 54 application/vnd.apple.mpegurl m3u8; 55 video/mp2t ts; 56 } 57 root /yyq/hls/; 58 add_header Cache-Control no-cache; 59 } 60 61 ############ yyqailaopo end ############## 62 63 error_page 500 502 503 504 /50x.html; 64 location = /50x.html { 65 root html; 66 } 67 68 } 69 70 ############ yyqailaopo start ############## 71 #在http节点下面(也就是文件的尾部)加上rtmp配置: 72 rtmp { 73 server { 74 listen 1935; # rtmp端口 75 chunk_size 4000; 76 #开启RTMP直播服务 77 application live { 78 live on; #打开直播 79 record off; #关闭录制 80 } 81 82 #开启hls直播服务 83 application hls { 84 live on; #打开直播 85 hls on; 86 hls_path /yyq/hls; #切片路径 87 hls_fragment 5s; # 切片时间 88 } 89 #开启RTMP点播服务 90 application vod { 91 play /Users/yyq; #点播资源 92 } 93 application vod_http { 94 play http://localhost:80/vod; 95 } 96 } 97 } 98 ############ yyqailaopo end ##############
- 重启nginx,服务器配置就完成了??
/usr/local/nginx/sbin/nginx -t /usr/local/nginx/sbin/nginx -s reload
- 现在我们可以使用ffmpeg推送rtmp流到nginx来测试一下
# 推送多个流 ffmpeg -re -i /tmp/ffmpeg_test1.mp4 -vcodec copy -acodec copy -f flv "rtmp://127.0.0.1:1935/live/test1" ffmpeg -re -i /tmp/ffmpeg_test2.mp4 -vcodec copy -acodec copy -f flv "rtmp://127.0.0.1:1935/live/test2"
- 使用vlc播放 rtmp://localhost:1935/live/test1 rtmp://localhost:1935/live/test2
- 现在我们再来使用ffmpeg推送hls流到nginx来测试一下
ffmpeg -re -i /tmp/ffmpeg_test.mp4 -vcodec copy -acodec copy -f flv "rtmp://127.0.0.1:1935/hls/hlstest"
- 使用vlc播放 http://localhost/hls/hlstest.m3u8
??,打完收工了!希望会对大家有些帮助,如果有问题可以留言,尽量解答~~
时间: 2024-10-24 11:14:55