您的位置:首页 > 其它

HLS系统快速部署指南

2015-12-04 17:07 363 查看
作者:阿宝

版本:1.0.0

日期:2015-06-10

介绍

在开源环境下,实现HLS直播系统,较为常见的有两种方式,nginx+nginx-rtmp-module 或 SRS,这里采用前者,同时配合ffmpeg来实现。

本文是在 武爱敏博客 的基础上补充完善而成,在此一并表示感谢。goto

环境

系统:CentOS 6.6 x64

软件:

yasm-1.3.0

x264-201506

lame-3.99.5

libogg-1.3.2

libvorbis-1.3.5

libvpx-201506

faad2-2.7

faac-1.28

xvidcore-1.3.2

ffmpeg-201506

nginx-1.8.0

nginx-rtmp-module-1.1.7

openssl-0.9.8zf

简易编译安装

为了简化安装的流程,此处提供一个一键安装包 goto,访问密码 00a8

包含:

所有需要安装的软件包(faac的bug已经修复)

一键安装脚本(shell)

测试用配置文件(nginx.conf)
<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">su -
unzip HLSEasyInstall<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.zip</span>
cd HLSEasyInstall
chmod *<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.sh</span>
./install<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.sh</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul>

编译安装

安装依赖包

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">yum <span class="hljs-attribute" style="box-sizing: border-box;">-y</span> install gcc gcc<span class="hljs-attribute" style="box-sizing: border-box;">-c</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">++</span> glibc glibc<span class="hljs-attribute" style="box-sizing: border-box;">-devel</span> make nasm pkgconfig lib<span class="hljs-attribute" style="box-sizing: border-box;">-devel</span> openssl<span class="hljs-attribute" style="box-sizing: border-box;">-devel</span> expat<span class="hljs-attribute" style="box-sizing: border-box;">-devel</span> gettext<span class="hljs-attribute" style="box-sizing: border-box;">-devel</span> libtool mhash<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>x86_64 perl<span class="hljs-attribute" style="box-sizing: border-box;">-Digest</span><span class="hljs-attribute" style="box-sizing: border-box;">-SHA1</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>x86_64 git</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>


注:lib-devel 可能找不到,并不影响安装,忽略。

安装FFmpeg及其依赖包

添加 /usr/local/lib 到系统库目录
<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">cat /etc/<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">ld</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.so</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.conf</span>
echo <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"/usr/local/lib"</span> >> /etc/<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">ld</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.so</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.conf</span>
cat /etc/<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">ld</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.so</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.conf</span>
ldconfig</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li></ul>


Yasm (Linux 下 NASM 汇编器,支持 x86 和 AMD64)
<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">wget -c http://www<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.tortall</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.net</span>/projects/yasm/releases/yasm-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1.3</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.0</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.tar</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.gz</span> -O yasm-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1.3</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.0</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.tar</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.gz</span>
tar zxvf yasm-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1.3</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.0</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.tar</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.gz</span>
cd yasm-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1.3</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.0</span>
./configure
make
make install</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul>


x264 (H264 编码器)
<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">git clone git://git<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.videolan</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.org</span>/x264
<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#tar xcvf x264.tar.gz x264</span>
tar zxvf x264<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.tar</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.gz</span>
cd x264
./configure --enable-shared
make
make install</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li></ul>


LAME (MP3 编码器)
<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">wget -c http://downloads<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.sourceforge</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.net</span>/project/lame/lame/<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3.99</span>/lame-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3.99</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.5</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.tar</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.gz</span>
tar zxvf lame-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3.99</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.5</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.tar</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.gz</span>
cd lame-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3.99</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.5</span>
./configure --enable-nasm
make
make install</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul>


liboog (Ogg 解码器)
<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">wget -c http://downloads<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.xiph</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.org</span>/releases/ogg/libogg-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1.3</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.2</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.tar</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.gz</span>
tar zxvf libogg-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1.3</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.2</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.tar</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.gz</span>
cd libogg-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1.3</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.2</span>
./configure
make
make install</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul>


libvorbis (音频编码解码库)
<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">wget -c http://downloads<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.xiph</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.org</span>/releases/vorbis/libvorbis-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1.3</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.5</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.tar</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.gz</span>
tar zxvf libvorbis-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1.3</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.5</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.tar</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.gz</span>
cd libvorbis-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1.3</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.5</span>
./configure
make
make install</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul>


