nginx rtmp http_flv直播推流

20 篇文章 0 订阅

安装配置nginx

yum install epel-release -y
sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
yum install ffmpeg ffmpeg-devel -y
yum install gcc -y
yum install pcre pcre-devel -y
yum install openssl openssl-devel -y
yum install wget -y
mkdir -p /opt/sort/
cd /opt/soft/
wget -c http://nginx.org/download/nginx-1.25.0.tar.gz
tar -xf nginx-1.25.0.tar.gz 
git clone https://github.com/winshining/nginx-http-flv-module.git
mkdir -p /usr/local/nginx
mv nginx-http-flv-module /usr/local/nginx/

cd /opt/soft/nginx-1.25.0
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_secure_link_module --add-module=/usr/local/nginx/nginx-http-flv-module
make
make install
 
cd /usr/local/nginx/conf/
mkdir -p vhosts

配置
[root@localhost conf]# cat nginx.conf|grep -ivE ‘#|$| #’

worker_processes  1;
error_log  logs/error.log  warn;
 
events {
    worker_connections  1024;
    use epoll;
    multi_accept on;
}

    include flv.conf;
http {
    include       mime.types;
    default_type  application/octet-stream;
    server_names_hash_bucket_size 128;
    client_header_buffer_size 32k;
    large_client_header_buffers 4 32k;
    client_max_body_size 50m;
    log_format nginx_json '{    "time": "$time_local", '
                               '"remote_ip": "$remote_addr", '
                               '"remote_user": "$remote_user", '
                               '"domain":"$host", '
                               '"responsetime":$request_time, '
                               '"request": "$request", '
                               '"response": "$status", '
                               '"bytes": $body_bytes_sent, '
                               '"referrer": "$http_referer", '
                               '"upstreamtime":"$upstream_response_time", '
                               '"upstreamaddr":"$upstream_addr", '
                               '"x_forwarded_for":"$http_x_forwarded_for", '
                               '"agent": "$http_user_agent" }';
     access_log  logs/access.log  nginx_json;
    sendfile        on;
    tcp_nopush     on;
    server_tokens off;
    keepalive_timeout  65;
    gzip  on;
    gzip_min_length  1k;
    gzip_buffers    4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 2;
    gzip_types      text/plain application/x-javascript text/css application/xml;
    gzip_vary on;
    client_header_timeout 10;
    client_body_timeout 10;
    client_body_buffer_size 10K;
    proxy_buffering off;
 
    reset_timedout_connection on;
    send_timeout 10;
 
 
    charset utf-8;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        location /live {
            flv_live on;
            chunked_transfer_encoding on; #支持'Transfer-Encoding: chunked'方式回复
            add_header 'Access-Control-Allow-Origin' '*'; #添加额外的HTTP头
            add_header 'Access-Control-Allow-Credentials' 'true'; #添加额外的HTTP头
        }
 
        location /flv {
             flv_live on;
             chunked_transfer_encoding on;
             add_header 'Access-Control-Allow-Origin' '*';
             add_header 'Access-Control-Allow-Credentials' 'true'; #添加额外的HTTP头
        }
 
 
        location /stat {
                   #推流播放和录制统计数据的配置
                 rtmp_stat all;
                 rtmp_stat_stylesheet stat.xsl;
          }
                   
        location /stat.xsl {
                 root html; #指定 stat.xsl 的位置
         }
                                                            
    }
}

[root@localhost conf]# cat flv.conf |grep -vE ‘^$’

rtmp_auto_push on;
rtmp_auto_push_reconnect 1s;
rtmp_socket_dir /tmp;
rtmp {
    out_queue           4096;
    out_cork            8;
    max_streams         128;
    timeout             15s;
    drop_idle_publisher 15s;
 
    log_interval 5s; #interval used by log module to log in access.log, it is very useful for debug
    log_size     1m; #buffer size used by log module to log in access.log
    server {
        listen 1935;
        application live {

            live on; #开启直播
            record off; 
            #可以把转完码的视频放在这个文件里,这样可以拉这个视频进行播放
            #play /opt/video;
 
            # 允许从任何源push流
            allow publish all;
            # 允许从任何地方来播放流
            allow play all;
            # 20秒内没有push,就断开链接。
            drop_idle_publisher 20s;
            ##打开 GOP 缓存,减少首屏等待时间
            gop_cache on; 
        }
        }
}

