前注:
我的用戶是root,可能某些命令包含root路徑,應(yīng)根據(jù)具體目錄進(jìn)行替換。
一尾抑、編譯ffmpeg
對(duì)于我來說主要關(guān)注h264,aac,mp3。
1)準(zhǔn)備好各種工具:
yum install autoconf automake bzip2 cmake freetype-develgcc gcc-c++ git libtool make mercurial nasm pkgconfig zlib-devel
2)在home目錄下創(chuàng)建ffmpeg源碼目錄
mkdir ~/ffmpeg_sources
3)安裝Yasm
cd~/ffmpeg_sources
git clone --depth1[git://github.com/yasm/yasm.git](git://github.com/yasm/yasm.git)
cdyasm
autoreconf-fiv
./configure --prefix="$HOME/ffmpeg_build"--bindir="$HOME/bin"
make
make install
4)安裝libx264
cd~/ffmpeg_sources
git clone --depth1[git://git.videolan.org/x264](git://git.videolan.org/x264)
cdx264
PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig"./configure --prefix="$HOME/ffmpeg_build"--bindir="$HOME/bin"--enable-static
make
make install
echo
5)安裝libfdk_aac
cd~/ffmpeg_sources
git clone --depth1[git://git.code.sf.net/p/opencore](git://git.code.sf.net/p/opencore)-amr/fdk-aac
cdfdk-aac
autoreconf-fiv
./configure --prefix="$HOME/ffmpeg_build"--disable-shared
make
make install
echo
6)安裝libmp3lame
cd~/ffmpeg_sources
curl-L-O[http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz](http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz)
tar xzvf lame-3.99.5.tar.gz
cdlame-3.99.5
./configure --prefix="$HOME/ffmpeg_build"--bindir="$HOME/bin"--disable-shared--enable-nasm
make
make install
echo
7)安裝ffmpeg
cd~/ffmpeg_sources
curl-O[http://ffmpeg.org/releases/ffmpeg](http://ffmpeg.org/releases/ffmpeg)-snapshot.tar.bz2
tar xjvf ffmpeg-snapshot.tar.bz2
cdffmpeg
PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig"./configure --prefix="$HOME/ffmpeg_build"--extra-cflags="-I$HOME/ffmpeg_build/include"--extra-ldflags="-L$HOME/ffmpeg_build/lib -ldl"--bindir="$HOME/bin"--pkg-config-flags="--static"--enable-gpl--enable-nonfree--enable-libfdk_aac --enable-libfreetype--enable-libmp3lame --enable-libx264
make
make install
通過prefix 參數(shù)蒂培,就把可執(zhí)行文件生成了到ffmpeg_build目錄下再愈。
二、編譯nginx
1)下載解壓nginx
打開http://nginx.org/en/download.html
查看此鏈接的url是:http://nginx.org/download/nginx-1.11.10.tar.gz
cd ~
wget[http://nginx.org/download/nginx-1.11.10.tar.gz](http://nginx.org/download/nginx-1.11.10.tar.gz)tar xjvfnginx-1.11.10
cd nginx-1.11.10
mkdir mytest
cd mytest
2)在mytest目錄下編寫測(cè)試模塊
主要是兩個(gè)文件护戳,一個(gè)ngx_http_test_module.c翎冲,還有一個(gè)config文件
config 文件主要是告訴nginx 的configure 如何來編譯此模塊。
config文件如下寫法:
CORE_LIBS="$CORE_LIBS
-lavformat -lavcodec -lavutil -lswscale -lswresample -lz -ldl
-lfdk-aac -lfreetype -lmp3lame -lx264 -pthread -lm "
CORE_INCS="$CORE_INCS /root/ffmpeg_build/include"
ngx_addon_name=ngx_http_test_module
HTTP_AUX_FILTER_MODULES="$HTTP_AUX_FILTER_MODULES ngx_http_test_module"
CFLAGS="$CFLAGS -ggdb -D_DEBUG -D_LARGEFILE_SOURCE"
NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_test_module.c"
ngx_http_test_module.c如下寫法
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include
#include
#include
staticchar*set(ngx_conf_t *, ngx_command_t *, void*);
staticngx_int_t handler(ngx_http_request_t *);
staticngx_command_t test_commands[] = {
{
ngx_string("test"),
NGX_HTTP_LOC_CONF | NGX_CONF_NOARGS,
set,
NGX_HTTP_LOC_CONF_OFFSET,
0,
NULL
},
ngx_null_command
};
staticngx_http_module_t test_ctx = {
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
};
ngx_module_t ngx_http_test_module = {
NGX_MODULE_V1,
&test_ctx,
test_commands,
NGX_HTTP_MODULE,
NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NGX_MODULE_V1_PADDING
};
staticchar*set(ngx_conf_t *cf, ngx_command_t *cmd, void*conf) {
ngx_http_core_loc_conf_t *corecf;
corecf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);
corecf->handler = handler;
returnNGX_CONF_OK;
};
staticngx_int_t handler(ngx_http_request_t *req) {
u_char html[1024] = "
FFMPEG test
";
req->headers_out.status = 200;
intlen = sizeof(html) - 1;
req->headers_out.content_length_n = len;
ngx_str_set(&req->headers_out.content_type, "text/html");
ngx_http_send_header(req);
ngx_buf_t *b;
b = ngx_pcalloc(req->pool, sizeof(ngx_buf_t));
ngx_chain_tout;
out.buf = b;
out.next = NULL;
b->pos = html;
b->last = html + len;
b->memory = 1;
b->last_buf = 1;
av_register_all();
AVCodec* decoder = avcodec_find_decoder(AV_CODEC_ID_H264);
AVCodecContext * dc = avcodec_alloc_context3(decoder);
dc->bit_rate = 40000;
returnngx_http_output_filter(req, &out);
}
3)編譯nginx
cd ~/nginx-1.11.10
./configure--prefix=/root/nginx_build--add-module=/root/nginx-1.11.10/mytest/ --with-ld-opt="-L /root/ffmpeg_build/lib"
make
make install
這里需要注意的是:ffmpeg 的頭文件目錄和lib文件名是在config文件里定義的媳荒,而ffmpeg的lib文件目錄是在這里定義的抗悍。
4)修改入口
nginx.conf位于nginx_build/conf/nginx.conf
添加 /test入口
location / {
root html;
index index.html index.htm;
}
location /test {
test;
}
5)啟動(dòng)ngnix
cd ~/nginx_build/sbin
./nginx -c ~/nginx_build/conf/nginx.conf
6)用瀏覽器訪問: