如何在centos创建带ffmpeg库的nginx插件

前注:
我的用户是root,可能某些命令包含root路径,应根据具体目录进行替换。
一、编译ffmpeg
对于我来说主要关注h264,aac,mp3。
1)准备好各种工具:

yum install autoconf automake bzip2 cmake freetype-develgcc gcc-c++ git libtool make mercurial nasm pkgconfig zlib-devel

2)在home目录下创建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 参数,就把可执行文件生成了到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目录下编写测试模块
主要是两个文件,一个ngx_http_test_module.c,还有一个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)启动ngnix

cd ~/nginx_build/sbin
./nginx -c ~/nginx_build/conf/nginx.conf

6)用浏览器访问:

333333.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,539评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,594评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,871评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,963评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,984评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,763评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,468评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,850评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,002评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,144评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,823评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,483评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,026评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,150评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,415评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,092评论 2 355

推荐阅读更多精彩内容