从零开始打造自己的直播服务器-Nginx安装
2017年11月23日 · 225 字 · 2 分钟
直播行业火了很长一段时间了,抛开那些复杂的实现,本系列将从零开始实现一个直播服务器。
功能
- RTMP拉流(基于HLS)
- RTMP推流(基于ffmpeg)
- RTMP推流(基于HTTP)
安装Nginx
本文使用docker的ubuntu镜像作为种子机,非常干净!
文章最后会放出我写的Dockerfile,不想折腾的朋友可以直接拿过去build一个自己的镜像
以下操作在物理机ubuntu也可以进行。
- 更新软件仓库
apt-get update
- 安装必要软件
apt-get install git gcc make wget libpcre3 libpcre3-dev openssl libssl-dev -y -q
- 下载并解压nginx源码
cd /usr/local/src wget http://nginx.org/download/nginx-1.12.2.tar.gz tar xf nginx-1.12.2.tar.gz
- 下载nginx-rtmp-module源码
git clone https://github.com/arut/nginx-rtmp-module.git
- 开始编译安装(其他参数不是必须的,故本文略去,只添加以下参数对于一个RTMP服务器已足够)
cd /usr/local/src/nginx-1.12.2 ./configure --add-module=../nginx-rtmp-module --with-http_flv_module --with-http_mp4_module make make install
- 修改配置文件 /usr/local/nginx/nginx.conf
nginx在docker运行需要关闭daemon选项. rtmp->server->application为具体的直播应用,hls是我的直播应用名称,可以根据实际情况修改。worker_processes auto; daemon off; error_log logs/error.log; pid logs/nginx.pid; events { multi_accept on; worker_connections 65535; use epoll; } http { include mime.types; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 30; gzip on; server { listen 80; server_name localhost; location /stat { rtmp_stat all; rtmp_stat_stylesheet stat.xsl; } location /stat.xsl { root /usr/local/src/nginx-rtmp-module; } location /control { rtmp_control all; } location /hls { types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } root html; expires -1; } location ~\.flv { flv; } location ~\.mp4 { mp4; } } } rtmp { server { listen 1935; chunk_size 4096; application hls { allow publish 127.0.0.1; live on; hls on; hls_path /usr/local/nginx/html/hls; hls_fragment 5s; } } }
- 启动服务器
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
安装ffmpeg
apt-get install ffmpeg
推流测试
推流地址
rtmp://localhost:1935/hls/demo
hls为上面配置的application名称,demo是直播名称,客户端使用http://localhost/hls/demo.m3u8进行播放
视频推流
ffmpeg -re -i a.mp4 -vcodec copy -f flv rtmp://localhost:1935/hls/demo
web中播放
<video src="http://localhost/hls/demo.m3u8" controls></video>
音频推流
ffmpeg -re -i a.mp3 -acodec aac -f flv rtmp://localhost:1935/hls/demo
web中播放
<audio src="http://localhost/hls/demo.m3u8" controls></audio>
推流与播放地址说明
- 假设nginx配置http端口为80,http目录为hls,rtmp端口为1935,application名称为hls,需要播放的直播名称为demo
- 推流地址rtmp://localhost:1935/hls/demo
- 播放地址http://localhost/hls/demo.m3u8
重要说明
如果没有直播推流,nginx是不会产生m3u8文件的,这点需要注意!