摄像头rtsp流转http-flv实现低延迟实时在线播放

简介

因使用大华摄像头,需要在系统中实时播放视频,因此通过自己搭建一个流媒体服务器,将rtsp流转为flv格式,前端再使用flv.js实现在线播放功能。

一、下载nginx

1、更新相关依赖
yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
2、下载nginx
cd /usr/local
mkdir nginx
cd nginx
wget http://nginx.org/download/nginx-1.19.3.tar.gz
tar -zxvf nginx-1.19.3.tar.gz

二、下载nginx-http-flv-module

下载地址
直接下载最新的代码上传到服务器/usr/local/

三、配置环境支持http2.0

注:配置http2.0是为了解决同源策略的限制,同一源下只能同时创建6个请求,播放6路视频。若无此需求,可跳过第一步,直接使用http即可。

1、更新openssl版本
openssl version

在这里插入图片描述
openssl版本在1.0.2以上则不需要更新,否则需要升级版本,如下是升级为1.1.1n

cd /usr/local/
mkdir openssl
cd openssl
wget https://www.openssl.org/source/openssl-1.1.1n.tar.gz
tar -zxvf openssl-1.1.1n.tar.gz
cd openssl-1.1.1n 
./config
make && make install 

备份原有的openssl

mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl /usr/include/openssl.bak 

添加新的软链接

ln -s /usr/local/bin/openssl /usr/bin/openssl
ln -s /usr/local/include/openssl/ /usr/include/openssl
echo "/usr/local/lib64" >> /etc/ld.so.conf  
ldconfig -v
2、编译nginx
cd  /usr/local/nginx-1.19.3
./configure --with-http_ssl_module --with-openssl=/usr/local/openssl/openssl-1.1.1n --with-http_v2_module --add-module=/usr/local/nginx-http-flv-module

其中--with-openssl 是openssl的路径,--add-module 是nginx-http-flv-module的路径

make -j4
make install
3、生成https测试证书
cd /usr/local/nginx
mkdir  certs
cd /certs
openssl genrsa -des3 -out server.key 2048
openssl rsa -in server.key -out server.key
openssl req -new -key server.key -out server.csr
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
4、配置nginx.conf

完整配置文件如下

worker_processes  1;
error_log logs/error.log error;


#如果此模块被编译为动态模块并且要使用与 RTMP 相关的功能时,
#必须指定下面的配置项并且它必须位于 events 配置项之前,
#否则 NGINX 启动时不会加载此模块或者加载失败

#load_module modules/ngx_http_flv_live_module.so;
events {
   
    worker_connections  4096;
}

http {
   
    include       mime.types;
    default_type  application/octet-stream;

    keepalive_timeout  65;

    server {
   
        listen       18071;
        location  /live {
   
        	flv_live on; 
	        chunked_transfer_encoding on; 

        	add_header 'Access-Control-Allow-Origin' '*';
	        add_header 'Access-Control-Allow-Credentials' 'true';
			add_header 'Access-Control-Allow-Headers' 'X-Requested-With';
			add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS';
			add_header 'Cache-Control' 'no-cache';
        }

	location /hls {
   
            types {
   
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            root /tmp;  # hls方式m3u8访问的文件路径
        }
        #stat  json格式
      	location /stat {
   
	  		rtmp_stat all;
            rtmp_stat_format json;
      	}

  #      location /stat {
   
  #         rtmp_stat all;
  #          rtmp_stat_stylesheet stat.xsl;
  #      }

 #       location /stat.xsl {
   
 #           root /usr/local/nginx-http-flv-module; #指定 stat.xsl 的位置
 #       }
    }
    server {
   
	        listen 18181 ssl http2;
			server_name  www.gongl.com;
	 		ssl_certificate      "/usr/local/nginx/certs/server.crt";  # server公钥证书的路径
			ssl_certificate_key  "/usr/local/nginx/certs/server.key";  # server私钥的路径
			ssl_session_cache    shared:SSL:1m;	
			ssl_session_timeout  5m;
			ssl_ciphers  HIGH:!aNULL:!MD5;
			ssl_prefer_server_ciphers  on;
			proxy_set_header Host $http_host;
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header REMOTE-HOST $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			location /{
   
				proxy_pass http://192.168.3.122:18071/;
			} 
	 }
}

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; #log 模块在 access.log 中记录日志的间隔时间,对调试非常有用
    log_size     1m; #log 模块用来记录日志的缓冲区大小

    server {
   
        listen 18072;
        server_name  localhost;
        application transition{
   
            live on;
            gop_cache off; 
            #播放之前调用(可通过nginx直接配置鉴权或定义到项目中去鉴权)
             on_play           http://192.168.3.13:18061/flv/on_play; 
             #断开之后调用
           #  on_play_done      http://192.168.3.13:18061/flv/on_play_done;
     }
}

指定配置文件启动

../sbin/nginx -s stop
../sbin/nginx -c /usr/local/nginx/conf/nginx.conf

注:若存在连接的http,通过reload重载nginx无法断开之前的http连接。当修改了配置文件,使用stop停止nginx之后再重新启动

四、安装ffmpeg

cd /usr/local
mkdir ffmpeg
要在非root用户下安装FastDFS,您需要遵循以下步骤: 1. 创建一个非root用户,例如fastdfs。 2. 安装必要的软件包和依赖项,例如gcc、make、libevent-dev、libjpeg-dev、libpng-dev、libxml2-dev、libcurl4-openssl-dev等。可以使用以下命令安装: ``` sudo apt-get update sudo apt-get install gcc make libevent-dev libjpeg-dev libpng-dev libxml2-dev libcurl4-openssl-dev ``` 3. 下载FastDFS源代码并解压缩,可以从官方网站下载最新版本:https://github.com/happyfish100/fastdfs/releases ``` wget https://github.com/happyfish100/fastdfs/archive/V6.06.tar.gz tar -zxvf V6.06.tar.gz ``` 4. 切换到fastdfs用户并进入源代码目录,执行以下命令编译和安装FastDFS: ``` cd fastdfs-6.06/ ./make.sh sudo ./make.sh install ``` 5. 配置FastDFS。复制配置文件模板并编辑: ``` sudo cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf sudo cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf sudo cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf sudo vi /etc/fdfs/tracker.conf sudo vi /etc/fdfs/storage.conf sudo vi /etc/fdfs/client.conf ``` 6. 启动Tracker和Storage服务: ``` sudo /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf sudo /usr/bin/fdfs_storaged /etc/fdfs/storage.conf ``` 7. 验证FastDFS服务是否正常工作。使用fdfs_test工具上传和下载文件进行测试: ``` sudo apt-get install git git clone https://github.com/happyfish100/fastdfs-client-java.git cd fastdfs-client-java/ sudo mvn package sudo java -jar target/fastdfs-client-java-1.27-SNAPSHOT.jar ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值