libvpx (VP8/VP9 编码解码器)
<code class="hljs vala has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">git clone http:<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//git.chromium.org/webm/libvpx.git</span>
<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#tar xcvf libvpx.tar.gz libvpx</span>
<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#tar zxvf libvpx.tar.gz</span>
cd libvpx
./configure  --enable-shared
make
make install</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li></ul>


FAAD2 (AAC 解码器)
<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">wget -c http://downloads<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.sourceforge</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.net</span>/faac/faad2-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2.7</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.tar</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.gz</span>
tar zxvf faad2-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2.7</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.tar</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.gz</span>
cd faad2-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2.7</span>
./configure
make
make install</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul>


FAAC (AAC 编码器)
<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">wget -c http://downloads<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.sourceforge</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.net</span>/faac/faac-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1.28</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.tar</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.gz</span>
tar zxvf faac-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1.28</span>-bugfix<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.tar</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.gz</span>
cd faac-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1.28</span>
./configure
make
make install</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul>
<code class="hljs vala has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">【错误处理】
编译FAAC-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1.28</span>时遇到错误:
mpeg4ip.h:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">126</span>: error: <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> declaration ‘<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">char</span>* strcasestr(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">char</span>*, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">char</span>*)’

解决方法:
从<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">123</span>行开始修改此文件 *./common/mp4v2/mpeg4ip.h*,到<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">129</span>行结束。
修改前:
<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#ifdef __cplusplus</span>
extern <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"C"</span> {
<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#endif</span>
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">char</span> *strcasestr(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">char</span> *haystack, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">char</span> *needle);
<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#ifdef __cplusplus</span>
}
<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#endif</span>

修改后:
<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#ifdef __cplusplus</span>
extern <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"C++"</span> {
<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#endif</span>
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">char</span> *strcasestr(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">char</span> *haystack, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">char</span> *needle);
<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#ifdef __cplusplus</span>
}
<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#endif</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li></ul>


Xvid (MPEG-4 视频编码解码器)
<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">wget -c http://downloads<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.xvid</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.org</span>/downloads/xvidcore-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1.3</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.2</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.tar</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.gz</span>
tar zxvf xvidcore-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1.3</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.2</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.tar</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.gz</span>
cd xvidcore/build/generic
./configure
make
make install</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul>


FFmpeg (多功能音视频库)
<code class="hljs brainfuck has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">git</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">clone</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">git://source</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">.</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">ffmpeg</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">.</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">org/ffmpeg</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">cd</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">ffmpeg</span>
<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">.</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/configure</span>  <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">prefix=/opt/ffmpeg/</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">enable</span><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">version3</span>  <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">enable</span><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">libvpx</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">enable</span><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">libfaac</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">enable</span><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">libmp3lame</span>  <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">enable</span><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">libvorbis</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">enable</span><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">libx264</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">enable</span><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">libxvid</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">enable</span><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">shared</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">enable</span><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">gpl</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">enable</span><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">postproc</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">enable</span><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">nonfree</span>  <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">enable</span><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">avfilter</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">enable</span><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">pthreads</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">make</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">make</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">install</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul>


添加 /opt/ffmpeg/lib 到系统库目录
<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">cat /etc/<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">ld</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.so</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.conf</span>
echo <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"/opt/ffmpeg/lib"</span> >> /etc/<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">ld</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.so</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.conf</span>
cat /etc/<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">ld</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.so</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.conf</span>
ldconfig</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li></ul>


验证 FFmpeg
<code class="hljs  has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">/opt/ffmpeg/bin/ffmpeg</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>


