• 3938 阅读
  • 15 回复

lighttpd对flv视频文件的拖动一种变形

视频在线上传+队列转换FLV+水印+捉图+修复+获时+转3GP(API语言不限,开视频站必备!)
当前流行的视频网站,关于视频的在线拖动观看技术的小试,

1.flv文件
 flv视频文件,想大家都比较清楚,只要从关键帧的位置切开,并加上"FLV\x1\x1\0\0\0\x9\0\0\0\x9"公共头标志信息,后对任何支持flv视频文件dencoder的播放器都是可以正常播放的

 "FLV\x1\x1\0\0\0\x9\0\0\0\x9" + keyframe(body)

2.lighttpd中的mod_flv_streaming.c模块 (重点)

http://www.lighttpd.net/

http://blog.lighttpd.net/articles/2006/03/09/flv-streaming-with-lighttpd

 这里通过http的get方法,向服务器请求指定的视频片段

 形如: http://youserver.com/flv/abcdefg.flv?start=12345

 mod_flv_streaming.c默认的方式是,从start(文件的物理位置offset)的开始,默认到文件结束。

  相关服务器代码如下:

C代码:

代码 复制 - 运行

for (k = 0; k < p->conf.extensions->used; k++) { 
  data_string *ds = (data_string *)p->conf.extensions->data[k]; 
  int ct_len = ds->value->used - 1; 

  if (ct_len > s_len) continue; 
  if (ds->value->used == 0) continue; 

  if (0 == strncmp(con->physical.path->ptr + s_len - ct_len, ds->value->ptr, ct_len)) { 
   data_string *get_param; 
   stat_cache_entry *sce = NULL; 
   buffer *b; 
   int start; 
   char *err = NULL; 
   /* if there is a start=[0-9]+ in the header use it as start, 
    * otherwise send the full file */ 

   array_reset(p->get_params); 
   buffer_copy_string_buffer(p->query_str, con->uri.query); 
   split_get_params(p->get_params, p->query_str); 
/*这个是重点,获得客户端的播放器通过get方法传来的start(文件拖动的开始位置offset)*/ 
   if (NULL == (get_param = (data_string *)array_get_element(p->get_params, "start"))) { 
    return HANDLER_GO_ON; 
   } 

   /* too short */ 
   if (get_param->value->used < 2) return HANDLER_GO_ON; 

   /* check if it is a number */ 
   start = strtol(get_param->value->ptr, &err, 10); 
   if (*err != '\0') { 
    return HANDLER_GO_ON; 
   } 

   if (start <= 0) return HANDLER_GO_ON; 

   /* check if start is > filesize */ 
   if (HANDLER_GO_ON != stat_cache_get_entry(srv, con, con->physical.path, &sce)) { 
    return HANDLER_GO_ON; 
   } 

   if (start > sce->st.st_size) { 
    return HANDLER_GO_ON; 
   } 

   /* we are safe now, let's build a flv header */ 
   b = chunkqueue_get_append_buffer(con->write_queue); 

                        /*准备发送给客户端播放器的flv公共头信息13字节*/ 
   buffer_copy_string_len(b, CONST_STR_LEN("FLV\x1\x1\0\0\0\x9\0\0\0\x9")); 

                        /*发送seek到的拖动关键桢的位置keyframe, 并计算出从拖动点到该视频文件结束的长度*/ 
   http_chunk_append_file(srv, con, con->physical.path, start, sce->st.st_size - start); 
                       /* http相关信息的填充*/ 
   response_header_overwrite(srv, con, CONST_STR_LEN("Content-Type"), CONST_STR_LEN("video/x-flv")); 

   con->file_finished = 1; 
                       /*done, 处理拖动完成*/ 
   return HANDLER_FINISHED

3 对客户端的播放器而言,服务器对flv文件的拖动支持是透明的,
 只要播放器安照合法的get方法向服务器请求,即可得到可以播放的视频片段,
 但是这里的start=xxxx,一定是flv视频文件的关键桢位置,否则不能播放
 一般而言,对flv视频文件可以使用
 yamdi
http://yamdi.sourceforge.net/
 加上metadata信息,即可完美支持拖动,
 播放器可以再第一次请求视频文件的时候获得该视频的metadata信息(即包含关键桢,时间,等等与视频相关的信息)

4.以上讨论的,都是lighttpd-mod_flv_streaming.c默认的对flv的拖动支持,
 其实可以,做一些简单的扩展,
 可以增加end参数,即是增加拖动的结束参数,
 假设,很多用户并不会观看视频到结束,
 每次请求N字节
 http://youserver.com/flv/abcdefg.flv?start=23456&end=23456+N
 播放器可以增加这样的功能,
 a.先请求某一段视频
 b.当当前视频片段没有播放完毕之前,不会去请求下一个片段,
   只有当当前视频片段在即将播放结束的时候,再去请求下一个片段,
   这样,当用户,看了前面的某一片段后,突然关闭该播放页,以至于不会白白浪费掉那已经download到本地,但是并没有观看的视频,节余带宽

 粗略代码实现如下:

C代码:

代码 复制 - 运行

if (NULL != (get_param = (data_string *)array_get_element(p->get_params, "start")))  
{ 

    /* too short */ 
    if (get_param->value->used < 2)  
     return HANDLER_GO_ON; 

       /* check if it is a number */ 
       start = strtol(get_param->value->ptr, &err, 10); 
       if (*err != '\0')  
    { 
        return HANDLER_GO_ON; 
       } 

       /* check if tflvbegin is >= 0 */ 
       if (start < 0)  
     return HANDLER_GO_ON; 

       /* check if start is > filesize */ 
       if (start > sce->st.st_size)  
    { 
        return HANDLER_GO_ON; 
       } 
   } 
   else  
   { 
    return HANDLER_GO_ON; 
   } 

   /* if there is a start=[0-9]+ in the header use it as end, 
    * otherwise send the full file */ 
/*这里重点,仿照lighttpd如何获得get方法的中的start,同理获得end参数, 并做一些必要的合法性检查*/ 
   if (NULL != (get_param = (data_string *)array_get_element(p->get_params, "end")))  
   { 
       /* too short */ 
       if (get_param->value->used < 2)  
     return HANDLER_GO_ON; 

       /* check if it is a number */ 
       end = strtol(get_param->value->ptr, &err, 10); 
       if (*err != '\0')  
    { 
        return HANDLER_GO_ON; 
       } 

       /*参数检查,必须*/ 
       /* check if end is > 0  
        * check if start < end  
        * make sure star > 0  
        * */ 
       if (end <= 0 || start >= end)  
     return HANDLER_GO_ON; 

       /* check if end is > filesize */ 
       if (end > sce->st.st_size)  
    { 
     //return HANDLER_GO_ON; 
     tflvend = sce->st.st_size; /* path tflvend is not right */ 
       } 
   } 
   else  
   { 
    return HANDLER_GO_ON; 


   } 

/* we are safe now, let's build a flv header */ 
   b = chunkqueue_get_append_buffer(con->write_queue); 

                        /*准备发送给客户端播放器的flv公共头信息13字节*/ 
   buffer_copy_string_len(b, CONST_STR_LEN("FLV\x1\x1\0\0\0\x9\0\0\0\x9")); 

                      /*这个是重点,以前默认的是发送的数据长度是用 fileseize-start, 现在要用end替代filesize, 即是 end-start*/ 
   http_chunk_append_file(srv, con, con->physical.path, start, end - start); 
   response_header_overwrite(srv, con, CONST_STR_LEN("Content-Type"), CONST_STR_LEN("video/x-flv")); 
   con->file_finished = 1; 
   return HANDLER_FINISHED
小鱼的淘宝店铺-多多支持哇

lighttp-mod_flv_streaming 支持FLV 拖动

视频在线上传+队列转换FLV+水印+捉图+修复+获时+转3GP(API语言不限,开视频站必备!)
wget -S http://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.26.tar.gz

wget -S http://cdnetworks-kr-2.dl.sourceforge.net/project/pcre/pcre/8.01/pcre-8.01.tar.gz
tar -zxvf pcre-8.01.tar.gz
cd pcre-8.01
./configure
make
make install
tar -zxvf lighttpd-1.4.26.tar.gz
cd lighttpd-1.4.26
./configure --prefix=/usr/local/lighttp

##################################
Plugins:
enabled:
 mod_access
 mod_accesslog
 mod_alias
 mod_auth
 mod_cgi
 mod_compress
 mod_dirlisting
 mod_evhost
 mod_expire
 mod_extforward
 mod_fastcgi
 mod_flv_streaming
 mod_indexfile
 mod_proxy
 mod_redirect
 mod_rewrite
 mod_rrdtool
 mod_scgi
 mod_secdownload
 mod_setenv
 mod_simple_vhost
 mod_ssi
 mod_staticfile
 mod_status
 mod_trigger_b4_dl
 mod_userdir
 mod_usertrack
 mod_webdav
disabled:
 mod_cml
 mod_magnet
 mod_mysql_vhost
Features:
enabled:
 auth-crypt
 compress-bzip2
 compress-deflate
 compress-gzip
 large-files
 network-ipv6
 regex-conditionals
disabled:
 auth-ldap
 network-openssl
 stat-cache-fam
 storage-gdbm
 storage-memcache
 webdav-locks
 webdav-properties
#######################################
make
make install
mkdir -p /usr/local/lighttp/etc/
cp /opt/lighttpd-1.4.26/doc/lighttpd.conf /usr/local/lighttp/etc/




截取一段配置文件
# lighttpd configuration file
#
############ Options you really have to take care of ####################
## modules to load
server.modules              = (
                              "mod_rewrite",
                              "mod_redirect",
                              "mod_alias",
                              "mod_access",
#                               "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_rrdtool",
                              "mod_flv_streaming",
                              "mod_accesslog" )
## A static document-root
server.document-root        = "/var/lighttp"
#server.document-root        = "/home/lighttpd/htdocs"
## where to send error-messages to
server.errorlog             = "/usr/local/lighttp/log/error_log"
# files to check for if .../ is requested
index-file.names            = ( "index.php", "index.html",
                               "index.htm", "default.htm" )
# mimetype mapping
mimetype.assign             = (
 ".pdf"          =>      "application/pdf",
 ".sig"          =>      "application/pgp-signature",
 ".spl"          =>      "application/futuresplash",
 ".class"        =>      "application/octet-stream",
 ".ps"           =>      "application/postscript",
 ".torrent"      =>      "application/x-bittorrent",
 ".dvi"          =>      "application/x-dvi",
 ".gz"           =>      "application/x-gzip",
 ".pac"          =>      "application/x-ns-proxy-autoconfig",
 ".swf"          =>      "application/x-shockwave-flash",
 ".tar.gz"       =>      "application/x-tgz",
 ".tgz"          =>      "application/x-tgz",
 ".tar"          =>      "application/x-tar",
 ".zip"          =>      "application/zip",
 ".mp3"          =>      "audio/mpeg",
 ".m3u"          =>      "audio/x-mpegurl",
 ".wma"          =>      "audio/x-ms-wma",
 ".wax"          =>      "audio/x-ms-wax",
 ".ogg"          =>      "application/ogg",
 ".wav"          =>      "audio/x-wav",
 ".gif"          =>      "image/gif",
 ".jar"          =>      "application/x-java-archive",
 ".jpg"          =>      "image/jpeg",
 ".jpeg"         =>      "image/jpeg",
 ".png"          =>      "image/png",
 ".xbm"          =>      "image/x-xbitmap",
 ".xpm"          =>      "image/x-xpixmap",
 ".xwd"          =>      "image/x-xwindowdump",
 ".css"          =>      "text/css",
 ".html"         =>      "text/html",
 ".htm"          =>      "text/html",
 ".js"           =>      "text/javascript",
 ".asc"          =>      "text/plain",
 ".c"            =>      "text/plain",
 ".cpp"          =>      "text/plain",
 ".log"          =>      "text/plain",
 ".conf"         =>      "text/plain",
 ".text"         =>      "text/plain",
 ".txt"          =>      "text/plain",
 ".dtd"          =>      "text/xml",
 ".xml"          =>      "text/xml",
 ".mpeg"         =>      "video/mpeg",
 ".mpg"          =>      "video/mpeg",
 ".mov"          =>      "video/quicktime",
 ".qt"           =>      "video/quicktime",
 ".avi"          =>      "video/x-msvideo",
 ".asf"          =>      "video/x-ms-asf",
 ".asx"          =>      "video/x-ms-asf",
 ".wmv"          =>      "video/x-ms-wmv",
 ".bz2"          =>      "application/x-bzip",
 ".tbz"          =>      "application/x-bzip-compressed-tar",
 ".tar.bz2"      =>      "application/x-bzip-compressed-tar",
 # default mime type
 ""              =>      "application/octet-stream",
)
#### accesslog module
accesslog.filename          = "/usr/local/lighttp/log/access_log"
accesslog.format = "%{%F %T}t %h \"%U%q\" %>s %D %O \"%{Referer}i\" \"%{User-Agent}i\""
## deny access the file-extensions
url.access-deny             = ( "~", ".inc" )
$HTTP["url"] =~ "\.pdf$" {
 server.range-requests = "disable"
}
## which extensions should not be handle via static-file transfer
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
######### Options that are good to be but not neccesary to be changed #######
## bind to port (default: 80)
#server.port                = 81
## bind to localhost (default: all interfaces)
#server.bind                = "127.0.0.1"
## error-handler for status 404
#server.error-handler-404   = "/error-handler.html"
#server.error-handler-404   = "/error-handler.php"
## to help the rc.scripts
#server.pid-file            = "/var/run/lighttpd.pid"
#### url handling modules (rewrite, redirect, access)
# modified by jupengfei
#$HTTP["host"] !~ "^(cdn.flv1002.cdn.21vokglb.cn)$" {
#  $HTTP["host"] =~ "^(.*)$" {
#    url.redirect               = ( "^(.*)$" => "http://cdn.flv1002.cdn.21vokglb.cn/%1$1" )
#  }
#}
# added by jupengfei
# flv extensions
flv-streaming.extensions = (".flv")
小鱼的淘宝店铺-多多支持哇
视频在线上传+队列转换FLV+水印+捉图+修复+获时+转3GP(API语言不限,开视频站必备!)
这个不光是客户端的问题,还涉及服务器端是否支持http协议下的flv流式播放支持,
这有三个要求:
1.服务器支持flv流式播放
2.播放的flv有完整的mete信息,其中包括视频分辨率、帧率等信息
3.客户端允许发生请求流式播放的请求,比如发出 http://xxx.xxx.xxx/xxx/xxx.flv?start=NN 这样的数据请求,并且能够处理获取的流式数据,从随机点开始播放。

对于1,现在nginx或者lighttpd都是支持这样的应用的,还支持mp4的流式播放(默认编译版本一般都是打开了flv流式播放,而mp4要自己编译,若需要,也可以自己编译),但要专门配置。
对于2,有相应的软件对一般的flv上添加这样的标记信息,添加后的也支持一般的应用,而且数据量增加不多
对于3,你可以分析优酷的播放器,应该有相应的处理。
小鱼的淘宝店铺-多多支持哇

nginx 搭建http协议拖动播放 FLV 视频播放服务器

视频在线上传+队列转换FLV+水印+捉图+修复+获时+转3GP(API语言不限,开视频站必备!)



所需要的 播放器,我用的开源的 JW FLV Media Player 我把我的上传到了blog 大家可以下载。。
做了一点点改动!!




shell $> wget 'http://downloads.sourceforge.net/project/yamdi/yamdi/1.4/yamdi-1.4.tar.gz?use_mirror=nchc'


shell $> wget 'http://sysoev.ru/nginx/nginx-0.7.64.tar.gz'




shell $> tar zxvf nginx-0.7.64.tar.gz


shell $> cd nginx-0.7.64


shell $> groupadd www


shell $> useradd -g www www


shell $> ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_flv_module --with-http_gzip_static_module --with-http_stub_status_module --with-cc=gcc --with-cc-opt=" -O3"


shell $> make


shell $> make installl




shell $> tar zxvf yamdi-1.4.tar.gz


shell $> cd yamdi-1.4


shell $> gcc yamdi.c -o yamdi -O3 -Wall


shell $> mv yamdi /usr/bin/




注意我们编译的 yamdi 它起着重要的作用,因为一个FLV视频要能够拖拽播放,这个FLV在其 metadata中有关键桢的信息,但大部分FLV 是没有的。所以,我们要甬道开源的yamdi来为视频添加关键帧信息


命令为


shell $> yamdi -i input.flv -o out.flv




shell $> cd /usr/local/nginx/conf


shell $> cat nginx.conf


user  www;


worker_processes  1;




error_log  logs/error.log;




pid        logs/nginx.pid;


events {


   worker_connections  1024;


}


http {


   include       mime.types;


   default_type  application/octet-stream;


   sendfile        on;


   keepalive_timeout  65;


   server {


       listen       80;


       server_name  localhost;


       root    /var/www;


       index   index.html;




       charset utf-8;


###   重要部分


       location ~ \.flv {


           flv;


       }






       error_page   500 502 503 504  /50x.html;


       location = /50x.html {


           root   html;


       }


   }




shell $> mkdir -p /var/www


shell $> cd /var/www


shell $> cat index.html


<html>


<script type="text/JavaScript" src="swfobject.js"></script>


<head>


<script type="text/JavaScript">






/* <![CDATA[ */


function createPlayer() {




var flashvars = {




file:"video.flv",




type:"http",




image:"preview.jpg",




autostart:"false",




streamer:"start"




}




var params = {




allowfullscreen:"true",




allowscriptaccess:"always"




}




var attributes = {




id:"player1",




name:"player1"




}


swfobject.embedSWF("player.swf", "placeholder1", "320", "196", "9.0.115", false, flashvars, params, attributes);




}


/* ]]> */


</script>


</head>


<body onload="createPlayer();">




<div id="placeholder1"></div>


</body>


</html>




####重要部分`就是黄色字体部分,


#### type参数为 "http",是表明了http方式播放、访问


#### streamer 参数为 “start,这个参数用于传递给服务器从特定的关键开始播放,nginx编译了 flv 模块 所以是支持的。。




好了现在就 打开 IE 来测试吧``为了能更好的测试,你可以利用 nginx 限速功能,这样明显,或者你用一个比较大的FLV 来做测试,记得要用 yamdi 添加一下关键侦哦~




ps:现在我们的任务就是,用户上传各种格式的媒体文件,转换成FLV格式,然后在由yamdi 添加播放关键侦~~目前就是这样得了~~

媒体转换文章请看我写的另一篇文章:
ffmpeg支持常用的所有格式转换FLV
http://deidara.blog.51cto.com/400447/144681

参考:
http://linux.cn/home/space-3-do-blog-id-136.html



本文出自 “linuxer” 博客,请务必保留此出处http://deidara.blog.51cto.com/400447/235562
小鱼的淘宝店铺-多多支持哇

htp协议下flv,mp4拖动(php,nginx)

视频在线上传+队列转换FLV+水印+捉图+修复+获时+转3GP(API语言不限,开视频站必备!)
这段时间帮朋友做个播放器,本来以为很容易,结果弄了2个星期,最难的部分应该是拖动了,俺在网上查了一些资料,结果都不是很完整的,现在把它归纳一下,希望对大家有帮助。

  首先确定的是这种拖动必须是后台服务器支持,也可以自己写(php,c#,java)都可以(这种方法耗服务器很厉害),其实(php,c#,java)也就是根据客户端传过来的某个字节点或者时间点开始截流,传过来的这个字节点可不是随便乱传的,如果传的不对,那么你得到流将播放不了,那么这个字节点或者时间点在客户端怎么传过来的呢,这个字节点其实是flv文件的关键帧,后来的MP4(时间点)也支持H264格式了,呵呵,所以高清的视频也就很火现在。好的现在首先说,客户端得到视频关键帧的方法,以下是我测试用的:
package  
{

       import flash.display.Sprite;
   import flash.events.NetStatusEvent;
   import flash.events.SecurityErrorEvent;
   import flash.media.Video;
   import flash.net.NetConnection;
   import flash.net.*;
   import flash.events.Event;
       import flash.utils.ByteArray;

   public class NewClass2 extends Sprite {
               private var videoURL:String = "http://v.quacor.com/flv/cheshi3.mp4";
//private var videoURL:String = "http://61.135.205.171/flv/cheshi2.flv?start=关键帧";//239.934,319257.08736569224

               private var connection:NetConnection;
       private var stream:NetStream;
               private var URLstream:URLStream;
               private var video:Video;
               private var request:URLRequest ;
               //private var request:URLRequest ;

       public function NewClass2() {
           connection = new NetConnection();
           connection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
           connection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
           connection.connect(null);
                       //trace(7660063 / 239.934);
       }

       private function netStatusHandler(event:NetStatusEvent):void {
       }
               private function enter_frame(e:Event):void {
                       var _loading:int= Math.floor(stream.bytesLoaded / stream.bytesTotal * 100);
                       //trace(stream.bytesLoaded+"   "+stream.bytesTotal);
                       if (stream.bytesLoaded == stream.bytesTotal) {
                               trace("[Stream]加载完成    "+"   "+stream.bytesLoaded+"   "+stream.bytesTotal);
                               removeEventListener(Event.ENTER_FRAME, enter_frame);
                               //video.attachNetStream(stream);
                               //stream.seek(0);
                               //stream.togglePause();
                               //dispatchEvent(new StreamEvent(StreamEvent.LoadCompletion,[_url,type]));
                       }
               }

       private function securityErrorHandler(event:SecurityErrorEvent):void {
           trace("securityErrorHandler: " + event);
       }

       private function connectStream():void {

           stream = new NetStream(connection);
           stream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
stream.client = new CustomClient();//注意这里
           video = new Video();
                       stream.bufferTime = 1;
           video.attachNetStream(stream);
                       //trace("[time]   " + stream.time+"      "+stream.currentFPS);
           stream.play(videoURL);
           addChild(video);
                       //trace(numChildren);
                       addEventListener(Event.ENTER_FRAME, enter_frame);
                       //trace("[Stream]加载完成    "+"   "+stream.bytesLoaded+"   "+stream.bytesTotal);
       }

               private function httpLoad():void {
                       request = new URLRequest(videoURL);
                       URLstream = new URLStream();
                       //URLstreamrequest
                       //request.
                       //request.method="
               }                
   }        
}

class CustomClient {
               public function onMetaData(info:Object):void {
                       trace("metadata: duration=" + info.duration + " width=" + info.width + " height=" + info.height + " framerate=" + info.framerate);
                       trace("info");
trace(info.keyframes.filepositions);//关键帧
               }
       }

    那么是不是所有的视频都有framerate标签呢,当然不是啦,是要经过处理的,那么服务器端是怎么处理的呢:
      服务器端我用的是nginx,本人痛苦的经历认定,在XP下用不了,在linx下才起作用。
      好的,那我就先介绍nginx怎么做的:
    http://wiki.nginx.org/NginxModules#FLV
    http://h264.code-shop.com/trac/w ... ming-Nginx-Version2
     就是这2个模块在工作,其实这应该是服务器管理员的工作了,我们不可以不管的,但是俺也会把这东西怎么用写出来。。。。。

    快要到吃饭时间了,呵呵,还有好多没写!!!
    待续************

    来源:http://bbs.9ria.com/thread-34176-1-1.html
    小鱼的淘宝店铺-多多支持哇

    lighttpd中使用mod_flv_streaming+flowplayer模块实现拖动

    视频在线上传+队列转换FLV+水印+捉图+修复+获时+转3GP(API语言不限,开视频站必备!)

    lighttpd安装配置
    下载: http://www.lighttpd.net/download
    ./configure –prefix=/jeffrey/app/lighttpd-1.4.19 && make && make install
    mkdir /jeffrey/app/lighttpd-1.4.19/conf/
    mkdir /var/log/lighttpd
    cp doc/lighttpd.conf /jeffrey/app/lighttpd-1.4.19/conf/
    vi /jeffrey/app/lighttpd-1.4.19/conf/lighttpd.conf
    server.modules = (
    …..
    “mod_access”,
    “mod_flv_streaming”,
    …….)
    flv-streaming.extensions = ( “.flv” )
    /app/lighttpd-1.4.19/sbin/lighttpd -f /app/lighttpd-1.4.19/conf/lighttpd.conf
    注: 简单修改一下 自带的doc/rc.lighttpd文件,就可以作服务控制脚本了
    flowplayer播放器
    下载: http://flowplayer.org/
    将代码放入lighttpd的webroot目录下,并修改相应html代码,
    具体可参照http://flowplayer.org/player/configuration.html
    小鱼的淘宝店铺-多多支持哇

    FLV/MP4视频文件、FMS实时流播放器的制作技术详解(附AS2/AS3源文件)

    视频在线上传+队列转换FLV+水印+捉图+修复+获时+转3GP(API语言不限,开视频站必备!)
    前期可视化制作步骤:

    第一步:新建一个空FLASH文档,在库面板的弹出菜单中选择"新建视频"建立一个视频元件;


    第二步,在弹出的对话框中选中“视频(受AS控制)”一项,点击确定完成新建;


    第三步:将视频元件拖到舞台上,匹配场景的宽高;并命实例名:“myVideo”


    第四步:新建拖动定位条组件。新建元件->用矩形工具画一个宽400,高8的深红色长方条->在元件中新建一层(居上),将矩形复制粘贴到新建层的当前位置,颜色改为红色->按F8将矩形再转换成元件,命实例名为“progresslayer”


    第五步:返回主场景,将进度条元件拖入,命实例名为“panbar”;


    第六步:制作一个播放暂停按钮元件,拖入舞台后命实例名为:“btn_playpause”;







    AS编写关键点:

    1、播放FMS实时视频流时,要将NetConnection对象链接到视频流服务器,比如:nc.connect("rtmp://streaming.cctvpic.com/vod/");

    2、FMS实时视频可以用NetStream.seek(时间)方法直接任意定位;

    3、FLV自由定位需要视频服务器的支持,(现在各大视频网站都支持FLV自由定位),在等到视频数据时(NetStream.onMetaData),用“视频对象.keyframes.filepositions”属性获取FLV关键帧列表并赋予一个数组,以备拖动定位时调用,自由定位时使用:NetStream.play(FLV视频地址?start=关键帧),start后接的必须是FLV的关键帧,否则是不能播放的。










    //普通FLV(MP4)播放器的AS简化代码:<br /> <br /> var nc:NetConnection = new NetConnection(); //新建网络连接对象“nc”<br /> nc.connect(null); //因为不是实时视频流,没有服务器,因而创建一个空连接<br /> var ns:NetStream = new NetStream(nc); //新建网络视频流对象“ns”, 并将它绑定到网络连接对象“nc”<br /> myVideo.attachVideo(ns); //将视频流引入到舞台上的视频元件“myVideo”<br /> myVideo.smoothing = true; //设置视频元件的“平滑”属性<br /> function videostate(){panbar.progresslayer._xscale = (ns.time/duration)*100;Math.abs(ns.time-duration)<0.5?ns.seek(0):null;} <br /> //播放过程中指示播放进度的功能函数,同时检测视频是否播放完毕,完毕则重新开始<br /> ns.onMetaData = function(obj) { //获得视频数据时,<br /> duration = Math.floor(obj.duration); //提取视频总长度值<br /> setInterval(videostate, 300); //设置每0.3秒调用一次播放进度指示函数以时刻刷新进度指示<br /> btn_playpause.onRelease = function(){ns.pause()}; //为“暂停/播放”按钮添加实现其功能的代码<br /> panbar.onRelease = function() { ns.seek((this._xmouse/this._width)*duration)};<br /> };//上面一行就是用户拖动或者点击播放进度条进行定位时,实现在缓冲区内改变播放头位置的功能代码。<br /> ns.play(flvurl="http://image.hnol.net/c/swf/2010-06/07/13/20100607135239471-2276736.swf");<br /> //上面一行代码的意思是:将FLV地址赋于变量“flvurl”以备用户拖动进度条定位视频时用,并用视频流对象“ns”开始播放这个FLV视频。<br /> //用户自由定位FLV(MP4)播放器的AS简化代码:<br /> <br /> var nc:NetConnection = new NetConnection(); //新建网络连接对象“nc”<br /> nc.connect(null); //因为不是实时视频流,没有服务器,因而创建一个空连接<br /> var ns:NetStream = new NetStream(nc); //新建网络视频流对象“ns”, 并将它绑定到网络连接对象“nc”<br /> myVideo.attachVideo(ns); //将视频流引入到舞台上的视频元件“myVideo”<br /> myVideo.smoothing = true; //设置视频元件的“平滑”属性<br /> function videostate() { panbar.progresslayer._xscale = (ns.time/duration)*100 } //播放过程中指示播放进度的功能函数<br /> ns.onMetaData = function(obj) { //获得视频数据时,<br /> duration = obj.duration; //提取视频总长度值<br /> setInterval(videostate, 1000); //设置每秒钟调用一次播放进度指示功能函数以时刻刷新进度指示<br /> flvkeyframelst = obj.keyframes.filepositions; //获取FLV关键帧列表数组,以备拖动定位时调用<br /> btn_playpause.onRelease = function(){ns.pause()}; //为“暂停/播放”按钮添加实现其功能的代码<br /> panbar.onRelease = function() { ns.play(flvurl+"?start="+flvkeyframelst[Math.floor(flvkeyframelst.length*(this._xmouse/this._width))])};<br /> }; //上面一行就是用户拖动或者点击播放进度条进行自由定位时,实现其功能的关键语句。<br /> var sina:XML=new XML(); //新建一个XML对象,用以加载XML播放列表,从中获取FLV地址<br /> sina.ignoreWhite=true; //指定这个XML对象忽略空格<br /> sina.onLoad=function(success){ns.play(flvurl=this.childNodes[0].childNodes[5].childNodes[2].childNodes[0].nodeValue)};<br /> //上面一行代码的意思是:播放列表载入时解析出FLV地址,赋于变量“flvurl”以备用户拖动进度条定位视频时用,<br /> //并用视频流对象“ns”开始播放这个FLV视频。<br /> sina.load("http://v.iask.com/v_play.php?vid=32682154"); //加载视频编号为“32682154”的视频节目的播放列表,以启动全部代码。<br /> //FMS-实时视频流播放器的AS简化代码:<br /> <br /> var nc:NetConnection = new NetConnection(); //新建网络连接对象“nc”<br /> nc.connect("rtmp://streaming.cctvpic.com/vod/"); //将“nc”连接到视频服务器<br /> var ns:NetStream = new NetStream(nc); //新建网络视频流对象“ns”, 并将它绑定到网络连接对象“nc”<br /> myVideo.attachVideo(ns); //将视频流引入到舞台上的视频元件“myVideo”<br /> myVideo.smoothing = true; //设置视频元件的“平滑”属性<br /> ns.play("mp4:v/2010/03/16/9c672acb32e0462d1f9b0f8cbc9a8a3c_h264418000nero_aac32.mp4");//开始播放视频流文件<br /> btn_playpause.onRelease = function(){ns.pause()}; //为“暂停/播放”按钮添加实现其功能的代码<br /> panbar.onRelease = function(){ns.seek((this._xmouse/this._width)*3668)}; //为“视频任意定位条”元件添加实现其功能的代码<br />






    源文件下载:


    1、普通FLV播放器:https://www.sugarsync.com/pf/D997337_381516_79422


    2、FMS-实时视频流客户端播放器:https://www.sugarsync.com/pf/D997337_381516_79436


    3、任意定位FLV播放器:https://www.sugarsync.com/pf/D997337_381516_79424


    4、(AS3/FlashCS4)普通FLV播放器:https://www.sugarsync.com/pf/D997337_381516_70590


    5、(AS3/FlashCS4)FMS-实时视频流客户端播放器:https://www.sugarsync.com/pf/D997337_381516_70598


    6、(AS3/FlashCS4)任意定位FLV播放器:https://www.sugarsync.com/pf/D997337_381516_70596





    参考文献:


    1、htp协议下flv,mp4拖动(php,nginx) : http://bbs.actionscript3.cn/thread-34176-1-1.html


    2、lighttpd对flv视频文件的拖动一种变形:http://www.360doc.com/content/10/0603/16/11586_31070841.shtml


    3、FMS3系列(三):基于FMS的流媒体播放程序(AS3):http://www.chinaz.com/design/video/042a41162009.html

    来源:http://bbs.voc.com.cn/topic-2379855-1-1.html
    本帖最后由 张小鱼 于 2010-11-09 08:37 编辑
    小鱼的淘宝店铺-多多支持哇

    用 lighttpd 建立 FLV 影片網站

    视频在线上传+队列转换FLV+水印+捉图+修复+获时+转3GP(API语言不限,开视频站必备!)
    用 lighttpd 建立 FLV 影片網站
    • 影片轉 FLV 檔, 並製作影片截圖
    • 在 lighttpd web server 使用加密網址, 隱藏實際影片路徑
    • 免費的 Flash FLV Player

    影片轉檔
    安裝 ffmpeg
    安裝 flvtool2
    影片轉 FLV 檔
    ffmpeg -i myvideo.wmv -s 320×240 -r 15 -b 128k -ar 22050 -ab 32k -ac 2 -f flv myvideo.flv

    參數說明
    -iinput file name
    -sset video frame size
    -rset video frame rate
    -bset video bit rate
    -arset audio sampling rate
    -abset audio bit rate
    -acset number of audio channels
    -fforce format

    加入 metadata
    flvtool2 -U myvideo.flv myvideo.flv

    製作影片截圖
    #截錄第一個畫面 (frame)
    ffmpeg -i
    myvideo.mpg -vframes 1 -s 320×240 -f image2myvideo.jpg
    #截錄第 18.5 秒的畫面
    ffmpeg -i myvideo.mpg -ss 18.5 -vframes 1 -s 320×240 -f image2myvideo.jpg

    參數說明
    -iinput file name
    -vframesset the number of video frames to record
    -sset frame size
    -ssset the start time offset
    -fforce format
    -yoverwrite output files

    Ref: [DB75]: Using FFmpeg to Extract PNG Files

    建置影片播放平台
    環境:
    • lighttpd 1.4.11 以上
    • DocumentRoot: /var/www/html

    lighttpd 環境設定
    安裝 lighttpd
    vi lighttpd.conf
    #注意順序: mod_secdownload 須在 mod_flv_streaming 之上
    server.modules = (
       …
       “mod_secdownload”,
       “mod_flv_streaming”,
       …
    )
    flv-streaming.extensions = ( “.flv” )
    secdownload.secret = “your_secret
    secdownload.document-root = “/var/www/videos/#.flv 存放的位置
    secdownload.uri-prefix = “/dl/#編碼後的虛擬路徑
    secdownload.timeout = 120
    #Ref: LightTPD Docs — Module: mod_secdownload

    mkdir /var/www/videos :: 將 .flv 檔案置入 /var/www/videos
    /etc/init.d/lighttpd restart :: 重新啟動 lighttpd

    取用加密路徑
    #前置作業
    <?php
    $secret = “your_secret”;
    $uri_prefix = “/dl/”;
    # filename
    $f = “/test.flv”;
    # current timestamp
    $t = time();
    $t_hex = sprintf(“%08x”, $t);
    $m = md5($secret.$f.$t_hex);
    ?>
    #輸出加密路徑 (output: /dl/xxxxxxxx…)
    <?php printf(‘%s%s/%s%s’, $uri_prefix, $m, $t_hex, $f, $f); ?>
    JW FLV Player 使用範例
    <?php
    $secret = “your_secret”;
    $uri_prefix = “/dl/”;
    $f = “/myvideo.flv”;
    $t = time();
    $t_hex = sprintf(“%08x”, $t);
    $m = md5($secret.$f.$t_hex);
    ?>
    <html>
    <head>
    <script type=”text/javascript” src=”swfobject.js”></script>
    </head>
    <body>
    <p id=”player1″><a href=”http://www.adobe.com/go/getflashplayer”>Get the Flash Player</a> to see this player.</p>
    <script type=”text/javascript”>
    var s1 = new SWFObject(“flvplayer.swf”,”single”,”300″,”240″,”7″);
    s1.addParam(“allowfullscreen”,”true”);
    s1.addVariable(“file”,”<?php printf(‘%s%s/%s%s’, $uri_prefix, $m, $t_hex, $f, $f); ?>”);
    s1.addVariable(“image”,”myvideo.jpg”);
    s1.addVariable(“displayheight”,”240″);
    s1.write(“player1″);
    </script>
    </body>
    </html>
    JW FLV Player 相關網頁

    Free Flash Video Players

    參考資料

    相關網頁
    您还可能感兴趣的内容
    小鱼的淘宝店铺-多多支持哇

    相关网址收集

    视频在线上传+队列转换FLV+水印+捉图+修复+获时+转3GP(API语言不限,开视频站必备!)
    http://www.linuxany.com/archives/category/application/nginx
    http://www.linuxany.com/archives/category/application/lighttpd

    LightTPD v1.4.18.1
    http://down.chinaz.com/soft/14022.htm

    ================================================
    LightTPD 1.4.26 For Windows


    很好的服务器,速度很快,以前只有Linux版本,这个是Windows版本,完全兼容Windows Server 2003(已测试)
    支持服务安装
    设置文件有点问题,换行符变成了方块
    下载地址:
    exe版本:
    http://en.wlmp-project.net/downloads.php?cat=lighty&type=ssl&format=exe&mirror=google
    http://en.wlmp-project.net/downloads.php?cat=lighty&type=ssl&format=exe&mirror=dtech
    http://en.wlmp-project.net/downloads.php?cat=lighty&type=ssl&format=exe&mirror=sze
    zip版本:
    http://en.wlmp-project.net/downloads.php?cat=lighty&type=ssl&format=zip&mirror=google
    http://en.wlmp-project.net/downloads.php?cat=lighty&type=ssl&format=zip&mirror=dtech
    http://en.wlmp-project.net/downloads.php?cat=lighty&type=ssl&format=zip&mirror=sze



    本帖最后由 张小鱼 于 2010-11-09 08:56 编辑
    小鱼的淘宝店铺-多多支持哇

    实现在Windows下安装Lighttpd

    视频在线上传+队列转换FLV+水印+捉图+修复+获时+转3GP(API语言不限,开视频站必备!)

    实现在Windows下安装Lighttpd
    逛javaeye时,看到大牛们推荐使用lighttpd Web服务器,如是下载下来安装尝试了一把。
      大致经历一下几个步骤:
      1、windows系统下需要cygwin 环境的支持,如是先下载安装cygwin。
      2、下载lighttpd源代码并解压(from http://trac.lighttpd.net/)
      3、在cygwin 环境下进入lighttpd的下载后保存的目录,依次执行以下命令:
        1> ./configure –prefix=C:/lighthttd
        2> make
        3> make install
        如无报错,则安装成功。
      4、在C:/lighthttd下建一个目录etc 用于存放配置文件,新建一个配置文件lighttpd.conf,示例配置如下:
    server.document-root = "D:/Itang_home/MyPics/100CANON"
    server.port = 8080
    mimetype.assign = (
       ".html" => "text/html",
       ".txt" => "text/plain",
       ".jpg" => "image/jpeg",
       ".png" => "image/png"
    )
      5、windows命令行环境下进入C:/lighthttd/sbin目录,运行 lighttpd -t -f ..\etc\lighttpd.conf 测试是否安装配置成功。 -----我的版本是 lighttpd 是在根目录下的C:\AppServ\LightTPD
      此时会提示cygwin1.dll 等lighttpd 运行时依赖cygwin 的DLL不存在,那么需要到cygwin 的bin目录找到相应的dll拷贝到C:/lighthttd/sbin目录下,再运行 lighttpd -t -f ..\etc\lighttpd.conf 直到出现提示 "Syntax OK" ,则表示安装配置成功。
      6、运行lighttpd -D -f ..\etc\lighttpd.conf启动Web服务器。
         -----我的版本是 这句报“dlopen() failed for: /usr/local/lib/mod_indexfile.dll No such file or directory”错误
         -----解决方法:lighttpd -D -f etc\lighttpd-inc.conf -m lib
         -----运行:lighttpd -h 看到了帮助信息。原来-m选项是用来调整module的目录位置的。
      7、浏览器里访问http://localhost:8080/IMG_0047.JPG,显示图片,大功告成。
      在进程管理器查看启动后内存仅仅占用4M,挺精巧的。访问速度也挺快。以后多看看官方文档,结合实际应用多折腾一下它。如有可能将其应用到实际项目中去。
      注:示例只是配置了对静态资源的访问。后续如何相关应用(比如结合tomcat,ruby等) 则需要看官方文档(http://trac.lighttpd.net/trac/wiki/)。
    ==========================================================
    Windows下安装lighttpd 2008-04-18 20:37
    操作环境:Windows Server 2003
    目的:作为web.py开发的Web Server
    01、下载lighttpd,官方网址是:http://www.lighttpd.net/
       我下载到的版本是:lighttpd-1.4.18.tar.gz
    02、解压到:C:\lighttpd-1.4.18
    (文件都放到C盘下面是个很不好的习惯)
    03、选择开始—所有程序—Cygwin—Cygwin Bash Shell
    04、输入“cd c:”,然后回车,来到C盘下。
       输入“ls”可以看到C盘下有哪些文件和目录。
    (输入“ls”等同于“dir”)
    05、接着输入“cd lighttpd-1.4.18”,然后回车,
       来到lighttpad的安装文件目录。
    06、输入:“./configure -prefix=C:/lighttpd
       很慢,然后返回错误:no acceptable C ompiler found in $PATH
    07、找到原因了!先在Windows的环境变量的PATH中添加“C:\cygwin\bin”
       方法:我的电脑—右键—属性—高级—环境变量—PATH
    08、又失败了~~
    09、又找到原因了!!
       需要下载gcc的开发包(package)。
       重新下载Cygwin,在“Select Packages”(选择包)的页面中,
       点击“Devel”(开发)前面的加号,出来一个列表,
       然后选择:binutils、gcc(会自动选择相应的包)、gcc-mingw、
       然后重新安装:选择“Devel”下面的所有项。
    10、然后点击桌面的“Cygwin”进入。
       输入“gcc --version”,
       我能看到一堆文字“... 3.4.4 ...”等等。你能看到吗?
    11、好了,重新进入lighttpd解压缩文件后的目录,
       “cd C:\lighttpd-1.4.18”,之后回车
    12、输入命令:“./configure --prefix=C:/lighttpd”
       很长时间~~~
       然后,看到错误:pcre-devel not found
    13、重复第09步,选择“Devel”下面的“pcre-devel”。
    14、重复第11、12步,然后出现错误
       “zlib-headers and/or libs where not found”,
       然后安装“Libs”下面的“zlib-headers”。
    15、重复第11、12步,然后出现错误
       “bzip2-hearders and/or libs where not found”,
       然后安装“Utils”下面的“bzip2”(1.0.5.1)。
       请同时安装“Mingw”下面的全部。
    16、重复第11、12步。
       成功了,看见“Plugins ... Features ...”
    17、输入“make”之后回车。
       看见“make: command not found”
       回到Cygwin下面安装“Devel”下面的“make”。
    18、安装之后重复第17步。
       屏幕出现一堆文字……
       好长时间之后,出现“错误1 ... 错误2 ...”。
       两个错误都是“Leaving directory...”类型的错误。
    19、可耻的失败了~~~
    20、怀疑是目录的错误。
       于是尝试:“./configure”,这个应该是安装到默认目录,是不是?
       然后再“make”。
    21、失败。
    22、......
    23、重新去下载lighttpd的windows版本。
       网址是:http://en.wlmp-project.net/downloads.php?cat=lighty
    24、我下载了zip版本,文件名是:LightTPD-1.4.19-1-Win32-SSL.zip。
    25、解压缩,在命令行下运行lightTPD.exe。
       报错:No configuration available.
    26、创建lighttpd.conf。
       内容如下:
    server.document-root = "F:\Misc\pycode\lighttpd\LightTPD"
    server.port = 8080
    mimetype.assign = (
    ".html" => "text/html",
    ".txt" => "text/plain"
    )
    27、然后运行:lighttpd.exe -f lighttpd.conf
       报错:dlopen() failed for: /usr/local/lib/mod_indexfile.dll
             No such ifle or directory
    28、......
    29、重新从:http://en.wlmp-project.net/downloads.php?cat=lighty
       下载exe版本,文件名是:LightTPD-1.4.19-1-Win32-SSL.exe
    30、直接双击安装,安装目录为:C:\Program Files\LightTPD
       安装结束后直接打开文件夹。
    31、其实和zip版本的是一样的。
    32、......
    33、重新回到zip版本。
    34、运行:lighttpd.exe -f conf\lighttpd-inco.conf
       得到和27一样的错误。
    35、运行:TestMode.bat
       在浏览器中输入:http://127.0.0.1/
       可以看到成功的测试页面。
    36、我找到了mode_indexfile.dll文件,就在lib目录下面。
    37、我试着把文件夹整个复制到C:\LightTPD下面,但是还是不行。
    38、我怀疑是打包exe的人就是把目录设置为/usr/local了,所以……就只能这样了。
    39、运行:lighttpd -h
       看到了帮助信息。
       原来如此呀!!!
    40、-m选项是用来调整module的目录位置的。
    41、于是输入:lighttpd -f conf\lighttpd-inc.conf -m lib
       服务器启动。
       访问:http://127.0.0.1/
       得到“404 - Not Found”的错误。
    42、用Ctrl+Break可以终止服务器的运行。
       (用Ctrl+C好像有点问题)
    43、至此,算是安装完毕了。
    ===================================================
    WLMP[windows+lighttpd+mysql+php(fastcgi)]环境的搭建  2009-04-08
         PHP不是我的最爱,但java更累,ruby、python优美是很优美,但目前来说不好找工作,PHP简单,而且PHP+Flex做出来的东西真的很Cool,所以决定以后主攻PHP+Flex。
        下面说下WLMP[windows+lighttpd+mysql+php(fastcgi)]环境的搭建,新手就来看下,高手就让路吧。为什么不是LAMP呢,因为只有一台电脑,有很多毕业论文的东西要在Windows上做,而且Linux和Windows切换来切换去有点麻烦,所以只好放弃在Ubuntu上搭建了;Apache大家都听多了,网上搭建的教程也多,腻了,听说lighttpd占内存少,性能高,所以换lighttpd来玩下,也很喜欢lighttpd的Logo(纸飞机)。
       windows: xp sp3
         lighttpd: LightTPD-1.4.22-1-Win32-SSL.exe
         下载地址:http://en.wlmp-project.net/downloads.php?cat=lighty
           mysql: mysql-5.0.77-win32.zip
         下载地址: http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-5.0.77-win32.zip/from/pick
             php:  php-5.2.9-1-Win32.zip
         下载地址: http://www.php.net/downloads.php
      phpMyAdmin: phpMyAdmin-3.1.3.1-all-languages.zip
          下载地址: http://www.phpmyadmin.net/home_page/downloads.php

        我在E盘建了个wlmp的文件夹,把lighttpd安装在这里,安装过程我就不说了,大家都会,安装好之后是E:\wlmp\LightTPD,然后安装MySQL,这个大家都会装了吧,安装好了是E:\wlmp\MySQL Server 5.0,再安装php,只要把php解压到指定目录就可以了,安装好之后是E:\wlmp\php,还要把php的目录E:\wlmp\php加到环境变量里,最后再在E:\wlmp里建个www的文件夹,把phpMyAdmin解压到里面,安装好之后是E:\wlmp\www\phpmyadmin。
         好了,都安装完毕之后就是配置问题了,这个是重点。
         首先配置lighttpd,参照http://redmine.lighttpd.net/wiki/lighttpd/TutorialLighttpdAndPHP
    配置在E:\wlmp\LightTPD\conf下的lighttpd-inc.conf文件, 找到server.document-root这行,
    改成server.document-root  = "E:/wlmp/www/"
    再找到server.upload-dirs 改成 server.upload-dirs = ( "E:/wlmp/LightTPD/tmp" )
    再找到fastcgi.server,改成 fastcgi.server             = ( ".php" =>  
                                  ( "localhost" =>  
                                    (  
                                         "host" => "127.0.0.1",  
                                         "port" => 521  
    #                                   "socket" => "TMP/php-fastcgi.socket",  
    #                                   "bin-path" => "PHP/php-cgi.exe"  
                                   )  
                                 )  
                                )  
    fastcgi.server             = ( ".php" =>
                                  ( "localhost" =>
                                    (
                                         "host" => "127.0.0.1",
                                         "port" => 521
    #                                   "socket" => "TMP/php-fastcgi.socket",
    #                                   "bin-path" => "PHP/php-cgi.exe"
                                   )
                                 )
                                )下面再修改lighttpd-srv.conf,找到server.errorlog和accesslog.filename,改成
    #定义lighttpd所在目录  
    var.root = "E:/wlmp/LightTPD"  

    ## where to send error-messages to  
    server.errorlog             = var.root + "/logs/lighttpd-srv.error.log"  

    #### accesslog module  
    accesslog.filename       = var.root + "/logs/lighttpd-srv.access.log"  
    #定义lighttpd所在目录
    var.root = "E:/wlmp/LightTPD"
    ## where to send error-messages to
    server.errorlog             = var.root + "/logs/lighttpd-srv.error.log"
    #### accesslog module
    accesslog.filename       = var.root + "/logs/lighttpd-srv.access.log"这样lighttpd的简单配置就完成了,下面再弄两个批处理,启动php-cgi、lighttpd和关闭php-cgi、lighttpd,之前要下
    一个RunHiddenConsole.exe,这个是用来隐藏黑乎乎的控制台(cmd)的,解压放到E:\wlmp\LightTPD下即可。
    下载地址: http://redmine.lighttpd.net/attachments/660/RunHiddenConsole.zip
    Start-LightTPD.bat
    @ECHO OFF  
    ECHO Starting PHP FastCGI...  
    RunHiddenConsole.exe ..\PHP\php-cgi.exe -b 127.0.0.1:521  
    ECHO Starting LightTPD...  
    ECHO.  
    lighttpd.exe -v  
    ECHO.  
    lighttpd.exe -f conf\lighttpd-srv.conf -m lib  
    PAUSE  
    @ECHO OFF
    ECHO Starting PHP FastCGI...
    RunHiddenConsole.exe ..\PHP\php-cgi.exe -b 127.0.0.1:521
    ECHO Starting LightTPD...
    ECHO.
    lighttpd.exe -v
    ECHO.
    lighttpd.exe -f conf\lighttpd-srv.conf -m lib
    PAUSE
     Stop-LightTPD.bat
    @ECHO OFF  
    ECHO Stopping LightTPD...  
    bin\process.exe -k lighttpd.exe >nul  
    ECHO Stopping PHP FastCGI...  
    bin\process.exe -k php-cgi.exe >nul  
    ECHO.  
    PAUSE  
    @ECHO OFF
    ECHO Stopping LightTPD...
    bin\process.exe -k lighttpd.exe >nul
    ECHO Stopping PHP FastCGI...
    bin\process.exe -k php-cgi.exe >nul
    ECHO.
    PAUSE
     下面来测试下,写个info.php丢到E:\wlmp\www下,
    phpinfo();双击Start-LightTPD.bat,启动php-cgi、lighttpd,然后在浏览器里输入地址http://127.0.0.1/info.php,看看是否成功。然后再配置php,在php的目录下找到php.ini-recommended,复制一份把名改为php.ini,找到extension_dir改为extension_dir = "E:/wlmp/php/ext",找到Windows Extensions,把自己需要的dll前面的“;”去掉,例如我的是extension=php_gd2.dll  
    extension=php_mbstring.dll   extension=php_mcrypt.dll   extension=php_mysql.dll   extension=php_pdo.dll  
    extension=php_gd2.dll
    extension=php_mbstring.dll
    extension=php_mcrypt.dll
    extension=php_mysql.dll
    extension=php_pdo.dll这样就OK了。
    写blog有点累呀!
    最后配置phpmyadmin,在phpmyadmin目录下找到config.sample.inc.php,复制一份改名为config.inc.php,
    找到$cfg['blowfish_secret'],改为$cfg['blowfish_secret'] = 'www';这里要说明的是config.inc.php中默认的是$cfg['Servers'][$i]['auth_type'] = 'cookie',就是说用到cookie,那$cfg['blowfish_secret']= ''得填点东西,这里我随便填了'www'。
    最最后就是测试了,上面已经启动了php-cgi、lighttpd,这里再启动mysql,在开始->运行->输入net start mysql,然后在浏览器里直接输入http://127.0.0.1/phpmyadmin/就可以了,输入mysql的账号和密码就OK。
    =========================================================
    Lighttpd php fastcgi Windows 安装
    其实安装Lighttpd不需要什么别的软件,去https://www.kevinworthington.com/?s=lighttpd下载编译好的win32版就好了(本人用的是zip包,exe版类似)。
    1.解压到任何目录(最好是英文目录,其他语言的没试过),如d:\inetpub\LightTPD;我的系统环境:Vista32 中文版,PHP5.2.3和5.2.4,mysql 5.0.45;
    以下的conf、bat和RunHiddenConsole.exe可以在这里下载:http://www.box.net/shared/vfvqyjhday
    2.打开conf文件夹,将lighttpd-inc.conf备份;
    3.修改这个配置文件,我的配置如下(精简过的)#后面的是注释,详细注释前往官方文档http://trac.lighttpd.net/trac/wiki/Docs及本论坛的好帖http://www.lighttpd.net.cn/showthread.php?t=11217
    #定义lighttpd所在目录
    var.root = "D:/Inetpub/Lighttpd"
    #启用的modules(详细见原版lighttpd-inc.conf)
    server.modules              = (
    "mod_access",
    "mod_cgi",
    "mod_accesslog",
    "mod_alias",
    #"mod_fastcgi"
    )
    #服务的目录
    server.document-root        = "D:/Inetpub/www/"
    server.errorlog             = var.root + "/logs/lighttpd.error.log"
    server.upload-dirs          = (var.root + "/tmp")
    accesslog.filename          = var.root + "/logs/access.log"
    #默认首页
    index-file.names            = ( "index.php", "index.html", "index.htm" )
    #使用php
    static-file.exclude-extensions = ( ".php" )
    #使用CGI php的定义
    cgi.assign                 = ( ".php"  =>  "D:/Inetpub/php/php-cgi.exe")
    #使用fastcgi PHP(win版下可使用)
    #fastcgi.server = ( ".php" =>( "localhost" =>("host" => "127.0.0.1","port" => 521 )))
    mimetype.assign             = (
     ".pdf"          =>      "application/pdf",
     ".sig"          =>      "application/pgp-signature",
     ".spl"          =>      "application/futuresplash",
     ".class"        =>      "application/octet-stream",
     ".ps"           =>      "application/postscript",
     ".torrent"      =>      "application/x-bittorrent",
     ".dvi"          =>      "application/x-dvi",
     ".gz"           =>      "application/x-gzip",
     ".pac"          =>      "application/x-ns-proxy-autoconfig",
     ".swf"          =>      "application/x-shockwave-flash",
     ".tar.gz"       =>      "application/x-tgz",
     ".tgz"          =>      "application/x-tgz",
     ".tar"          =>      "application/x-tar",
     ".zip"          =>      "application/zip",
     ".mp3"          =>      "audio/mpeg",
     ".m3u"          =>      "audio/x-mpegurl",
     ".wma"          =>      "audio/x-ms-wma",
     ".wax"          =>      "audio/x-ms-wax",
     ".ogg"          =>      "application/ogg",
     ".wav"          =>      "audio/x-wav",
     ".gif"          =>      "image/gif",
     ".jpg"          =>      "image/jpeg",
     ".jpeg"         =>      "image/jpeg",
     ".png"          =>      "image/png",
     ".xbm"          =>      "image/x-xbitmap",
     ".xpm"          =>      "image/x-xpixmap",
     ".xwd"          =>      "image/x-xwindowdump",
     ".css"          =>      "text/css",
     ".html"         =>      "text/html",
     ".htm"          =>      "text/html",
     ".js"           =>      "text/javascript",
     ".asc"          =>      "text/plain",
     ".c"            =>      "text/plain",
     ".cpp"          =>      "text/plain",
     ".log"          =>      "text/plain",
     ".conf"         =>      "text/plain",
     ".text"         =>      "text/plain",
     ".txt"          =>      "text/plain",
     ".dtd"          =>      "text/xml",
     ".xml"          =>      "text/xml",
     ".mpeg"         =>      "video/mpeg",
     ".mpg"          =>      "video/mpeg",
     ".mov"          =>      "video/quicktime",
     ".qt"           =>      "video/quicktime",
     ".avi"          =>      "video/x-msvideo",
     ".asf"          =>      "video/x-ms-asf",
     ".asx"          =>      "video/x-ms-asf",
     ".wmv"          =>      "video/x-ms-wmv",
     ".bz2"          =>      "application/x-bzip",
     ".tbz"          =>      "application/x-bzip-compressed-tar",
     ".tar.bz2"      =>      "application/x-bzip-compressed-tar"
    )
    #虚拟目录
    alias.url = ( "/ma/" => "D:/Inetpub/ma/" )
    #侦听端口
    server.port                = 81
    mimetype.use-xattr        = "enable"
    #无首页是否列文件目录
    dir-listing.activate        = "enable"
    #服务器的版本好(好像是列目录时显示的)
    server.tag                 = "lighttpd/1.4.18i-win32"
    url.access-deny             = ( "~", ".inc" )
    $HTTP["url"] =~ ".pdf$" {
     server.range-requests = "disable"
    }
    4.写运行Lighttpd的批处理文件放在lighttpd的根目录下:
    运行CGI php:
    start_lighttpd - cgi.bat
    @ECHO OFF
    ECHO Starting lighttpd...
    #重点是这句,-m指定mod文件的位置(一般不需要修改),-f指定配置文件的位置
    LightTPD.exe -m lib -f conflighttpd.conf
    IF %errorlevel% GTR 0 (
     ECHO Starting lighttpd failed!
     PAUSE
    ) ELSE (
     ECHO Starting lighttpd succeed!
    )
    运行fastcgi php:
    a.先确保在conf中使用mod_fastcgi,和配置了fastcgi.server;
    b.start_lighttpd - fastcgi.bat,RunHiddenConsole.exe 在官方网站有下(也可以不使用,不过回留下一个cmd的窗口)
    @ECHO OFF
    ECHO Starting PHP FastCGI...
    #运行php-cgi.exe
    RunHiddenConsole.exe ..PHPphp-cgi.exe -b 127.0.0.1:521
    ECHO Starting LightTPD...
    ECHO.
    lighttpd.exe -v
    ECHO.
    lighttpd.exe -f etclighttpd.conf -m lib
    EXIT
    关闭Lighttpd:
    stop_lighttpd - cgi.bat
    @ECHO OFF
    ECHO Stoping lighttpd...
    binProcess -k LightTPD.exe
    ping 127.0.0.1 > NUL
    stop_lighttpd_fastcgi.bat
    @ECHO OFF
    ECHO Stopping LightTPD...
    binprocess.exe -k lighttpd.exe >nul
    ECHO Stopping PHP FastCGI...
    binprocess.exe -k php-cgi.exe >nul
    ECHO.
    EXIT
    重启Lighttpd:
    restart_lighttpd.bat
    @ECHO OFF
    CALL stop_lighttpd.bat
    CALL start_lighttpd.bat
    5.也可以去bin目录把lighttpd配置成windows的系统服务。
    备注:
    运行fastcgi模式的时候,可以把批处理改成这样,没有CMD窗口。
    这个编译过的lighttpd的配置文件被改成lighttpd-inc.conf了。所以下面要改一下。
    @ECHO OFF
    ECHO Starting PHP FastCGI...
    #运行php-cgi.exe
    RunHiddenConsole.exe ..PHPphp-cgi.exe -b 127.0.0.1:521
    ECHO Starting LightTPD...
    ECHO.
    lighttpd.exe -v
    ECHO.
    RunHiddenConsole.exe lighttpd.exe -f lighttpd-inc.conf -m lib
    EXIT
    小鱼的淘宝店铺-多多支持哇