概述
本文介绍通过Nginx+FFmpeg实现rtsp流转hls流,在WEB通过H5 video标签实现视频播放功能。此方法可用于网络摄像头RTSP视频流WEB端实时播放。
一、FFmpeg+Nginx转流hls
1、FFmpeg安装
官网:
windows下安装:
/builds/ ,下载并解压FFmpeg文件夹,配置环境变量:在“Path”变量原有变量值内容上加上d:\ffmpeg\bin,验证:ffmpeg -version 出现版本号则成功。
Linux下安装:
(1)下载最新源码包并解压
$ wget /releases/ffmpeg-4.
$ tar zxvf ffmpeg-4.
(2)安装ffmpeg
$ cd ffmpeg-4.1/
$ ./configure
报错:
(3)安装yasm
$ yum install yasm
(4)继续安装ffmpeg
$ ./configure
$ make
$ make install
(5)测试
$ ffmpeg
输入ffmpeg打印了相关信息,表示安装成功
2、Nginx安装
Windows下安装:
windows下安装nginx
Linux下安装:
Centos7下安装Nginx
3、Nginx配置
修改配置文件:nginx/conf/
在http --> server下增加:
# ffmpeg生成hls流的http访问配置
location /hls {
#若nginx\conf\中没有配置如下type,请加上,或直接在加
#types{
# application/ m3u8;
# application/x-mpegURL m3u8;
# video/mp2t ts;
#}
# 相对路径,表示nginx目录下的html目录
root html;
#add_header Cache-Control no-cache;
add_header Access-Control-Allow-Origin *;
}
注: 下面用ffmepg转流需要指定目标路径为上面配置的:nginx/html
/hls。
配置完之后,启动nginx服务。
4、FFmpeg命令行转流
ffmpeg -fflags +genpts -i "rtsp://admin:ajb123456@192.168.10.36" -c copy -f hls -hls_time 2.0 -hls_list_size 1 -hls_wrap 15 D:/nginx/html/hls/test.m3u8
其中:
-
rtsp://admin:ajb123456@192.168.10.36
是你自己的rstp源地址(可以提前用VLC media player
播放器测试源是否可以正常访问,如下图) -
D:/nginx
/html/hls/
test.m3u8 是对应配置中的hls访问路径/hls
ffmpeg 关于hls方面的指令说明:
- -hls_time n: 设置每片的长度,默认值为2。单位为秒
- -hls_list_size n:设置播放列表保存的最多条目,设置为0会保存有所片信息,默认值为5
- -hls_wrap n:设置多少片之后开始覆盖,如果设置为0则不会覆盖,默认值为0.这个选项能够避免在磁盘上存储过多的片,而且能够限制写入磁盘的最多的片的数量
- -hls_start_number n:设置播放列表中sequence number的值为number,默认值为0
用java封装了操作FFmpeg的util。参见:/powerLeePlus/java-FFmpeg-rtsp2hls
二、HTML通过H5播放
参考 浏览器播放m3u8文件 ,将source --> src改为:http://localhost:80/hls/test.m3u8,如下:
<source src="http://localhost:80/hls/test.m3u8" type="application/x-mpegURL">
其中:http://localhost:80
为你自己nginx服务地址。
浏览器打开。点击开始播放,即可看到效果:
以上完整资料
如安装包,配置文件,源码,文档等,已打包,如下:
请关注,维辛 公 中号:如其所斯
,回复:rtsp
,获取下载链接。
补充
很多朋友反馈无法播放,或者播放只有几秒,那可能的问题有:
- rtsp源失效,本身无法播放
- nginx的配置和ffmpeg推流参数没有对应上
- html文件中
<source>
配置没有和nginx实际访问地址对应上 - ffmpeg推流失败
如下图是ffmpeg推流成功的情形:
下面两图是ffmpeg推流失败的情形:
针对以上问题,请朋友们仔细按照本文操作流程与注意点核对。是一定可以正常推流与播放的。
找到我
欢迎关注,共同成长。vx搜索「如其所斯」
参考:
Linux-安装FFmpeg
ffmpeg+nginx+video实现rtsp流转hls流,通过H5查看监控视频
ffmpeg java 实时视频流转码(ffmpeg-cli-wrapper
/bramp/ffmpeg-cli-wrapper/
java封装FFmpeg命令,支持原生ffmpeg全部命令,实现FFmpeg多进程处理与多线程输出控制(开启、关闭、查询),rtsp/rtmp推流、拉流
FFMPEG转码视频源帧数据中没有PTS问题的解决