Nginx
默认安装
#安装Nginx的编译环境gcc
yum install -y gcc-c++
#Nginx的http模块使用pcre解析正则表达式所以安装perl兼容的正则表达式库
yum install -y pcre pcre-devel
#Nginx使用zlib对http包的内容进行gzip
yum install -y zlib zlib-devel
#Nginx不仅支持http协议,还支持https(即在ssl协议上传输http),如果使用了https,需要安装OpenSSL库
yum install -y openssl openssl-devel
#安装Nginx
yum install -y nginx
下载可编译的nginx
cd /usr/local/
wget http://nginx.org/download/nginx-1.12.2.tar.gz
tar zxvf nginx-1.12.2.tar.gz
rm nginx-1.12.2.tar.gz
mv nginx-1.12.2 nginx
备份文件
cp -r /etc/nginx /etc/nginx_bak
mv /usr/sbin/nginx /usr/sbin/nginx_bak
下载rtmp模块
cd /usr/lib64/nginx/modules/
git clone https://github.com/arut/nginx-rtmp-module.git
编译nginx
cd /usr/local/nginx/
./configure --prefix=/usr/local/nginx --conf-path=/usr/local/nginx/nginx.conf --add-module=/usr/lib64/nginx/modules/nginx-rtmp-module
make
make install
设置环境变量
vim /etc/profile
添加以下内容
export NGINX_HOME=/usr/local/nginx
export PATH=$PATH:$NGINX_HOME/sbin
source /etc/profile
此时插件安装完成
nginx -V
配置RTMP推流
vi /usr/local/nginx/nginx.conf
在events{...}
下面加一个同级配置
rtmp {
server {
chunk_size 4000;
listen 1999;
application youmi {
live on; #开启实时
hls on; #开启hls
hls_path /usr/local/nginx/html/tv_file; #rtmp推流请求路径,文件存放路径
hls_fragment 1s; #每个TS文件包含1秒的视频内容
hls_playlist_length 60s;
hls_continuous on;
hls_cleanup on;
hls_nested on;
}
}
}
HLS拉流
完成以上后即可进行推流,推流码可以变为rtmp://你的ip:1999/youmi/live
后面的live
可以自行设置,推流成功后会在/usr/local/nginx/html/tv_file
路径下生成对应的同名文件夹。其中的index.m3u8
就是对应的hls拉流文件。用任意方式暴露出去即可。在nginx配置http->server下添加一个文件获取服务。重载nginx生效。
location /hls {
# Disable cache
add_header Cache-Control no-cache;
# CORS setup
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Expose-Headers' 'Content-Length';
# allow CORS preflight requests
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
alias /usr/local/nginx/html/tv_file/;
}
随便整个播放器
比如vlc,打开网络地址 可以使用rtmp://你的ip:1999/youmi/live
播放,或者http://你的ip:你的端口/hls/live/index.m3u8
。
或者用这个随便写的项目播放
git clone https://github.com/heycmm/live-stream
cd live-stream
yarn
修改.env
vim .env
# dev环境变量
NODE_ENV = 'development'
# 拉流url
VUE_APP_HLS_URL = 'http://你的ip:你的端口/hls/live/index.m3u8'
yarn serve
几种推流方式
OBS
特点是图形化,可以闭着眼睛用。
其中 rtmp://你的ip:1999/youmi/live
的live需要移入串流秘钥选项中才能生效。
ffmpeg
特点是跨平台,就是命令复杂。
例arm架构的nanoPi
,这里是推流板子的摄像头。
ffmpeg -r 30 -pix_fmt uyvy422 -i /dev/video0 -vcodec h264 -strict experimental -max_delay 100 -f flv -g 5 -b 700000 rtmp://你的ip:1999/youmi/live
其他
亮点是有个安卓的傻瓜软件,可以直接推送安卓手机摄像头音频。但是几千块钱的手机不如买几个板子组件香啊!
Q.E.D.