前言
本文将探讨如何利用 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便可

2592

被折叠的 条评论
为什么被折叠?



