linux下使用nginx-http-flv-module转发码流,web使用flv.js直播码流。

本文详细介绍了在Linux环境下,如何使用nginx-http-flv-module转发码流,结合flv.js实现网页直播。内容包括Nginx的源码编译安装、docker部署、配置文件修改、解决跨域问题,以及FFmpeg的安装和VLC、flv.js的测试验证。
摘要由CSDN通过智能技术生成

摘要:

1、linux下 rtsp / rtmp 转 rtmp / http-flv 流;
2、html上使用flv.js直播。

一、安装nginx

方式一、下载源码编译安装

1) 新建安装目录

mkdir installnginx
cd installnginx

2) 下载安装需要内容(可以按照需要修改版本到最新版,wget失效可手动下载同名包)

wget http://nginx.org/download/nginx-1.13.4.tar.gz
wget https://www.openssl.org/source/openssl-1.0.2l.tar.gz
wget http://www.zlib.net/zlib-1.2.11.tar.gz
wget https://jaist.dl.sourceforge.net/project/pcre/pcre/8.38/pcre-8.38.tar.gz
git clone https://github.com/winshining/nginx-http-flv-module.git

3) 解压文件

tar -zxvf 每个包.tar.gz

解压后含有:
在这里插入图片描述

4) 安装

cd nginx-1.13.4
./configure --prefix=/home/rooun/nginx --add-module=../nginx-http-flv-module --with-pcre=../pcre-8.38 --with-openssl=../openssl-1.0.2l --with-zlib=../zlib-1.2.11
make && make install

5) 遇到的错误说明

  • 1:nginx-http-flv-module包括nginx-rtmp-module全部功能,不需要下载两个包,链接两个包编不过。

  • 2:错误:“src/os/unix/ngx_user.c:26:7: error: ‘struct crypt_data’ has no member named ‘current_salt’”
    在源码中找到这个文件所在行,开头加上 “//” 把这个‘struct crypt_data’注释掉就解决了。

  • 3:[-Werror=unused-but-set-variable]
    修改 obj/Makefile 删除里面的 -Werror
    在这里插入图片描述

方式二、直接使用docker包(推荐)

docker : nginx-http-flv-module

方式一(Pull仓库镜像):

docker pull mycujoo/nginx-http-flv-module
docker images
docker run -d -p 1965:1965 -p 8181 --name http-flv mycujoo/nginx-http-flv-module:latest
docker exec -it http-flv sh

方式二(离线安装):

备用地址: https://pan.baidu.com/s/1oqOMpRkURl9NmHL5Oudrng 提取码: wqdb

docker load -i nginx-http-flv-module.tar
docker images
docker run -d -p 1965:1965 -p 8181 --name http-flv mycujoo/nginx-http-flv-module:latest
docker exec -it http-flv sh

记录一下:load镜像之后修改/etc/profile的环境变量发现无法生效,可以重新加载镜像直接修改env(加装python)

docker run -it --name http-flv -p 8181:8181 -p 1965:1965 -v /home/looham:/home --env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/python2.7/bin -d mycujoo/nginx-http-flv-module

二、运行nginx

1、nginx:

1)修改配置文件、添加头同时解决视频流跨域问题

daemon off;

error_log /var/log/nginx/error.log warn;

events {
    worker_connections 1024;
}
rtmp{
        server {
                listen 1965;
                application live {
                        live on;
                }
        }
}

http {
    server {
        listen       8181;
        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';
            }
      }
}

2)重启nginx (docker是该路径,自行安装需要更换路径)

/opt/nginx/sbin/nginx -s reload

可以查看端口 netstat -aptn

三、安装FFmpeg

1)安装FFmpeg(使用docker跳过该步骤)

wget https://ffmpeg.org/releases/ffmpeg-4.2.3.tar.bz2
tar jxf ffmpeg-4.2.3.tar.bz2
./configure --enable-shared --prefix=/home/rooun/ffmpeg --disable-yasm
make
make install

–prefix表示程序安装的目录,这里设为/home/looham/ffmpeg。

–enable-shared表示生成动态链接库,可以供以后编程使用,同时生成的可执行程序也依赖这些动态库。

–disable-yasm表示禁用yasm。

如果不禁用yasm 就会报错

ffmpeg -i "rtsp/rtmp源地址" copy -acodec copy -f flv rtmp://localhost:1965/live/mystream

FFmpeg安装问题见文章底部连接

四、显示结果

一、VLC显示rtmp流

rtmp://localhost:1965/live/mystream

在这里插入图片描述

二、flv.js播放

1) 先使用VLC检查http-flv流是否正常

http://localhost:8181/live?port=1965&app=live&stream=mystream

在这里插入图片描述

2) 使用flv.js提供的DEMO测试

http://bilibili.github.io/flv.js/demo/
在这里插入图片描述

其他问题
如果出现内存泄露、储存占用越来越大等问题可以看我另一篇文章

linux下docker使用 nginx或nginx-http-flv-module出现内存泄漏、占用空间越来越大等问题

感谢
RzzZ的博客:记录RTSP通过FFmpeg+nginx发布成rtmp和http-flv

我是小超斌的博客:Linux下安装ffmpeg

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值