Nginx + nginx-rtmp-module (Web 服务器,RTMP服务器)
<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">yum install <span class="hljs-attribute" style="box-sizing: border-box;">-y</span> gcc gcc<span class="hljs-attribute" style="box-sizing: border-box;">-c</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">++</span> make openssl<span class="hljs-attribute" style="box-sizing: border-box;">-devel</span> pcre pcre<span class="hljs-attribute" style="box-sizing: border-box;">-devel</span>
wget <span class="hljs-attribute" style="box-sizing: border-box;">-c</span> http:<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//nginx.org/download/nginx-1.8.0.tar.gz</span>
tar xzvf nginx<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1.8</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.0</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>tar<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>gz
wget <span class="hljs-attribute" style="box-sizing: border-box;">-c</span> https:<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//github.com/arut/nginx-rtmp-module/archive/v1.1.7.tar.gz -O nginx-rtmp-module-1.1.7.tar.gz</span>
tar xzvf nginx<span class="hljs-attribute" style="box-sizing: border-box;">-rtmp</span><span class="hljs-attribute" style="box-sizing: border-box;">-module</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1.1</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.7</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>tar<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>gz
cd nginx<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1.8</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.0</span>
<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>/configure <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">--</span>prefix<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span>/usr/<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">local</span>/nginx <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">--</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">with</span><span class="hljs-attribute" style="box-sizing: border-box;">-http_ssl_module</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">--</span>add<span class="hljs-attribute" style="box-sizing: border-box;">-module</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span>/opt/nginx<span class="hljs-attribute" style="box-sizing: border-box;">-rtmp</span><span class="hljs-attribute" style="box-sizing: border-box;">-module</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1.1</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.7</span>
make
make install</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li></ul>


验证 Nginx
<code class="hljs livecodeserver has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># run nginx</span>
/usr/<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">local</span>/nginx/sbin/nginx -c /usr/<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">local</span>/nginx/conf/nginx.conf</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>
<code class="hljs vala has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"># web server</span>
wget http:<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//localhost</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>


更换 nginx.conf
<code class="hljs coffeescript has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#user  nobody;</span>
worker_processes  <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>;

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#pid        logs/nginx.pid;</span>

events {
worker_connections  <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1024</span>;
}

