如何在centos創(chuàng)建帶ffmpeg庫的nginx插件

前注:
我的用戶是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)用瀏覽器訪問:

333333.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市钳枕,隨后出現(xiàn)的幾起案子檐春,更是在濱河造成了極大的恐慌,老刑警劉巖么伯,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異卡儒,居然都是意外死亡田柔,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門骨望,熙熙樓的掌柜王于貴愁眉苦臉地迎上來硬爆,“玉大人,你說我怎么就攤上這事擎鸠∽嚎模” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵劣光,是天一觀的道長(zhǎng)袜蚕。 經(jīng)常有香客問我,道長(zhǎng)绢涡,這世上最難降的妖魔是什么牲剃? 我笑而不...
    開封第一講書人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮雄可,結(jié)果婚禮上凿傅,老公的妹妹穿的比我還像新娘缠犀。我一直安慰自己,他們只是感情好聪舒,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開白布辨液。 她就那樣靜靜地躺著,像睡著了一般箱残。 火紅的嫁衣襯著肌膚如雪滔迈。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,816評(píng)論 1 290
  • 那天疚宇,我揣著相機(jī)與錄音亡鼠,去河邊找鬼。 笑死敷待,一個(gè)胖子當(dāng)著我的面吹牛间涵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播榜揖,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼勾哩,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了举哟?” 一聲冷哼從身側(cè)響起思劳,我...
    開封第一講書人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎妨猩,沒想到半個(gè)月后潜叛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡壶硅,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年威兜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片庐椒。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡椒舵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出约谈,到底是詐尸還是另有隱情笔宿,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布棱诱,位于F島的核電站泼橘,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏迈勋。R本人自食惡果不足惜侥加,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望粪躬。 院中可真熱鬧担败,春花似錦昔穴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至狈网,卻和暖如春宙搬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拓哺。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來泰國打工勇垛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人士鸥。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓闲孤,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親烤礁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子讼积,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容