视频直播方案(nginx-rtmp-module ffmpeg) - Andrew's BlogAndrew's Blog

视频直播方案(nginx-rtmp-module ffmpeg)

本文将介绍如何从零搭建流媒体服务器作为直播方案

  • 搭建的服务将支持 RTMPHLS两种协议。
  • 支持传统的 flash与现代 H5浏览器播放。
  • 视频流采用支持 RTSP服务的摄像头。

解决的问题:

  • 一般视频录像板或者网络摄像头仅支持RTSP服务,或自己的私有协议。
  • 因为RTSP是基于TCP的协议一般浏览器是无法支持创建Socket与其他服务相连前端无法播放。
  • 私有协议仅能在IE浏览器下调用OCX插件播放视频,兼容性太差。

主要用到以下几款软件:

  • nginx是一个高性能的HTTP和反向代理服务器。但是原生不支持充当流媒体服务器。
  • nginx-rtmp-module是个比较轻量的项目,可以满足直播的采集,编码和分发工作,该项目丰富的完善了nginx对视频的支持,特别的nginx-rtmp实现了对HLS的支持;
  • FFmpeg提供了录制、转换以及流化音视频的完整解决方案,我们将使用FFmpeg进行推流服务;
  • FFplay可以进行RTMP与RTSP码流视频播放与测试。

环境:
- OS: Ubuntu 16.04 xenial
- Kernel: x86_64 Linux 4.13.0-37-generic


方案简介

解决的方法:

  • 现在前端直播一般采用 RTMPHLS协议
  • 使用 nginxnginx-rtmp-module搭建支持 RTMPHLS的流媒体服务器
  • FFmpegRTSP码流转换成 RTMP码流推送到 RTMP服务器
  • RTMP服务器根据配置将码流转成HLS并提供RTMP码流

框架图

视频直播方案(nginx-rtmp-module ffmpeg) - Andrew's BlogAndrew's Blog_第1张图片

流程如图所示。

##具体操作

Nginx与nginx-rtmp-module安装

      // 创建文件夹,方便整理
mkdir rtmp-server;
cd rtmp-server;
// 下载nginx-rtmp-module模块
git clone https://github.com/arut/nginx-rtmp-module.git 
// 下载nginx 1.8.1源码包
wget http://nginx.org/download/nginx-1.8.1.tar.gz  
// 进入nginx源码包
cd nginx-1.8.1  
// configure报错时请查阅解决
./configure --prefix=/usr/local/nginx  --add-module=../nginx-rtmp-module  --with-http_ssl_module
// 编译 && 安装 需要管理员权限   
make && make install

注意:此为源码安装Nginx。附录有PPA安装模块链接。
Nginx编译时遇到的问题可参阅:

配置 Nginx

在默认配置 /usr/local/nginx/conf/nginx.conf下添加

      # RTMP 推流设置
rtmp {  
    server {  
        listen 1935;  
        chunk_size 4000;  
        application hls {  
            live on;  
            hls on;  
            hls_path /usr/local/nginx/html/hls;  
            hls_fragment 2s;  //配置视频分片时长
            hls_playlist_length 10s;
        }  
    }  
}  
# HLS视频服务设置,如不需要HLS协议可以去掉
http {  
    server {  
        listen  8080;  
        location /hls {  
            # 允许跨域
            add_header 'Access-Control-Allow-Origin' '*';  
            add_header 'Access-Control-Allow-Credentials' 'true';  
            types {  
                application/vnd.apple.mpegurl m3u8;  
                video/mp2t ts;  
            }  
            root html;  
            expires -1;  
        }
    }  
}

注意:hls_path地址要保证可写,保留80服务。
需要录播或更多设置可参阅:

启动nginx

      /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

现在RTMP服务器已经搭建完成。开启Nginx服务请参阅:

修改index.html 支持HLS协议

vim /usr/local/nginx/html/index.html

      
  
    Hls.js demo - basic usage
  
  
      
      

Demo

注意IP替换

FFmpeg 安装

      sudo add-apt-repository ppa:jonathonf/ffmpeg-3
sudo apt-get update
sudo apt-get install ffmpeg

此时已经同时安装上了FFplay

FFmpeg 使用

我们将使用FFmpeg将rtsp码流转发至rtmp服务器上
RTSP码流地址为: rtsp://192.168.100.183:554/user=admin&password=admin&channel=4&stream=0.sdp
RTMP服务器地址为: rtmp://localhost:1935/hls/channel4

      ffmpeg -i "rtsp://192.168.100.183:554/user=admin&password=admin&channel=4&stream=0.sdp" -c copy -f flv "rtmp://localhost:1935/hls/channel4"

项目使用的视频录像板为雄迈具体RTSP协议请参阅:

测试

RTMP测试

使用ffplay进行测试

      ffplay "rtmp://localhost:1935/hls/channel4"

在使用FFmpeg转码流之前最好也用ffplay测试一下
若延时严重可加参数 -fflags nobuffer

HLS测试

打开 http://localhost进行测试

Edge浏览器
视频直播方案(nginx-rtmp-module ffmpeg) - Andrew's BlogAndrew's Blog_第2张图片

参考

  1. nginx-rtmp-module
  2. FFmpeg
  3. nginx-rtmp-module wiki
  4. Installing on Ubuntu using PPAs

你可能感兴趣的:(视频直播方案(nginx-rtmp-module ffmpeg) - Andrew's BlogAndrew's Blog)