rtmp {

server {

listen <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1935</span>;

chunk_size <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4000</span>;

application live {
live <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">on</span>;
}

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># TV mode: one publisher, many subscribers</span>
application mytv {

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># enable live streaming</span>
live <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">on</span>;

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># record first 1K of stream</span>
record all;
record_path /tmp/av;
record_max_size <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>K;

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># append current timestamp to each flv</span>
record_unique <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">on</span>;

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># publish only from localhost</span>
allow publish <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">127.0</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.0</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.1</span>;
deny publish all;

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#allow play all;</span>
}

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># Transcoding (ffmpeg needed)</span>
application big {
live <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">on</span>;

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># On every pusblished stream run this command (ffmpeg)</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># with substitutions: $app/${app}, $name/${name} for application & stream name.</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># This ffmpeg call receives stream from this application &</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># reduces the resolution down to 32x32. The stream is the published to</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># 'small' application (see below) under the same name.</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># ffmpeg can do anything with the stream like video/audio</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># transcoding, resizing, altering container/codec params etc</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># Multiple exec lines can be specified.</span>

exec <span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">/opt/ffmpeg/bin/ffmpeg -re -i rtmp:/</span><span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">/localhost:1935/</span>$app/$name -vcodec flv -acodec copy -s <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">160</span>x120
-f flv <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">rtmp</span>:<span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span><span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">localhost</span>:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1935</span>/small/${name};
}

application small {
live <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">on</span>;
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># Video with reduced resolution comes here from ffmpeg</span>
}

application webcam {
live <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">on</span>;

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># Stream from local webcam</span>
exec_static /opt/ffmpeg/bin/ffmpeg -f video4linux2 -i /dev/video0 -<span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">c</span>:v libx264 -an
-f flv <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">rtmp</span>:<span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span><span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">localhost</span>:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1935</span>/webcam/mystream;
}

application mypush {
live <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">on</span>;

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># Every stream published here</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># is automatically pushed to</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># these two machines</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">##push rtmp1.example.com;</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">##push rtmp2.example.com:1934;</span>
}

application mypull {
live <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">on</span>;

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># Pull all streams from remote machine</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># and play locally</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">##pull rtmp://rtmp3.example.com pageUrl=www.example.com/index.html;</span>
}

application mystaticpull {
live <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">on</span>;

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># Static pull is started at nginx start</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">##pull rtmp://rtmp4.example.com pageUrl=www.example.com/index.html name=mystream static;</span>
}

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># video on demand</span>
application vod {
play /<span class="hljs-reserved" style="box-sizing: border-box;">var</span>/flvs;
}

application vod2 {
play /<span class="hljs-reserved" style="box-sizing: border-box;">var</span>/mp4s;
}

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># Many publishers, many subscribers</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># no checks, no recording</span>
application videochat {

live <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">on</span>;

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># The following notifications receive all</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># the session variables as well as</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># particular call arguments in HTTP POST</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># request</span>

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># Make HTTP request & use HTTP retcode</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># to decide whether to allow publishing</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># from this connection or not</span>
on_publish <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">http</span>:<span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span><span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">localhost</span>:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8080</span>/publish;

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># Same with playing</span>
on_play <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">http</span>:<span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span><span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">localhost</span>:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8080</span>/play;

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># Publish/play end (repeats on disconnect)</span>
on_done <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">http</span>:<span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span><span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">localhost</span>:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8080</span>/done;

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># All above mentioned notifications receive</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># standard connect() arguments as well as</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># play/publish ones. If any arguments are sent</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># with GET-style syntax to play & publish</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># these are also included.</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># Example URL:</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#   rtmp://localhost/myapp/mystream?a=b&c=d</span>

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># record 10 video keyframes (no audio) every 2 minutes</span>
record keyframes;
record_path /tmp/vc;
record_max_frames <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10</span>;
record_interval <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>m;

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># Async notify about an flv recorded</span>
on_record_done <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">http</span>:<span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span><span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">localhost</span>:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8080</span>/record_done;

}

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># HLS</span>

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># For HLS to work please create a directory in tmpfs (/tmp/hls here)</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># for the fragments. The directory contents is served via HTTP (see</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># http{} section in config)</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># Incoming stream must be in H264/AAC. For iPhones use baseline H264</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># profile (see ffmpeg example).</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># This example creates RTMP stream from movie ready for HLS:</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># ffmpeg -loglevel verbose -re -i movie.avi  -vcodec libx264</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#    -vprofile baseline -acodec libmp3lame -ar 44100 -ac 1</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#    -f flv rtmp://localhost:1935/hls/movie</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># If you need to transcode live stream use 'exec' feature.</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#</span>
application hls {
live <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">on</span>;
hls <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">on</span>;
hls_path /tmp/hls;
hls_fragment <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>s;
hls_playlist_length <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">6</span>s;
}

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># MPEG-DASH is similar to HLS</span>
application dash {
live <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">on</span>;
dash <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">on</span>;
dash_path /tmp/dash;
}
}
}

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># HTTP can be used for accessing RTMP stats</span>
http {

server {

listen      <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">80</span>;

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># This URL provides RTMP statistics in XML</span>
location /stat {
rtmp_stat all;

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># Use this stylesheet to view XML as web page</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># in browser</span>
rtmp_stat_stylesheet stat.xsl;
}

location /stat.xsl {
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># XML stylesheet to view RTMP stats.</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># Copy stat.xsl wherever you want</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># and put the full directory path here</span>
root <span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">/path/to/stat.xsl/</span>;
}

location /hls {
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># Serve HLS fragments</span>
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /tmp;
add_header Cache-Control <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">no</span>-cache;
}

location /dash {
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># Serve DASH fragments</span>
root /tmp;
add_header Cache-Control <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">no</span>-cache;
}
}
}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li><li style="box-sizing: border-box; padding: 0px 5px;">45</li><li style="box-sizing: border-box; padding: 0px 5px;">46</li><li style="box-sizing: border-box; padding: 0px 5px;">47</li><li style="box-sizing: border-box; padding: 0px 5px;">48</li><li style="box-sizing: border-box; padding: 0px 5px;">49</li><li style="box-sizing: border-box; padding: 0px 5px;">50</li><li style="box-sizing: border-box; padding: 0px 5px;">51</li><li style="box-sizing: border-box; padding: 0px 5px;">52</li><li style="box-sizing: border-box; padding: 0px 5px;">53</li><li style="box-sizing: border-box; padding: 0px 5px;">54</li><li style="box-sizing: border-box; padding: 0px 5px;">55</li><li style="box-sizing: border-box; padding: 0px 5px;">56</li><li style="box-sizing: border-box; padding: 0px 5px;">57</li><li style="box-sizing: border-box; padding: 0px 5px;">58</li><li style="box-sizing: border-box; padding: 0px 5px;">59</li><li style="box-sizing: border-box; padding: 0px 5px;">60</li><li style="box-sizing: border-box; padding: 0px 5px;">61</li><li style="box-sizing: border-box; padding: 0px 5px;">62</li><li style="box-sizing: border-box; padding: 0px 5px;">63</li><li style="box-sizing: border-box; padding: 0px 5px;">64</li><li style="box-sizing: border-box; padding: 0px 5px;">65</li><li style="box-sizing: border-box; padding: 0px 5px;">66</li><li style="box-sizing: border-box; padding: 0px 5px;">67</li><li style="box-sizing: border-box; padding: 0px 5px;">68</li><li style="box-sizing: border-box; padding: 0px 5px;">69</li><li style="box-sizing: border-box; padding: 0px 5px;">70</li><li style="box-sizing: border-box; padding: 0px 5px;">71</li><li style="box-sizing: border-box; padding: 0px 5px;">72</li><li style="box-sizing: border-box; padding: 0px 5px;">73</li><li style="box-sizing: border-box; padding: 0px 5px;">74</li><li style="box-sizing: border-box; padding: 0px 5px;">75</li><li style="box-sizing: border-box; padding: 0px 5px;">76</li><li style="box-sizing: border-box; padding: 0px 5px;">77</li><li style="box-sizing: border-box; padding: 0px 5px;">78</li><li style="box-sizing: border-box; padding: 0px 5px;">79</li><li style="box-sizing: border-box; padding: 0px 5px;">80</li><li style="box-sizing: border-box; padding: 0px 5px;">81</li><li style="box-sizing: border-box; padding: 0px 5px;">82</li><li style="box-sizing: border-box; padding: 0px 5px;">83</li><li style="box-sizing: border-box; padding: 0px 5px;">84</li><li style="box-sizing: border-box; padding: 0px 5px;">85</li><li style="box-sizing: border-box; padding: 0px 5px;">86</li><li style="box-sizing: border-box; padding: 0px 5px;">87</li><li style="box-sizing: border-box; padding: 0px 5px;">88</li><li style="box-sizing: border-box; padding: 0px 5px;">89</li><li style="box-sizing: border-box; padding: 0px 5px;">90</li><li style="box-sizing: border-box; padding: 0px 5px;">91</li><li style="box-sizing: border-box; padding: 0px 5px;">92</li><li style="box-sizing: border-box; padding: 0px 5px;">93</li><li style="box-sizing: border-box; padding: 0px 5px;">94</li><li style="box-sizing: border-box; padding: 0px 5px;">95</li><li style="box-sizing: border-box; padding: 0px 5px;">96</li><li style="box-sizing: border-box; padding: 0px 5px;">97</li><li style="box-sizing: border-box; padding: 0px 5px;">98</li><li style="box-sizing: border-box; padding: 0px 5px;">99</li><li style="box-sizing: border-box; padding: 0px 5px;">100</li><li style="box-sizing: border-box; padding: 0px 5px;">101</li><li style="box-sizing: border-box; padding: 0px 5px;">102</li><li style="box-sizing: border-box; padding: 0px 5px;">103</li><li style="box-sizing: border-box; padding: 0px 5px;">104</li><li style="box-sizing: border-box; padding: 0px 5px;">105</li><li style="box-sizing: border-box; padding: 0px 5px;">106</li><li style="box-sizing: border-box; padding: 0px 5px;">107</li><li style="box-sizing: border-box; padding: 0px 5px;">108</li><li style="box-sizing: border-box; padding: 0px 5px;">109</li><li style="box-sizing: border-box; padding: 0px 5px;">110</li><li style="box-sizing: border-box; padding: 0px 5px;">111</li><li style="box-sizing: border-box; padding: 0px 5px;">112</li><li style="box-sizing: border-box; padding: 0px 5px;">113</li><li style="box-sizing: border-box; padding: 0px 5px;">114</li><li style="box-sizing: border-box; padding: 0px 5px;">115</li><li style="box-sizing: border-box; padding: 0px 5px;">116</li><li style="box-sizing: border-box; padding: 0px 5px;">117</li><li style="box-sizing: border-box; padding: 0px 5px;">118</li><li style="box-sizing: border-box; padding: 0px 5px;">119</li><li style="box-sizing: border-box; padding: 0px 5px;">120</li><li style="box-sizing: border-box; padding: 0px 5px;">121</li><li style="box-sizing: border-box; padding: 0px 5px;">122</li><li style="box-sizing: border-box; padding: 0px 5px;">123</li><li style="box-sizing: border-box; padding: 0px 5px;">124</li><li style="box-sizing: border-box; padding: 0px 5px;">125</li><li style="box-sizing: border-box; padding: 0px 5px;">126</li><li style="box-sizing: border-box; padding: 0px 5px;">127</li><li style="box-sizing: border-box; padding: 0px 5px;">128</li><li style="box-sizing: border-box; padding: 0px 5px;">129</li><li style="box-sizing: border-box; padding: 0px 5px;">130</li><li style="box-sizing: border-box; padding: 0px 5px;">131</li><li style="box-sizing: border-box; padding: 0px 5px;">132</li><li style="box-sizing: border-box; padding: 0px 5px;">133</li><li style="box-sizing: border-box; padding: 0px 5px;">134</li><li style="box-sizing: border-box; padding: 0px 5px;">135</li><li style="box-sizing: border-box; padding: 0px 5px;">136</li><li style="box-sizing: border-box; padding: 0px 5px;">137</li><li style="box-sizing: border-box; padding: 0px 5px;">138</li><li style="box-sizing: border-box; padding: 0px 5px;">139</li><li style="box-sizing: border-box; padding: 0px 5px;">140</li><li style="box-sizing: border-box; padding: 0px 5px;">141</li><li style="box-sizing: border-box; padding: 0px 5px;">142</li><li style="box-sizing: border-box; padding: 0px 5px;">143</li><li style="box-sizing: border-box; padding: 0px 5px;">144</li><li style="box-sizing: border-box; padding: 0px 5px;">145</li><li style="box-sizing: border-box; padding: 0px 5px;">146</li><li style="box-sizing: border-box; padding: 0px 5px;">147</li><li style="box-sizing: border-box; padding: 0px 5px;">148</li><li style="box-sizing: border-box; padding: 0px 5px;">149</li><li style="box-sizing: border-box; padding: 0px 5px;">150</li><li style="box-sizing: border-box; padding: 0px 5px;">151</li><li style="box-sizing: border-box; padding: 0px 5px;">152</li><li style="box-sizing: border-box; padding: 0px 5px;">153</li><li style="box-sizing: border-box; padding: 0px 5px;">154</li><li style="box-sizing: border-box; padding: 0px 5px;">155</li><li style="box-sizing: border-box; padding: 0px 5px;">156</li><li style="box-sizing: border-box; padding: 0px 5px;">157</li><li style="box-sizing: border-box; padding: 0px 5px;">158</li><li style="box-sizing: border-box; padding: 0px 5px;">159</li><li style="box-sizing: border-box; padding: 0px 5px;">160</li><li style="box-sizing: border-box; padding: 0px 5px;">161</li><li style="box-sizing: border-box; padding: 0px 5px;">162</li><li style="box-sizing: border-box; padding: 0px 5px;">163</li><li style="box-sizing: border-box; padding: 0px 5px;">164</li><li style="box-sizing: border-box; padding: 0px 5px;">165</li><li style="box-sizing: border-box; padding: 0px 5px;">166</li><li style="box-sizing: border-box; padding: 0px 5px;">167</li><li style="box-sizing: border-box; padding: 0px 5px;">168</li><li style="box-sizing: border-box; padding: 0px 5px;">169</li><li style="box-sizing: border-box; padding: 0px 5px;">170</li><li style="box-sizing: border-box; padding: 0px 5px;">171</li><li style="box-sizing: border-box; padding: 0px 5px;">172</li><li style="box-sizing: border-box; padding: 0px 5px;">173</li><li style="box-sizing: border-box; padding: 0px 5px;">174</li><li style="box-sizing: border-box; padding: 0px 5px;">175</li><li style="box-sizing: border-box; padding: 0px 5px;">176</li><li style="box-sizing: border-box; padding: 0px 5px;">177</li><li style="box-sizing: border-box; padding: 0px 5px;">178</li><li style="box-sizing: border-box; padding: 0px 5px;">179</li><li style="box-sizing: border-box; padding: 0px 5px;">180</li><li style="box-sizing: border-box; padding: 0px 5px;">181</li><li style="box-sizing: border-box; padding: 0px 5px;">182</li><li style="box-sizing: border-box; padding: 0px 5px;">183</li><li style="box-sizing: border-box; padding: 0px 5px;">184</li><li style="box-sizing: border-box; padding: 0px 5px;">185</li><li style="box-sizing: border-box; padding: 0px 5px;">186</li><li style="box-sizing: border-box; padding: 0px 5px;">187</li><li style="box-sizing: border-box; padding: 0px 5px;">188</li><li style="box-sizing: border-box; padding: 0px 5px;">189</li><li style="box-sizing: border-box; padding: 0px 5px;">190</li><li style="box-sizing: border-box; padding: 0px 5px;">191</li><li style="box-sizing: border-box; padding: 0px 5px;">192</li><li style="box-sizing: border-box; padding: 0px 5px;">193</li><li style="box-sizing: border-box; padding: 0px 5px;">194</li><li style="box-sizing: border-box; padding: 0px 5px;">195</li><li style="box-sizing: border-box; padding: 0px 5px;">196</li><li style="box-sizing: border-box; padding: 0px 5px;">197</li><li style="box-sizing: border-box; padding: 0px 5px;">198</li><li style="box-sizing: border-box; padding: 0px 5px;">199</li><li style="box-sizing: border-box; padding: 0px 5px;">200</li><li style="box-sizing: border-box; padding: 0px 5px;">201</li><li style="box-sizing: border-box; padding: 0px 5px;">202</li><li style="box-sizing: border-box; padding: 0px 5px;">203</li><li style="box-sizing: border-box; padding: 0px 5px;">204</li><li style="box-sizing: border-box; padding: 0px 5px;">205</li><li style="box-sizing: border-box; padding: 0px 5px;">206</li><li style="box-sizing: border-box; padding: 0px 5px;">207</li><li style="box-sizing: border-box; padding: 0px 5px;">208</li><li style="box-sizing: border-box; padding: 0px 5px;">209</li><li style="box-sizing: border-box; padding: 0px 5px;">210</li><li style="box-sizing: border-box; padding: 0px 5px;">211</li><li style="box-sizing: border-box; padding: 0px 5px;">212</li><li style="box-sizing: border-box; padding: 0px 5px;">213</li><li style="box-sizing: border-box; padding: 0px 5px;">214</li><li style="box-sizing: border-box; padding: 0px 5px;">215</li><li style="box-sizing: border-box; padding: 0px 5px;">216</li><li style="box-sizing: border-box; padding: 0px 5px;">217</li><li style="box-sizing: border-box; padding: 0px 5px;">218</li><li style="box-sizing: border-box; padding: 0px 5px;">219</li><li style="box-sizing: border-box; padding: 0px 5px;">220</li><li style="box-sizing: border-box; padding: 0px 5px;">221</li><li style="box-sizing: border-box; padding: 0px 5px;">222</li><li style="box-sizing: border-box; padding: 0px 5px;">223</li><li style="box-sizing: border-box; padding: 0px 5px;">224</li></ul>


