[转]编译Lighttpd1.4.22增加h264模块

此文转自http://www.bwcsc.net/?q=node/483

目前已经有不少视频网站使用了H264(.Mp4)格式的视频文件,本文介绍如何在lighttpd-1.4.22下编译模块来支持Mp4文件的拖动功能

1、创建下载目录

             

2、下载lighttpd-1.4.22

   

3、下载H264视频模块

       

 

4、拷贝源文件

 

5、修改Make文件
       修改lighttpd-1.4.22/src/Makefile.am文件


下面增加如下代码

保存退出
#vi Makfile.in 查找/mod_flv
mod_flv_streaming_la_DEPENDENCIES = $(am__DEPENDENCIES_2)
am_mod_flv_streaming_la_OBJECTS = mod_flv_streaming.lo
mod_flv_streaming_la_OBJECTS = $(am_mod_flv_streaming_la_OBJECTS)
mod_flv_streaming_la_LINK = $(LIBTOOL) –tag=CC $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) –mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
        $(mod_flv_streaming_la_LDFLAGS) $(LDFLAGS) -o [email protected]
下面增加以下内容
mod_h264_streaming_la_DEPENDENCIES = $(am__DEPENDENCIES_2)
am_mod_h264_streaming_la_OBJECTS = mod_h264_streaming.lo moov.lo
mod_h264_streaming_la_OBJECTS = $(am_mod_h264_streaming_la_OBJECTS)
mod_h264_streaming_la_LINK = $(LIBTOOL) –tag=CC $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) –mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
        $(mod_h264_streaming_la_LDFLAGS) $(LDFLAGS) -o [email protected]
查找下一下mod_flv(在VI模式下按n键)
SOURCES = ….的$(mod_flv_streaming_la_SOURCES) 后面增加
$(mod_h264_streaming_la_SOURCES)
DIST_SOURCES = …的$(mod_flv_streaming_la_SOURCES) \后面增加
$(mod_h264_streaming_la_SOURCES) \
lib_LTLIBRARIES = $(am__append_1) mod_flv_streaming.la后面增加_h264_streaming.la如下
lib_LTLIBRARIES = $(am__append_1) mod_flv_streaming.la mod_h264_streaming.la \
在mod_flv_streaming_la_SOURCES = mod_flv_streaming.c
mod_flv_streaming_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
mod_flv_streaming_la_LIBADD = $(common_libadd)
下面增加
mod_h264_streaming_la_SOURCES = mod_h264_streaming.c moov.c
mod_h264_streaming_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
mod_h264_streaming_la_LIBADD = $(common_libadd)
在mod_flv_streaming.la: $(mod_flv_streaming_la_OBJECTS) $(mod_flv_streaming_la_DEPENDENCIES)
        $(mod_flv_streaming_la_LINK) -rpath $(libdir) $(mod_flv_streaming_la_OBJECTS) $(mod_flv_streaming_la_LIBADD) $(LIBS)
下面增加
mod_h264_streaming.la: $(mod_h264_streaming_la_OBJECTS) $(mod_h264_streaming_la_DEPENDENCIES)
        $(mod_h264_streaming_la_LINK) -rpath $(libdir) $(mod_h264_streaming_la_OBJECTS) $(mod_h264_streaming_la_LIBADD) $(LIBS)
下面增加
保存退出
6、编译安装

 

查看/usr/local/lighttpd/lib目录下是否存在mod_h264_streaming.la、mod_h264_streaming.so文件,如果存在,则表示安装成功
7、修改配置文件
       #cd /usr/local/lighttpd/lighttpd
       #mkdir etc
       #cd /back/soft/lighttpd-1.4.22/doc
       #cp lighttpd.conf /usr/local/lighttpd/etc
       #cd /usr/local/lighttpd/etc
       #vi lighttpd.conf 查找/ server.modules 更改增加红字部分如下:
server.modules              = (
#                               “mod_rewrite”,
#                               “mod_redirect”,
#                               “mod_alias”,
                                “mod_access”,
#                               “mod_cml”,
#                               “mod_trigger_b4_dl”,
#                               “mod_auth”,
#                               “mod_status”,
#                               “mod_setenv”,
#                               “mod_fastcgi”,
#                               “mod_proxy”,
#                               “mod_simple_vhost”,
#                               “mod_evhost”,
#                               “mod_userdir”,
#                               “mod_cgi”,
#                               “mod_compress”,
#                               “mod_ssi”,
#                               “mod_usertrack”,
#                               “mod_expire”,
#                               “mod_secdownload”,
                                “mod_flv_streaming”,
                                “mod_h264_streaming”,
#                               “mod_rrdtool”,
                                “mod_accesslog” )
server.port = 80
flv-streaming.extensions = ( “.flv” )
h264-streaming.extensions = ( “.mp4” )
保存退出
8、增加启动脚本
       #cd /back/soft/lighttpd-1.4.22/doc
       #cp rc.lighttpd.redhat /etc/init.d/lighttpd
