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 

其他

EasyRTMP

亮点是有个安卓的傻瓜软件,可以直接推送安卓手机摄像头音频。但是几千块钱的手机不如买几个板子组件香啊!

Q.E.D.


味无味处求吾乐,材不材间过此生。