ffmpeg生成hls直播流

ffmpeg生成hls流

1.nginx搭建Http服务器

配置nginx-win-rtmp.conf文件;这个配置可以进行推rtmp流,也可以推hls的流。配置中追加

rtmp {
        application hls {
            live on;
            hls on;
            hls_path hls;
            hls_fragment 5s;
        }
    }
}
http {
    server {
        listen       8888;
        server_name  localhost;
        location /hls {
            # Serve HLS fragments
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            alias hls;
            expires -1;
            add_header Access-Control-Allow-Origin *;
        }
    }
}

启动nginx服务

cd E:\nginx-1.7.11.3-Gryphon
nginx.exe -c conf\nginx-win-rtmp.conf 

测试启动是否成功:

http://localhost:8888/

ffmpeg生成hls直播流

2.安装ffmpeg库

解压安装包,添加电脑环境变量,进入环境变量PATH,进行编辑,加入如:D:/ffmpeg/bin

ffmpeg -version

ffmpeg生成hls直播流

3.ffmpeg拉rtsp流实现文件的分片,并生成m3u8

ffmpeg -i "rtsp://admin:[email protected]:554/cam/realmonitor?channel=1&subtype=0" -vcodec libx264 -vprofile baseline -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://localhost:1935/hls/movie

ffmpeg生成hls直播流

文件分片结果,会根据配置在nginx\hls目录下生成分片数据
ffmpeg生成hls直播流

其中,M3U8文件格式如下:

ffmpeg生成hls直播流

  1. EXTM3U:M3U8文件标签头
  2. EXT-X-VERSION:M3U8文件版本号
  3. EXT-X-MEDIA-SEQUENCE:直播切片序列,动态更新,指导播放序列开始位置
  4. EXT-X-TARGETDURATION:最大分片的duration,浮点数四舍五入后的整数值
  5. EXTINF:每个分片的duration(秒)代表每个分片视频时间,","分割每个切片,*.ts为视频分片

4.vlc播放m3u8

使用vlc打开网络串流

http://localhost:8888/hls/movie.m3u8

ffmpeg生成hls直播流

正常情况下,视频播放

5.使用chrome浏览器播放

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>video.js</title>
    <link href="https://unpkg.com/[email protected]/dist/video-js.min.css" rel="stylesheet">
    <script src="https://unpkg.com/[email protected]/dist/video.min.js"></script>
    <script src="https://unpkg.com/videojs-flash/dist/videojs-flash.js"></script>
    <script src="https://unpkg.com/videojs-contrib-hls/dist/videojs-contrib-hls.js"></script>
  </head>
  <body>
    <video id="my-player" class="video-js" controls>
        <source src="http://localhost:8888/hls/movie.m3u8" type="application/x-mpegURL">
        <p class="vjs-no-js">
          not support
        </p>
    </video>
    <script type="text/javascript">
      var player = videojs('my-player',{
        width:400,
        heigh:200
      });
    </script>
  </body>
</html>

ffmpeg生成hls直播流