利用ffmpeg工具基于nginx-rtmp-module模块搭建HLS

来源:互联网 发布:与闺蜜类似的网络称谓 编辑:程序博客网 时间:2024/05/01 16:41

FFMPEG:A complete, cross-platform solution to record, convert and stream audio and video.

HLS:HTTP Live Streaming Apple 动态码率自适应技术,主要用于PC和Apple端的音视频服务.包括一个m3u(8)的索引文件,ts分片文件和key加密串文件.

Nginx:是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。

nginx-rtmp-module:基于nginx的媒体流服务模块

1.ubuntu环境准备,sudo apt-get update && sudo apt-get install libpcre3 libpcre3-dev
2.下载nginx-rtmp-module模块,sudo git clone https://github.com/arut/nginx-rtmp-module.git
3.安装nginx-rtmp-module模块
  sudo ./configure --add-module=/home/liangf/nginx-rtmp-module --with-http_ssl_module

  sudo make

       sudo make install 
4.配置nginx的conf文件(nginx.conf),增加rtmp模块配置及hls Server,所增加的主要内容如下:
#=============================================================================
#nginx-rtmp-module config 该模块配置于http模块同级
rtmp {
  server {
    listen 1935;
    chunk_size 4000;
    application hls {
      live on;
      hls on;
      hls_path /path/to/hls/m3u8;
      hls_fragment 5s;
    }
  }
}
#=============================================================================
#rtsp server 该配置为http模块下的服务,可独立创建实例server,亦可放置于某个server配置中,注意区别
#rtsp server
server { #所为实例配置时需要
  listen 7010;#所为实例配置时需要
  server_name localhost;#所为实例配置时需要
  #hls server path 
  location /hls {
    #Server HLS fragements 
    types {
      application/vnd.apple.mpegurl m3u8;
      video/mp2t ts;
    }
    alias /path/to/hls/m3u8/;
    add_header Cache-Control no-cache;
  }
}

5.通过ffmpeg工具推流,其中流有两种类型的源头:一类是已有文件(如mp4文件等);另一类是设备(摄像头及麦克风采集)
  针对第一种方式:
  ffmpeg -re -i /path/to/hls/test.mp4 -vcodec copy -acodec copy -f flv rtmp://localhost:1935/hls/real,该命令将在rtmp模块所配置的路径下生成real.m3u8文件.注:基于媒体文件,必须用re来标识native frame rate,来约定照播放的帧率.
  针对第二种方式:
  ffmpeg -f video4linux2 -s 320*300 -i  /dev/video0 -vcodec libx264 -pix_fmt yuv420p -f flv rtmp://localhost:1935/hls/real.注:dshow是基于windows上的,编码用x264,图像用420p.
6.客户端访问,两种访问方式:1)基于播放器(vcl)访问:http://localhost:7010/hls/real.m3u8 ;2)基于h5网页访问:
<!DOCTYPE html> 
<html> 
<head> 
<title>HLS Player</title> 
</head> 
<body> 
  <video height="270" width="480" controls> 
    <source src="http://server-ip-address:7010/hls/real.m3u8" type="application/vnd.apple.mpegurl" /> 
    <p class="warning">Your browser does not support HTML5 video.</p> 
  </video> 
</body> 
</html>

1 0