ffmpeg + nginx + nginx-http-flv-module 实现转码推流相关说明 -- centos7

在项目中碰到需要转码推流,并在web页面使用flv.js实现视屏播放功能,现将相关环境搭建等记录在此。

一、ffmpeg 安装

注意:在安装ffmpeg时,除了需要安装相关依赖,要注意别漏掉 x264,不然后续转码推流使用到 libx264 时会报错

1.安装基础工具(如果已有可以忽略)

1. yum install lrzsz -y 
2. yum -y install gcc automake autoconf libtool make gcc gcc-c++ bzip2 xz
3.  yum install unzip -y
4. yum install gcc-c++ -y
5. yum install pcre pcre-devel -y
6. yum install zlib zlib-devel -y 
7.  yum install openssl openssl-devel -y

2.安装nasm和yasm( 相关安装方式可以百度,此处提供安装参考)

 如果没有 wget 命令,则执行 yum install wget
1.安装yasm
	mkdir 一个新的文件夹 yasm,然后 cd 到该目录下按顺序依次执行如下命令:
	wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
	tar -zxvf  yasm-1.3.0.tar.gz
	cd yasm-1.3.0 
	./configure
	make && make install
			
2.安装nasm
	mkdir 一个新的文件夹 nasm,然后 cd 到该目录下按顺序依次执行如下命令:
	wget http://www.nasm.us/pub/nasm/releasebuilds/2.13/nasm-2.13.tar.gz
	tar -zxvf  yasm-1.3.0.tar.gz
	cd yasm-1.3.0 
	./configure
	make && make install

3.安装x264

1.安装git  yum install git (若不使用git方式,可以到 http://www.videolan.org/developers/x264.html 下载安装包)
2.mkdir 一个新的文件夹 x264
3.cd到这个新的文件夹执行 git clone https://code.videolan.org/videolan/x264.git 
4.cd x264 执行 ./configure --enable-shared (可能出现错误提示,根据提示加上对应内容即可,
 如可能需要变成 ./configure --enable-shared  --disable-asm)
5.make && make install

4.编译,安装ffmpeg

1.在官网 http://ffmpeg.org/download.html 下载最新的ffmpeg安装包ffmpeg-4.2.1.tar.bz2(或者其他途径也行,但是先别编译安装)
2.在/usr/local/ 下新建一个目录为 ffmpeg,并将安装包放置这个目录下
3.解压ffmpeg至当前目录后进入根目录
4.执行 ./configure --enable-gpl --enable-libx264  (注意此处加上 x264,可能很多ffmpeg安装教程没有加上)
5.make && make install 
6.检查是否安装成功 ffmpeg -version
7.如果上诉命令报错,则检查下系统配置文件,加上lib库文件的路径(可根据提示先找到需要的文件在哪里,一般是libx264.so文件)
	vi /etc/ld.so.conf
	文件末尾加上 /usr/local/lib (此处仅表示可能的路径,实际路径需要根据安装路径来找)

二、nginx-http-flv-module 安装

1.新建一个nginx文件夹
2.cd到nginx文件夹中,新增一个module文件夹,并将 nginx-http-flv-module-1.2.2.tar.gz 上传至该文件夹
3.解压 tar -zxvf nginx-http-flv-module-1.2.2.tar.gz 并解压后目录名称改为 nginx-http-flv-module方便后续操作

三、nginx 安装

1.cd 到上诉新建的nginx目录中
2.执行 wget http://nginx.org/download/nginx-1.19.1.tar.gz (nginx版本可修改)
3.执行 tar -zxvf nginx-1.19.1.tar.gz 后修改nginx-1.19.1 为 nginx-video
4.执行 cd nginx-video
5.执行 ./configure --prefix=/usr/local/nginx/nginx-video --add-module=…/module/nginx-http-flv-module --with-http_ssl_module //编译安装nginx,并指定nginx 和 flv-module模块路径
6.make && make install
7.修改配置文件

#user  nobody;
worker_processes  5;
events {
    worker_connections  1024;
}
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;
        server_name localhost; #for suffix wildcard matching of virtual host name
        application http_flv {
            live on;
            gop_cache on; #open GOP cache for reducing the wating time for the first picture of video
        }

        application hls {
            live on;
            hls on;
            hls_path /tmp/hls;
            hls_playlist_length 4s;
            hls_fragment 1s;
        }

        application dash {
            live on;
            dash on;
            dash_path /tmp/dash;
        }
    }
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       9080;  //此处对应推流使用端口
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        location /live {  //此处表示推流后访问入口  http://ip:port/live?xxxxxx
            flv_live on; #open flv live streaming (subscribe)
            chunked_transfer_encoding  on; #open 'Transfer-Encoding: chunked' response
            add_header 'Access-Control-Allow-Origin' '*'; #add additional HTTP header
            add_header 'Access-Control-Allow-Credentials' 'true'; #add additional HTTP header
        }

                location /hls {
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }

            root /tmp;
            add_header 'Cache-Control' 'no-cache';
                add_header Access-Control-Allow-Origin *;
        }

        location /dash {
            root /tmp;
            add_header 'Cache-Control' 'no-cache';
        }

        location /stat {
            #推流播放和录制统计数据的配置

            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }

        location /stat.xsl {
            root /usr/local/nginx/nginx-http-flv-module/;  #指定stat.xsl的位置,需要根据实际修改
        }

        #如果需要JSON风格的stat, 不用指定stat.xsl
        #但是需要指定一个新的配置项rtmp_stat_format

        #location /stat {
        #    rtmp_stat all;
        #    rtmp_stat_format json;
        #}

        location /control {
            rtmp_control all; #rtmp控制模块的配置
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
}
}
}

8.启动nginx
注意:此处需要指定配置文件启动,cd 到nginx 的 sbin 目录 执行 ./nginx -c xxx/xx/nginx.conf 具体写配置文件的路径

四、推流脚本

推流命令:
ffmpeg -re -rtsp_transport tcp -i rtsp://admin:[email protected]/ch33/sub/av_stream -vcodec libx264 -an -f flv -s 960x540 rtmp://192.168.xx.xx:9080/http_flv/tower
注意:
1.其中 9080 表示上面nginx配置文件配置的端口
2.http_flv 表示 app
3.tower 表示 stream

flv拉流地址:
http://192.168.xx.xx/live?port=8580&app=http_flv&stream=tower2

五、测试

使用VLC播放器测试,打开网络串流,填写上诉地址即可。

你可能感兴趣的:(java日常记录,linux)