美文网首页
使用SpringBoot+ Nginx-http-flv-mod

使用SpringBoot+ Nginx-http-flv-mod

作者: 程序猿加内特 | 来源:发表于2020-10-29 19:37 被阅读0次

    一、安装Nginx-http-flv-module

    1、下载nginx包

    下载地址:https://nginx.org/download/nginx-1.14.2.tar.gz

    2、下载nginx-http-flv-module 模块包

    下载地址:https://github.com/winshining/nginx-http-flv-module

    3、解压nginx包,将Nginx-http-flv-module包解压之后放到nginx包解压之后的根目录

    4、安装依赖项(如果是mac 用brew命令)

    yum -y install unzip
    yum -y install gcc-c++ 
    yum -y install pcre pcre-devel  
    yum -y install zlib zlib-devel 
    yum -y install openssl openssl-devel
    

    5、将nginx-http-flv-module模板添加到nginx中,生成make文件 并安装nginx

    在nginx压缩包解压之后的根目录下执行如下命令:

    ./configure --prefix=/usr/local/nginx  --add-module=/usr/local/nginx/nginx-http-flv-module
    make && make install
    

    注意:
    1)--prefix=的目录不能和在nginx压缩包解压之后的目录为同一目录,会报错
    2)如果在执行./configure命令时提示找不到openssl,需加参数./configure --prefix=/usr/local/nginx --add-module=/usr/local/nginx/nginx-http-flv-module --with-openssl=<path>
    3)如果执行make命令时出现如下错误:
    /bin/sh: line 2: ./config: No such file or directory
    make[1]: *** [/usr/local/ssl/.openssl/include/openssl/ssl.h] Error 127
    make[1]: Leaving directory `/usr/local/src/nginx-1.9.9'
    make: *** [build] Error 2

    出错是因为Nginx在编译时并不能在/usr/local/ssl/.openssl/ 这个目录找到对应的文件,其实我们打开/usr/local/ssl/这个目录可以发现这个目录下是没有.openssl目录的,因此我们修改Nginx编译时对openssl的路径选择就可以解决这个问题了
    解决方案:
    打开nginx源文件下的/usr/local/nginx/auto/lib/openssl/conf文件:
    找到这么一段代码:

    CORE_INCS="$CORE_INCS $OPENSSL/.openssl/include"
    CORE_DEPS="$CORE_DEPS $OPENSSL/.openssl/include/openssl/ssl.h"
    CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libssl.a"
    CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libcrypto.a"
    CORE_LIBS="$CORE_LIBS $NGX_LIBDL"
    

    修改成以下代码:

    CORE_INCS="$CORE_INCS $OPENSSL/include"
    CORE_DEPS="$CORE_DEPS $OPENSSL/include/openssl/ssl.h"
    CORE_LIBS="$CORE_LIBS $OPENSSL/lib/libssl.a"
    CORE_LIBS="$CORE_LIBS $OPENSSL/lib/libcrypto.a"
    CORE_LIBS="$CORE_LIBS $NGX_LIBDL"
    

    然后再进行Nginx的编译安装即可。

    二 、修改nginx.conf,启动nginx

    rtmp{
        server{
            listen 1935;
            application live{
                live on;
                record off;
            }
            application hls{
                live on;
                hls on;
                hls_path nginx-rtmp-module/hls;
                hls_cleanup off;
            }
        }
    }
    http {
        server {
            listen       9083;
            server_name  localhost;
            location /live {
                flv_live on;
                chunked_transfer_encoding  on; #open 'Transfer-Encoding: chunked' response
                add_header 'Access-Control-Allow-Credentials' 'true'; #add additional HTTP header
                add_header 'Access-Control-Allow-Origin' '*'; #add additional HTTP header
                add_header Access-Control-Allow-Headers X-Requested-With;
                add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
                add_header 'Cache-Control' 'no-cache';
            }
        }
    }
    
    

    三、安装ffmpeg

    由于我用的是mac测试,所以直接执行

    brew install ffmpeg
    

    四、编写Java方法,利用ffmpeg命令推流,将大华摄像机的rtsp流转为rtmp流推给nginx

    public class RtspService {
    
        public Integer pushVideoAsRTSP(String rtspUrl, String nginxRtmpUrl) {
            int flag = -1;
            try {
                String command = "ffmpeg ";
                command += " -re -rtsp_transport tcp -i " + rtspUrl;
                command += " -f flv -vcodec libx264 -vprofile baseline -acodec aac -ar 44100 -strict -2 -ac 1 -f flv -s 800x600 -q 10 " + nginxRtmpUrl;
                System.out.println("ffmpeg推流命令:" + command);
    
                Process process = Runtime.getRuntime().exec(command);
                BufferedReader br = new BufferedReader(new InputStreamReader(process.getErrorStream()));
                String line = "";
                while ((line = br.readLine()) != null) {
                    System.out.println("视频推流信息[" + line + "]");
                }
                flag = process.waitFor();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return flag;
        }
    }
    

    五、编写vue前端代码

    1、安装flvjs

    npm install --save flv.js
    

    2、import引入

    import flvjs from "flv.js"
    

    3、加入video标签

    <div>
         <video id="videoElement1" muted controls width="98%" height="98%"></video>
    </div>
    

    4、加载直播url播放视频

     createVideo1() {
            this.url1 = 'http://' + 'localhost:9083' + '/live?app=live&stream=' + this.nebulaData.id + '_' + this.cameraList[0].channel;
            this.pushCameraVideo(this.cameraList[0]);
            if (flvjs.isSupported()) {
              const videoElement1 = document.getElementById('videoElement1')
              this.flvPlayer1 = flvjs.createPlayer({
                type: 'flv',
                isLive: true,
                url: this.url1
              });
              this.flvPlayer1.attachMediaElement(videoElement1);
              try {
                this.flvPlayer1.load();
                this.flvPlayer1.play();
              } catch (error) {
                console.log(error);
              }
            }
          },
    

    相关文章

      网友评论

          本文标题:使用SpringBoot+ Nginx-http-flv-mod

          本文链接:https://www.haomeiwen.com/subject/mcdlvktx.html