#vi /etc/init.d/lighttpd
修改第25,29行如下所示
24 if [ -z “$LIGHTTPD_CONF_PATH” ]; then
25        LIGHTTPD_CONF_PATH= “/usr/local/lighttpd/etc/lighttpd.conf”
26 fi
27
28 prog=”lighttpd”
29 lighttpd=”/usr/local/lighttpd/sbin/lighttpd”
30 RETVAL=0
保存退出
/etc/init.d/lighttpd start 启动服务
ps -ef|grep lighttpd 查看是否启动成功,如果出现下面信息,表示启动成功
root     26231     1 0 02:19 ?        00:00:00 /usr/local/lighttpd264/sbin/lighttpd -f /usr/local/lighttpd264/etc/lighttpd.conf

常见问题解决办法

[[email protected] lighttpd-1.4.22]# make
make  all-recursive
make[1]: Entering directory /root/src/lighttpd-1.4.22'
Making all in src
make[2]: Entering directory
/root/src/lighttpd-1.4.22/src’
Makefile:867: *** missing separator (did you mean TAB instead of 8 spaces?).  Stop.
make[2]: Leaving directory /root/src/lighttpd-1.4.22/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory
/root/src/lighttpd-1.4.22′
make: *** [all] Error 2
错误解决办法
vi /back/soft/lighttpd-1.4.22/src/Makefile
将867行的$(mod_fastcgi_la_LINK) -rpath $(libdir) $(mod_fastcgi_la_OBJECTS) $(mod_fastcgi_la_LIBADD) $(LIBS)前面的空格删除,按一下Tab键,保存.重新编译通过

lighttpd学习–使用mod_secdownload模块防盗链及fastcgi模式配置

最近应用端要配置出防盗链来,早就知道可以通过referer来判断是否是盗链,从而设置防盗链,然后我们开发的人员跟我说了lighttpd的另外有个模块可以来配置出防盗链来,这个模块就是mod_secdownload,这个模块的使用思路是,lighttpd端先配置此模块,设置一个固定的用于加密的字串,比如abc,然后设置一个url前缀,比如/flv/,再设置一个过期时间,比如10s,然后在通过一段php代码,对加密字串,系统时间等进行md5算法加密生成一个字串,这个字串在和url前缀组合生成最终的文件url,这个url会在10s后自动失效,从而达到防盗链的效果。原理就是这些,下面看下实际的例子。

因为需要php的支持,所以fastcgi的配置在这里就一并写出了,至于lighttpd和php的编译安装这里就不在赘述,需要的朋友请去google查询。有一点需要注意的就是php编译的时候需要启用fastcgi模式。

编辑配置文件,找到server.modules处,开启如下两个模块

server.modules = ( ….,"mod_fastcgi", "mod_secdownload",……)

先配置secdownload模块,如下

## secdownload config
secdownload.secret          = "abc"            #设置需要的加密字串
secdownload.document-root   = "/data/wwwroot"  #需要防盗链文件的所在目录   
secdownload.uri-prefix      = "/flv/"          #生成后url的前缀
secdownload.timeout         = 20               #设置过期时间,单位秒    

再来看下fastcgi模式的配置,我个人认为真的是太方便了。

#### fastcgi module
## read fastcgi.txt for more info
## for PHP don’t forget to set cgi.fix_pathinfo = 1 in the php.ini
fastcgi.server             = ( ".php" =>
                               ( "localhost" =>
                                 (
                                   "host" => "127.0.0.1",                            #设置fastcgi服务监听的ip
                                   "port" => 9000,                                   #设置fastcgi服务监听的端口
                                   "bin-path" => "/usr/local/php/bin/php-cgi"        #php-cgi所在的路径
                                 )
                               )
                            )

到此,lighttpd上的配置就完毕了,然后看下php程序的写法

<?php

  $secret = "abc";
  $uri_prefix = "/flv/";

  # filename
  # please note file name starts with "/"
  $f = "/123.mp4";

  # current timestamp
  $t = time();

  $t_hex = sprintf("%08x", $t);
  $m = md5($secret.$f.$t_hex);

  # generate link
  $videoUrl = $uri_prefix.$m."/".$t_hex.$f;
?>
这里$videoUrl就应该是最后生成出来的url

现在就可以启动lighttpd去测试了,启动lighttpd后执行ps afx可以看到如下内容,表示启动正常,如果不正常,请参看errorlog来排查错误

 7178 ?        S      0:00 ../sbin/lighttpd -f ../conf/lighttpd.conf
 7179 ?        Ss     0:00  _ /usr/local/php/bin/php-cgi
 7180 ?        S      0:00  |   _ /usr/local/php/bin/php-cgi
 7181 ?        Ss     0:00  _ /usr/local/php/bin/php-cgi
 7182 ?        S      0:00  |   _ /usr/local/php/bin/php-cgi
 7183 ?        Ss     0:00  _ /usr/local/php/bin/php-cgi
 7184 ?        S      0:00  |   _ /usr/local/php/bin/php-cgi
 7185 ?        Ss     0:00  _ /usr/local/php/bin/php-cgi
 7186 ?        S      0:00      _ /usr/local/php/bin/php-cgi

参考资料:

http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ModSecDownload
http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ModFastCGI