验证 RTMP

使用标准推流工具 FMLE,推送RTMP流到URL
<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-label" style="box-sizing: border-box;">rtmp:</span>//<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">x</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.x</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.x</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.x</span>:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1935</span>/live/stream</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>


使用 FastPlay 播放RTMP流 goto
<code class="hljs ruby has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-constant" style="box-sizing: border-box;">Server</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:rtmp</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">://x</span>.x.x.<span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">x:</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1935</span>/live
<span class="hljs-constant" style="box-sizing: border-box;">Stream</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:stream</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>


验证 HLS

使用标准推流工具 FMLE,推送RTMP流到URL
<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-label" style="box-sizing: border-box;">rtmp:</span>//<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">x</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.x</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.x</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.x</span>:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1935</span>/hls/stream</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>


使用 VLC 播放 HLS 流 goto

打开网络串流,URL
<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-label" style="box-sizing: border-box;">http:</span>//<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">120.26</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.109</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.136</span>/hls/stream<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.m</span>3u8</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>


验证 FFmpeg

推送流 rtmp://x.x.x.x:1935/big/stream

播放流 rtmp://x.x.x.x:1935/small/stream

此处使用 FFmpeg 把 big 的视频流的分辨率(建议使用320*240以上分辨率,方便查看效果)转换为 160*120,并重新发布到 small 流

使用标准推流工具 FMLE,推送RTMP流到URL
<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-label" style="box-sizing: border-box;">rtmp:</span>//<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">x</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.x</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.x</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.x</span>:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1935</span>/big/stream</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>


使用 FastPlay 播放RTMP流 goto
<code class="hljs ruby has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-constant" style="box-sizing: border-box;">Server</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:rtmp</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">://x</span>.x.x.<span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">x:</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1935</span>/small
<span class="hljs-constant" style="box-sizing: border-box;">Stream</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:stream</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>


参考资料

使用Nginx+FFMPEG搭建HLS直播转码服务器 goto

nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器 goto

Nginx 的启动、停止、平滑重启、信号控制和平滑升级 goto
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: