CentOS7.4 配置Nginx流媒体服务(下)

修改Nginx的配置文件

进入            cd /usr/local/nginx/conf 路径
修改配置文件     vi nginx.conf
在底部加入这段配置代码

rtmp {                #RTMP服务
    server {
        listen 1935;        # 服务端口
        chunk_size 4096;    # 数据传输块的大小

        application live {    # 直播
            live on;
            record off;    # 禁止录制流
        }        
    }
}  
:wq 保存并退出

测试nginx配置:
    cd .. & ./sbin/nginx -t
    提示syntax is ok 和 test is successful

重启服务:
    ./sbin/nginx -s reload
添加阿里云安全组规则, 允许本地访问 1935端口
配置完成后, 可在pc端通过 telnet serverIP 1935 测试

直播推流/拉流 测试

PC端使用 OBS Studio推流,
    填入:URL:rtmp://server_ip:1935/live 流名称:mylive
打开 Wowza网页测试地址(https://www.wowza.com/testplayers)进行拉流,
    填入Server:server_ip:1935 Stream:mylive Application:live 
也可以使用VLC播放器拉流,但加载延迟较大,这种测试方法不建议使用:
    打开网络串流,在URL栏输入: rtmp://server_ip:1935/live/mylive 即可,VLC端测试会比较慢,需要耐心等待其缓冲数十秒至数分钟.

android端拉流/播放测试

ijkplayer的使用

配置点播服务

下载并解压 nginx_mod_h264_streaming-2.2.7.tar.gz
    wget http://h264.code-shop.com/download/nginx_mod_h264_streaming-2.2.7.tar.gz & tar -xzvf nginx_mod_h264_streaming-2.2.7

切换至nginx-1.12.2文件夹, 按上篇提到的方法引入mp4_module和flv_module添加并配置:
--with-http_mp4_module
--with-http_flv_module # mp4和flv点播模块
--add-module=../nginx-mod_h264_streaming-2.2.7  # 引入h264模块

编辑objs下的makefile配置文件(以解决h264_streaming模块make报 set but not use的错误, 注意这一步必须在 ./configure后面操作):
    vim objs/Makefile (修改objs/Makefile文件, 去掉其中的"-Werror")

重新 make (因为非首次安装无需make install)
此处有坑, 参考解决 [关于ngx_http_streaming_module.c:158行报错解决方法](https://blog.csdn.net/a454213722/article/details/53446495)
相关nginx.conf配置
在 server {
    listen 80
    ...
    ...
} 内部添加

# 对请求路径进行正则匹配, 映射至相应路径
location ~ \.flv$ {
    root /usr/local/nginx/html/media/;
    flv;
}

location ~ \.mp4$ {
    root /usr/local/nginx/html/media/;
    mp4;
}

location /hls {
    alias hls;
    types {
    application /vnd.apple.mpegurl m3u8;
    video /mp2t ts;
    }
    add_header Cache-Control no-caches;
    expires -1;
}

在 rtmp {
    server {
        ...
    }
} 内部添加: 

application hls {        # 与hls拉流端关联的直播流
    live on;
    hls on;            # 打开点播,会生成临时文件
    hls_path /tmp/hls;        # 临时文件保存路径
    hls_fragment 8s;        # 缓存片段时长
}

application vod_media {       # 视频文件点播
    play /usr/local/nginx/html/media; # 视频文件存放位置; vod被调用时会直接到该地址寻找媒体文件
}


重启 nginx服务后,
在浏览器打开网址 http://server_ip/name.mp4 此访问方式由 location 正则表达式{ } 匹配映射至点播文件路径
在Wowza网页测试地址, 选择rtmp流, 选择VOD, 填入:Server:server_ip:1935 Application:vod_media Stream:filename.mp4
点击start按钮,即可播放.

安装编译ffmpeg过程 附:官方编译指南解决

  • 其余参考:在CentOS上编译安装FFmpeg
  • 手动编译的话,请以官方FFmpeg编译指南为准, 以下是对自己的编译过程的记录

    有两种安装方式:
    1.yum管理器 + 第三方yum-repos安装,优点: 操作简便
    2.手动编译,优点: 个性化配置, 这里我选择的手动编译

    后面编译ffmpeg的过程需要依赖 yasm,nasm
    yum install -y yasm

    wget https://www.nasm.us/pub/nasm/releasebuilds/2.13.03/nasm-2.13.03.tar.xz
    xz -d nasm-2.13.03.tar && tar -zvf nasm-2.13.03.tar && cd nasm-2.13.03
    ./configure –prefix=/usr/local
    make && make install

    mkdir ffmpeg_sources // 用于存放ffmpeg相关软件包

    准备ffmpeg源码包
    cd ffmpeg_sources && git clone https://github.com/FFmpeg/FFmpeg.git
    mkdir ffmpeg-latest
    mv ffmpeg-master ffmpeg-latest && rm ffmpeg-master -rf
    cd ffmpeg-latest

    配置ffmpeg预备模块

    • 安装 x264(选择了github版本stable分支) *H.264 编码器

      git clone https://github.com/mirror/x264/tree/stable.git
      git checkout -b stable
      cd x264
      ./configure –prefix=usr/local/ffmpeg” –bindir=/usr/local/bin –enable-static
      make & make install(注1:此处可能有坑)

      make distclean

    • 安装 x265 * H.265/HEVC编码器
      x265的编译需要使用cmake:
      yum install -y cmake

    wget http://ftp.videolan.org/pub/videolan/x265/x265_2.7.tar.gz
    tar -xzvf x265_2.7.tar.gz
    cd x265_2.7/build/linux
    cmake -G “Unix Makefiles” \

    -DCMAKE_INSTALL_PREFIX=/usr/local/ffmpeg \
    -DENABLE_SHARED:bool=off ../../source
    

    make && make install

    • 安装 libfdk_aac * AAC音频编码器,Fraunhofer FDK AAC Library

    配置autoconf
    cd /usr/local
    wget http://ftp.gnu.org/gnu/autoconf/autoconf-latest.tar.gz \
    && tar -xzvf autoconf-latest.tar.gz
    cd autoconf-2.69
    ./configure –prifix=/usr/local
    make && make install && make distclean

    配置automake
    cd /usr/local
    wget http://ftp.gnu.org/gnu/automake/automake-1.16.tar.xz
    xz -d automake-1.16.tar.xz
    tar -xvf automake-1.16.tar
    cd automake-1.16
    ./configure –prefix=/usr/local/bin
    make && make install

    配置libtool
    wget http://mirror.keystealth.org/gnu/libtool/libtool-2.4.tar.gz
    tar -xvzf libtool-2.4.2.tar.gz
    cd libtool-2.4.2
    ./configure –prefix=/usr/local/bin
    make && sudo make install

    cd ~/ffmpeg_sources
    git clone –depth 1 git://git.code.sf.net/p/opencore-amr/fdk-aac
    cd fdk-aac
    autoreconf -fiv
    ./configure –prefix=/usr/local/ffmpeg –enable-shared
    make & make install
    make distclean

    • 安装 libmp3lame * Mp3音频编码器
      wget http://sourceforge.mirrorservice.org/l/la/lame/lame/3.100/lame-3.100.tar.gz
      tar zxf lame-3.100.tar.gz && cd lame-3.100
      ./configure –prefix=/usr/local/ffmpeg –bindir=/usr/local/bin –enable-shared –enable-nasm
      make && make install
      make distclean

    • 安装 libopus * Opus 音频编解码器
      尝试过v1.0.3版, make失败, 原因是缺失test-driver
      最后选用最新版本 v1.2.1
      wget https://archive.mozilla.org/pub/opus/opus-1.2.1.tar.gz
      tar -xzvf opus-1.2.1.tar.gz && cd opus-1.2.1
      autoreconf -fiv
      libtoolize -f
      ./configure –prefix=”/usr/local/ffmpeg” –disable-shared
      make && make install
      make distclean

    • 安装 libogg库 * libogg是Ogg流库,libtheora、libvorbis需要libogg库,speex需要它。
      curl -O http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz
      tar xzvf libogg-1.3.2.tar.gz
      cd libogg-1.3.2
      ./configure –prefix=”/usr/local/ffmpeg” –disable-shared
      make && make install
      make distclean

    • 安装 libvorbis库 * Vorbis音频编码器,需要libogg库
      wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.4.tar.gz
      tar xzvf libvorbis-1.3.4.tar.gz
      cd libvorbis-1.3.4

      LDFLAGS=”-L/usr/local/ffmeg/lib” CPPFLAGS=”-I/usr/local/ffmpeg/include” ./configure –prefix=”/usr/local/ffmpeg” –with-ogg=”/usr/local/ffmpeg” –disable-shared
      make && make install
      make distclean

    • 安装 libvpx * VP8/VP9视频编码器
      git clone –depth 1 http://git.chromium.org/webm/libvpx.git
      cd libvpx
      ./configure –prefix=”/usr/local/ffmpeg” –enable-examples
      make && make install
      make clean

    编译ffmpeg, 链接相关模块
    PKG_CONFIG_PATH=”/usr/local/ffmpeg/lib/pkgconfig” \
    ./configure –prefix=/usr/local/ffmpeg \
    –extra-cflags=”-I/usr/local/ffmpeg/include” \
    –extra-ldflags=”-L/usr/local/ffmpeg/lib”\
    –extra-libs=-lpthread \
    –extra-libs=-lm \
    –bindir=”/usr/local/bin” \
    –pkg-config-flags=”–static” \
    –enable-gpl \
    –enable-nonfree \
    –enable-libfdk_aac \
    –enable-libfreetype \
    –enable-libmp3lame \
    –enable-libopus \
    –enable-libvorbis \
    –enable-libvpx \
    –enable-libx264 \
    –enable-libx265

    编译ffmpeg
    ./configure –prefix=/usr/local/ffmpeg
    make & make install

    在最后PATH添加环境变量:
    PATH=$PATH:/usr/local/ffmpeg/bin
    export PATH
    保存并退出

    source /etc/profile 刷新激活设置
    ffmpeg -version 查看ffmpeg版本
    至此ffmpeg环境配置完成.

编译过程报错问题解决:
  • x265编译报错 ERROR: x265 not found using pkg-config 需要配置pkg-config
    最终解决办法: ffmepg编译时需要添加以下三项
    –pkg-config-flags=”–static” \ # 指定pc文件路径
    –extra-libs=-lpthread \ # x265模块依赖pthread库
    –extra-libs=-lm \ # lamemp3模块依赖该数学函数库

ffmpeg流媒体处理

ffmpeg命令行生成 m3u8/ts流

配置ngnix实现HLS m3u8点播

HLS点播 FFmpeg udp视频流

使用ffmpeg转码m3u8并播放

ffmpeg转换mp4到flv的命令

flv支持关键帧, 实现进度条拖动播放

nginx向移动端推流

转m3u8流  -->  iOS 端拉流
转rtsp流  -->  android 端拉流

android端播放

ijkplayer

- 待续 -