启动

[root@localhost conf]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost conf]# 
[root@localhost conf]# /usr/local/nginx/sbin/nginx
[root@localhost conf]# netstat -tnlp|grep nginx
tcp        0      0 0.0.0.0:1935            0.0.0.0:*               LISTEN      36990/nginx: master 
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      36990/nginx: master 


注册服务

[root@localhost conf]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost conf]# 
[root@localhost conf]# /usr/local/nginx/sbin/nginx
[root@localhost conf]# netstat -tnlp|grep nginx
tcp        0      0 0.0.0.0:1935            0.0.0.0:*               LISTEN      36990/nginx: master 
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      36990/nginx: master 




vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx - web server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
ExecQuit=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target

systemctl daemon-reload

测试 - 推流

[root@localhost src]# ffmpeg -re -i 33335e4ffdce4f1f918bbde54b363a73.mp4 -c copy -f flv rtmp://192.168.1.60:1935/live/test            
ffmpeg version 2.8.15 Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-36)
  configuration: --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib64 --mandir=/usr/share/man --arch=x86_64 --optflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic' --extra-ldflags='-Wl,-z,relro ' --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvo-amrwbenc --enable-version3 --enable-bzlib --disable-crystalhd --enable-gnutls --enable-ladspa --enable-libass --enable-libcdio --enable-libdc1394 --enable-libfdk-aac --enable-nonfree --disable-indev=jack --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-openal --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libv4l2 --enable-libx264 --enable-libx265 --enable-libxvid --enable-x11grab --enable-avfilter --enable-avresample --enable-postproc --enable-pthreads --disable-static --enable-shared --enable-gpl --disable-debug --disable-stripping --shlibdir=/usr/lib64 --enable-runtime-cpudetect
  libavutil      54. 31.100 / 54. 31.100
  libavcodec     56. 60.100 / 56. 60.100
  libavformat    56. 40.101 / 56. 40.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 40.101 /  5. 40.101
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  2.101 /  1.  2.101
  libpostproc    53.  3.100 / 53.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '33335e4ffdce4f1f918bbde54b363a73.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 1
    compatible_brands: isommp41mp42
    creation_time   : 2022-12-06 09:44:01
    copyright       : 
    copyright-eng   : 
  Duration: 00:00:16.93, start: 0.047891, bitrate: 494 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 720x1280, 447 kb/s, 25.56 fps, 29.83 tbr, 600 tbn, 1200 tbc (default)
    Metadata:
      creation_time   : 2022-12-06 09:44:01
      handler_name    : Core Media Video
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 41 kb/s (default)
    Metadata:
      creation_time   : 2022-12-06 09:44:01
      handler_name    : Core Media Audio
[flv @ 0x2268de0] Codec for stream 0 does not use global headers but container format requires global headers
[flv @ 0x2268de0] Codec for stream 1 does not use global headers but container format requires global headers
Output #0, flv, to 'rtmp://192.168.1.60:1935/live/test':
  Metadata:
    major_brand     : mp42
    minor_version   : 1
    compatible_brands: isommp41mp42
    copyright-eng   : 
    copyright       : 
    encoder         : Lavf56.40.101
    Stream #0:0(und): Video: h264 ([7][0][0][0] / 0x0007), yuv420p, 720x1280, q=2-31, 447 kb/s, 25.56 fps, 29.83 tbr, 1k tbn, 600 tbc (default)
    Metadata:
      creation_time   : 2022-12-06 09:44:01
      handler_name    : Core Media Video
    Stream #0:1(und): Audio: aac ([10][0][0][0] / 0x000A), 44100 Hz, mono, 41 kb/s (default)
    Metadata:
      creation_time   : 2022-12-06 09:44:01
      handler_name    : Core Media Audio
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
[flv @ 0x2268de0] Failed to update header with correct duration.ate= 496.6kbits/s    
[flv @ 0x2268de0] Failed to update header with correct filesize.
frame=  432 fps= 25 q=-1.0 Lsize=    1031kB time=00:00:16.99 bitrate= 496.7kbits/s    
video:923kB audio:86kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 2.089851%
[root@localhost src]# echo $?
0


-----------------end

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值