摘要:
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出现内存泄漏、占用空间越来越大等问题