ffmpeg实现rtsp流转hls流

Posted 幸福丶如此

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ffmpeg实现rtsp流转hls流相关的知识,希望对你有一定的参考价值。

一、ffmpeg安装

官网地址:http://ffmpeg.org
安装包下载地址:https://ffmpeg.org/releases/

1、下载安装包并解压

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

2、安装依赖

yum install -y nasm

如果不提前安装在 ./configure 会报以下错误

3、编译安装ffmpeg

./configure --prefix=/usr/local/ffmpeg
make
make install

4、添加环境变量

export PATH=/usr/local/ffmpeg/bin:$PATH

二、nginx安装

1、安装依赖

yum install -y pcre-devel

2、下载安装包,并编译安装

wget https://nginx.org/download/nginx-1.20.2.tar.gz
unzip nginx-1.20.2.tar.gz
cd nginx-1.20.2
./configure --user=root --group=root --prefix=/usr/local/nginx --with-file-aio --with-pcre --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_ssl_module --with-stream
make
make install

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

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

三、ffmpeg命令行转流

/usr/local/ffmpeg/bin/ffmpeg -i "rtsp://chgry:chgry888@192.168.16.219:554/h264/sub/av_stream" -c copy -f hls  -hls_time 3.0 -hls_list_size 2 -hls_wrap 1200 /home/wwwroot/ffmpeg/hls/test.m3u8

其中:/home/wwwroot/ffmpeg/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

备注:
①现在最新新版中hls_wrap参数已经没有了,用 hls_flags 参数替代
②ffmpeg用法 https://zhuanlan.zhihu.com/p/268200552

四、html通过H5播放

浏览器播放m3u8文件,这里使用video.js插件,下载地址: http://www.jq22.com/jquery-info404
1、下载demo示例,并配置

wget http://www.jq22.com//jquery/jQueryVideo.js7.10.2.zip
unzip jQueryVideo.js7.10.2.zip
cp -a vide7.10.2/* /home/wwwroot/ffmpeg/

##修改 /home/wwwroot/ffmpeg/index.html 文件
源内容
      <video id="my-video" class="video-js" controls preload="auto" width="960" height="400"
                  poster="m.jpg" data-setup="">
        <source src="http://vjs.zencdn.net/v/oceans.mp4" type="video/mp4">
        <source src="http://vjs.zencdn.net/v/oceans.webm" type="video/webm">
        <source src="http://vjs.zencdn.net/v/oceans.ogv" type="video/ogg">
        <p class="vjs-no-js"> To view this video please enable javascript, and consider upgrading to a web browser that <a href="http://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a> </p>
      </video>

修改后内容
      <video id="my-video" class="video-js" controls preload="auto" width="960" height="400"
                  poster="m.jpg" data-setup="">
        <source src="http://vjs.zencdn.net/v/oceans.mp4" type="video/mp4">
        <!-- <source src="http://vjs.zencdn.net/v/oceans.webm" type="video/webm">
        <source src="http://vjs.zencdn.net/v/oceans.ogv" type="video/ogg">  -->
        <p class="vjs-no-js"> To view this video please enable JavaScript, and consider upgrading to a web browser that <a href="http://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a> </p>
      </video>

2、浏览器打开index.html。点击开始播放,即可看到效果。

以上是关于ffmpeg实现rtsp流转hls流的主要内容,如果未能解决你的问题,请参考以下文章

h5播放rtsp流

我们如何使用 ffmpeg 将实时 rtmp 流转码为实时 hls 流?

使用ffmpeg能否将rtsp的流转成rtmp流发出来?就如:ffmpeg -i rtsp://localhost/live -c copy -f flv rtm

EasyRTSPLive摄像机NVR录像机RTSP协议实时流转RTMP协议直播流推送之搭建EasyRTMPLive拉RTSP流转RTMP测试环境的方法解析

加速FFmpeg转码

JavaCV开发详解之26补充篇1:简单视频截图,视频文件和rtsp/rtmp/flv/hls等直播流截取一张图片