【FFmpeg】ffmpeg+nginx-rtmp实现视频流转发

本文介绍了如何使用ffmpeg将rtsp格式的摄像头视频流转换为HLS,配合nginx-rtmp实现实时分发,以适配Web应用的需求,特别适合内网摄像头接入和Web端视频展示。教程包括ffmpeg命令行操作和nginx配置,以及批量启动脚本的创建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.应用场景

目前的摄像头厂家能提供出来的视频流格式有限,且chrome已经禁止了对flash的支持,导致像硬盘录像机这种只能提供rtsp格式流地址的摄像头无法接入Web应用,所以不得不对视频的流地址进行分发,通过代码对流地址中的数据进行切割,非常影响服务的性能,所以采用ffmepg+nginx-rtmp这种无侵入,占用内存小的方式进行视频的分发。

2.软件包

ffmpeg-n4.4-80-gbf87bdd3f6-win64-gpl-4.4.zip

nginx-rtmp-win32-dev.zip

各位看官自行百度下载…

3.使用ffmpeg进行视频流的转流

1.解压zip目录进入文件的bin目录内,有如下几个文件
在这里插入图片描述
这里要用到的就是ffmpeg.exe
2.常用命令讲解

命令含义
-i设定输入视频的地址
-f设定输出格式
-hls_wrap设定分割的文件数量
-c copy拷贝所有的流

3.举一个例子

① 先在电脑上随便建立一个文件夹,我这里建的名称是test

② 进入ffmpeg的bin目录内,打开cmd命令行

③ 输入下列命令

ffmpeg -i 视频流地址 -hls_wrap 10 -c copy -f hls 本地文件夹地址\test\204.m3u8

当命令行出现以下内容时,表示转流成功
在这里插入图片描述
④打开本地建立的test文件夹,会发现有10个ts文件和一个m3u8文件,这里的ts文件,就是ffmpeg将流地址按照时间切片保存下来的视频文件,按照给定的参数进行循环保存覆盖的。
在这里插入图片描述
到这里,已经实现了对于视频流的转流及保存,这里可以解决的场景有:

  • 内网的摄像头映射到外网环境
  • Web端显示摄像头画面

接下来,只需要将这些切片文件一直提供给前端,就能持续的看到画面了。

4.使用nginx-rtmp推送视频文件,让浏览器显示视频。

解压nginx-rtmp-win32-dev.zip文件,进入conf文件夹,编辑nginx.conf文件

worker_processes  1;

error_log  logs/error.log info;

events {
    worker_connections  1024;
}

rtmp {
    server {
        listen 1935;

        application live {
            live on;
        }
		
        application hls {
            live on;
            hls on;  
            hls_path temp/hls;  
            hls_fragment 8s;  
        }
    }
}

http {
    server {
        listen      8080;
		
        location / {
        	# 这里配置视频文件所在的文件夹,这里就放在nginx-rtmp的html文件夹内,
        	# 所以不需要更改。
            root html; 
        }
		
        location /stat {
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }

        location /stat.xsl {
            root html;
        }
		
        location /hls {  
            #server hls fragments  
            types{  
                application/vnd.apple.mpegurl m3u8;  
                video/mp2t ts;  
            }  
            alias temp/hls;  
            expires -1;  
        }  
    }
}

启动nginx-rtmp:

start nginx

打开浏览器,看到以下内容,表示推送成功
在这里插入图片描述
前端推荐使用Video.js进行视频的展示,这里不做赘述了,使用起来非常简单。

如果有很多视频需要转发,推荐写bat文件进行后台启动

//流地址转发.bat

start cmd /k ffmpeg -i 流地址1 -hls_wrap 10 -c copy -f hls 本地文件夹\1.m3u8
start cmd /k ffmpeg -i 流地址2 -hls_wrap 10 -c copy -f hls 本地文件夹\2.m3u8
start cmd /k ffmpeg -i 流地址3 -hls_wrap 10 -c copy -f hls 本地文件夹\3.m3u8
start cmd /k ffmpeg -i 流地址4 -hls_wrap 10 -c copy -f hls 本地文件夹\4.m3u8
start cmd /k ffmpeg -i 流地址5 -hls_wrap 10 -c copy -f hls 本地文件夹\5.m3u8

这样保存成bat,直接双击就能启动啦^ _ ^
在这里插入图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JeffHan^_^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值