Jetson Nano使用ffmpeg+nginx将本地视频流推流到公网服务器

目录

一、背景

1. 环境

2. 流程介绍

二、具体流程

1. 下载安装ffmpeg(这里可以参考现有的博客

2. 公网配置nginx

3. 推流

4. 拉流


一、背景

1. 环境

        jetsonNano(ubuntu系统,通过4G模块联网) 开发板做推流端(由于板子被焊起来了,这里用windows11主机代替);腾讯云公网服务器(用来部署nginx做转发);任意连网设备通过公网URL获取视频流。

        因为现在浏览器不支持flash,所以这里用到了nginx-http-flv-module,来将rtsp转成http协议的flv;

        推流端(jetsonNano/win11主机),腾讯云服务器,客户端(任意设备),海康威视网络摄像头。

2. 流程介绍

  1. 通过ffmpeg将同一网段下的海康威视视频流推流到公网服务器;

  2. 公网服务器部署nginx服务器;

  3. 客户端通过公网nginx获取视频流;

  4. 前端代码获取视频流进行开发。

二、具体流程

1. 下载安装ffmpeg(这里可以参考现有的博客

  1. windows
  2. ubuntu

2. 公网配置nginx

  1. 下载nginx并解压 
    wget http://nginx.org/download/nginx-1.22.1.tar.gz
    tar -zxvf nginx-1.22.1.tar.gz
  2. 下载nginx依赖(pcre, zlib, ssl)
    sudo su  # 进入管理员模式
    apt-get install libpcre3 libpcre3-dev
    apt-get install zlib1g-dev
    apt-get install openssl
  3. 下载nginx-http-flv-module

    git clone https://github.com/winshining/nginx-http-flv-module.git
  4. 编译

    ./configure --prefix=/usr/local/nginx --add-module=/home/user/nginx-http-flv-module --with-http_ssl_module
    make
    make install
  5. 修改nginx.conf(如果上一步是跟着我走的话,那就在/usr/local/nginx/conf/nginx.conf)

    vim /usr/local/nginx/conf/nginx.conf
    # 按i后可以开始编辑文件
    # 按Esc退出编辑
    # 然后,在Esc环境下,按:wq保存并退出

    以下是要修改的地方

    # 最外层
    rtmp {
        server {
            listen 1935;
            chunk_size 4000;
            application live{
                live on;
                gop_cache on;
            }
        }
    }
    # http里面的server里面
    # 可能有冗余或者不需要的地方,我懒得测试了
    location /hls {
                    root html;
                    types {
                            application/vnd.apple.mpegurl m3u8;
                            video/mp2t ts;
                    }
                    #add_header Cache-Control no-cache;
                    add_header Access-Control-Allow-Origin *;
            }
            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';
                    types {
                            application/vnd.apple.mpegurl m3u8;
                            video/mp2t ts;
                }
            }

    记得开放1935和80端口,如果80冲突就修改,记得开放修改后的端口

  6. 启动niginx服务

    # 这里的相关操作都要管理员权限
    ./usr/local/nginx/sbin/nginx  # 启动nginx
    ./usr/local/nginx/sbin/nginx -s reload  # 重启nginx,修改配置文件后可以重启下
    ./usr/local/nginx/sbin/nginx -s stop  # 关闭nginx

3. 推流

        本地视频流推到公网服务器

ffmpeg -i rtsp://admin:123jicheng@192.168.1.64/Streaming/Channels/1 -an -c:v copy -f flv -rtsp_transport udp rtmp://192.168.1.22/live/test  # 192.168.1.22换成公网ip

 

其中

​     -i rtsp://admin:123jicheng@192.168.1.64/Streaming/Channels/1

​    admin  是摄像头用户名,第一次使用摄像头时需要注册的;

​    123jicheng 是密码,同上;

​        后面的是海康威视摄像头具体的视频流通道;

​    -an 是屏蔽音频(发现屏蔽音频了才能在前端用

​    -c:v copy  是复制视频流(因为音频流会导致前端代码无法显示视频)

​    -f flv 是视频流格式,

​    -rtsp_transport udp  传输协议(因为要多设备访问所以用udp而不是tcp)

4. 拉流

        前端就可以直接拿下面地址用了,前端代码我这里就不展示了,网上随便搜一个demo就可以试

http://192.168.1.22/live?port=1935&app=live&stream=test  # 192.168.1.22换成公网ip

 延迟问题5,6秒吧差不多

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用Jetson Nano B01加CSI摄像头进行FFMPEG推流的步骤如下: 首先,确认Jetson Nano B01已安装有合适的操作系统,如NVIDIA提供的JetPack。并且摄像头已正确连接到CSI接口。 其次,确保FFMPEG已正确安装在Jetson Nano上。可以通过命令"sudo apt-get install ffmpeg"进行安装。 接下来,进行推流的配置: 1. 打开终端,输入以下命令来查看系统识别的摄像头设备: "ls -l /dev/video*" 如果CSI摄像头正确连接且识别,应该会显示类似 "/dev/video0" 的设备。 2. 使用以下命令进行FFMPEG推流配置: "ffmpeg -f v4l2 -input_format h264 -video_size 1280x720 -framerate 30 -i /dev/video0 -c:v copy -f flv rtmp://<服务器地址>/<应用程序名称>/<流名称>" 其中,"<服务器地址>"是推流服务器的地址,"<应用程序名称>"是服务器上的应用程序名称,"<流名称>"是推流的名称。 例如,推流到RTMP服务器的命令可以是: "ffmpeg -f v4l2 -input_format h264 -video_size 1280x720 -framerate 30 -i /dev/video0 -c:v copy -f flv rtmp://192.168.0.100/live/stream1" 其中,RTMP服务器的地址是192.168.0.100,应用程序名称是live,推流名称是stream1。 3. 运行这个配置命令后,FFMPEG将开始推流,将摄像头捕捉到的内容发送到指定的服务器。 在推流期间,可以通过其他设备使用使用FFMPEG内核的软件(如VLC)来接收和播放推送的流。 请注意,上述命令的视频大小(video_size)、帧率(framerate)以及其他的参数可以根据实际需求进行调整。同样,推流的目标服务器地址和应用程序及流名称也需要根据实际情况修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值