从内网到公网:使用RTSP和RTMP实现摄像头视频流实时转发

前言

        本文将探讨如何利用 FFmpeg 和 Nginx RTMP 模块,实现从局域网摄像头到公网的实时视频流转发

分两部分

公网

一.安装服务

# 安装 Nginx RTMP 模块
sudo apt-get update
sudo apt-get install nginx libnginx-mod-rtmp

二.配置模块

# 配置 Nginx RTMP 模块
sudo nano /etc/nginx/nginx.conf

添加配置

rtmp {
    server {
        listen 1935;  # RTMP 服务监听端口
        chunk_size 4096;

        application live {
            live on;
            record off;
        }
    }
}

 三.重启 Nginx

sudo systemctl restart nginx

 内网

配置

sudo apt-get install ffmpeg

        安装ffmpeg 

其中推流地址的用户名 密码 摄像头IP 以及 公网IP ,请对照实际情况修改

ffmpeg -i rtsp://username:password@CAMERA_IP:554/stream -f flv rtmp://PUBLIC_IP/live/stream

修改玩以后,就可以拉流看看效果了

rtmp://PUBLIC_IP/live/stream

 情况一

遇到报错

[tcp @ 0x564fbc21bb40] Connection to tcp://x.x.x.x:1935 failed: Connection refused
[rtmp @ 0x564fbc21ba80] Cannot open connection tcp://x.x.x.x:1935
rtmp://x.x.x.x/live/camera: Connection refused

对于这种情况,请检测公网服务器的配置是否存在问题,具体问题具体分析,如果不是 Nginx 的问题,还请自行百度

情况二

遇到报错

[flv @ 0x564f057ba800] FLV does not support sample rate 8000, choose from (44100, 22050, 11025)
[flv @ 0x564f057ba800] Audio codec mp3 not compatible with flv
Could not write header for output file #0 (incorrect codec parameters ?): Function not implemented
Error initializing output stream 0:0 --
[libmp3lame @ 0x564f057b9880] 4 frames left in the queue on closing
Conversion failed!

类似的问题表明 FLV 格式不支持 8000 Hz 的采样率,以及指定的音频编解码器不兼容

这里针对上面的报错给出解决方案:

ffmpeg -i "rtsp://xx:xx@xx@x.x.x.x:554/h264/ch1/main/av_stream" \
       -c:v copy -c:a aac -ar 44100 -f flv rtmp://x.x.x.x/live/camera

解释:

  • -c:v copy:表示视频流不重新编码,直接复制视频。
  • -c:a aac:将音频流编码为 AAC 格式。
  • -ar 44100:将音频采样率设置为 44100 Hz,这是 FLV 兼容的采样率。
  • -f flv:指定输出格式为 FLV。
  • -an:禁用音频流。

如果不需要或者没有音频数据,-c:a aac -ar 44100替换为-an便可 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值