Nginx+FFmpeg实现rtsp流转hls流,在WEB通过H5 video实现视频播放

一、FFmpeg+Nginx转流hls

1、FFmpeg安装

官网:http://ffmpeg.org

windows下安装:

http://ffmpeg.zeranoe.com/builds/ ,下载并解压FFmpeg文件夹,配置环境变量:在“Path”变量原有变量值内容上加上d:\ffmpeg\bin,验证:ffmpeg -version 出现版本号则成功。

Linux下安装:

(1)下载最新源码包并解压

$ wget http://ffmpeg.org/releases/ffmpeg-4.1.tar.gz
$ tar zxvf ffmpeg-4.1.tar.gz

(2)安装ffmpeg

$ cd ffmpeg-4.1/
$ ./configure

报错:
Nginx+FFmpeg实现rtsp流转hls流,在WEB通过H5 video实现视频播放_第1张图片
(3)安装yasm

$ yum install yasm

(4)继续安装ffmpeg

$ ./configure
$ make
$ make install

(5)测试

$ ffmpeg

输入ffmpeg打印了相关信息,表示安装成功
Nginx+FFmpeg实现rtsp流转hls流,在WEB通过H5 video实现视频播放_第2张图片

2、Nginx安装

Windows下安装:

windows下安装nginx

Linux下安装:

Centos7下安装Nginx

3、Nginx配置

修改配置文件:nginx/conf/nginx.conf
在http --> server下增加:

# ffmpeg生成hls流的http访问配置
location /hls {
    #若nginx\conf\mime.types中没有配置如下type,请加上,或直接在mime.types加
	#types{
	#	application/vnd.apple.mpegurl m3u8;
	#	application/x-mpegURL m3u8;
	#	video/mp2t ts;
	#}
	root html;
	#add_header Cache-Control no-cache;
	add_header Access-Control-Allow-Origin *;
}

注: 下面用ffmepg转流需要指定目标路径为上面配置的nginx/html/hls
然后,启动nginx服务

4、FFmpeg命令行转流

ffmpeg -i "rtsp://admin:[email protected]" -c copy -f hls -hls_time 2.0 -hls_list_size 1 -hls_wrap 15 D:/nginx/html/hls/test.m3u8

其中: D:/nginx/html/hls/test.m3u8 是对应nginx.conf配置中的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。参见:https://github.com/powerLeePlus/java-FFmpeg-rtsp2hls

二、HTML通过H5播放

参考 浏览器播放m3u8文件 ,将source --> src改为:http://192.168.5.202:80/hls/test.m3u8,如下:

<source src="http://192.168.5.202/hls/test.m3u8" type="application/x-mpegURL">

浏览器打开index.html。点击开始播放,即可看到效果。
Nginx+FFmpeg实现rtsp流转hls流,在WEB通过H5 video实现视频播放_第3张图片

参考:
Linux-安装FFmpeg
ffmpeg+nginx+video实现rtsp流转hls流,通过H5查看监控视频
ffmpeg java 实时视频流转码(ffmpeg-cli-wrapper
https://github.com/bramp/ffmpeg-cli-wrapper/
java封装FFmpeg命令,支持原生ffmpeg全部命令,实现FFmpeg多进程处理与多线程输出控制(开启、关闭、查询),rtsp/rtmp推流、拉流

你可能感兴趣的:(音视频开发)