• 3766 阅读
  • 15 回复

windows+lighttpd+php+flash cs3搭建随意拖放视频网站(1)-lighttpd的搭建

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

为什么选择lighttpd?因为它内部集成了支持flv文件随意拖放的功能,其他优点自己搜索吧,我记不住。
为什么选择window?我对linux不熟悉。
lighttpd For windows下载地址:
http://en.wlmp-project.net/downloads.php?cat=lighty
下载exe文件,安装后配置lighttpd:
打开lighttpd安装文件夹下conf文件夹,打开lighttpd-inc.conf文件,找到下面代码,按下面配置:

代码 复制 - 运行

server.modules              = ( 
                                "mod_access", 
                                "mod_accesslog", 
                                "mod_alias", 
#                               "mod_auth", 
                                "mod_cgi", 
#                               "mod_cml", 
                                "mod_compress", 
#                               "mod_dirlisting", 
#                               "mod_evasive", 
#                               "mod_evhost", 
#                               "mod_expire", 
#                               "mod_extforward", 
                                "mod_fastcgi", 
                                "mod_flv_streaming", 
#                               "mod_indexfile", 
#                               "mod_magnet", 
#                               "mod_mysql_vhost", 
#                               "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" 
                               )  



接着按下面配置:

代码 复制 - 运行

flv-streaming.extensions = (".flv")



这个放在上面配置文件的下面。
接着按下面配置:

代码 复制 - 运行

server.document-root        = "HTDOCS/"



网站目录默认是lighttpd安装文件夹下htdocs文件夹,也可以写成别的文件夹,不是在此目录,用绝对路径表示。
接着按下面配置:

代码 复制 - 运行

mimetype.assign             = ( 
  ".flv"          =>      "video/x-flv", 
  ".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" 
 )



注意第一行 ".flv"          =>      "video/x-flv", 如果不加,通过flash flv播放器访问会提示404错误,其实文件存在,偶不知是lighttpd服务器配置的原因还是window的原因,如果是IIS就不会提示这个错误。谁知道告诉我,不胜感激!
接着按下面配置:

代码 复制 - 运行

server.port                = 80



注意这个监听端口,如果你的IIS运行着且占用了该端口,注意更换其他的,也可以停掉IIS,此处用80。总之一点,此处配置的端口别的程序不能正在使用中。
接着配置对PHP的支持:

代码 复制 - 运行

cgi.assign                  = ( ".php" => "D:/php/php-cgi.exe")



找到上面代码位置,换成上面代码的样子,我不用多说了吧。前提是先安装PHP。下一部分说一下PHP的配置,也是学习别人的。

来源:http://blog.csdn.net/aicoder/archive/2009/10/10/4650785.aspx
小鱼的淘宝店铺-多多支持哇

windows+lighttpd+php+flash cs3搭建随意拖放视频网站(2)-PHP配置

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

下载PHP,用非安装版就行。解压到指定文件夹。打开安装文件夹下php.ini-dist,按照下面配置,并保存为php.ini在php的安装根目录。

代码 复制 - 运行

short_open_tag = On  
display_errors = On  
doc_root = “C:\Progra~1\LightTPD\htdocs” 



doc_root是lighttpd的web目录。
如果php需要访问数据库和其他字符串加密处理,还需要如下配置:

代码 复制 - 运行

extension=php_gd2.dll 
extension=php_ldap.dll 
extension=php_mbstring.dll 
extension=php_mcrypt.dll 
extension=php_mssql.dll 
extension=php_mysql.dll 
extension=php_mysqli.dll



最后打开lighttpd安装目录下的bin文件夹,双击运行Service-Install.exe,将lighttpd注册为服务。
在web目录下编写一个php文件,内容是<? phpinfo();?>,保存运行,检测是否安装成功。
严重注意:PHP文件头部加上:header('Status: 200');否则通过flash访问该页面或返回404错误,但是通过浏览器访问正常,偶不明白,谁知道谁告诉我,不胜感激!
FROM:http://blog.csdn.net/aicoder/archive/2009/10/10/4650924.aspx
小鱼的淘宝店铺-多多支持哇

FLV播放器拖动处理

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

2008-04-24 22:07
  • Fabian Topfstedt has done this for us. Get his player and place it in the webfolder. To use the player you have include this piece of HTML: <object    classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"    codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0"    width="336"    height="297">    <param name="movie" value="scrubber.swf?file=/movie.flv" />    <param name="quality" value="high" />    <embed src="scrubber.swf?file=/movie.flv"      quality="high"      pluginspage="http://www.macromedia.com/go/getflashplayer"     type="application/x-shockwave-flash"      width="336"      height="297"></embed>  </object>
[*]for the RMP you can use a simple rewrite to get it working with mod_flv_streaming
1.4.11 got a new module for streaming Flash movie files called mod_flv_streaming. This module allows you to seek in FLV files using the high performance infrastructure of lighttpd.
The idea is simple and explained and implemented on ‘Streaming’ flv video via PHP, take two at http://www.flashcomguru.com/
But instead of streaming the file through PHP we do it in the webserver. The module expects a request for the URL which matches flv-streaming.extensions and can handle a ’?start=

’ as part of the request.
The information to pass into the ‘start’ parameter is extractly by the flash-player from the meta-data of the flv-files. The meta-data can be setup with flvtool2
Now I leave it to you to combine this with mod_secdownload to create a flv-streaming server for free with deep/hot linking protected movies.
server.modules = (   ...,  "mod_secdownload", ## optional  "mod_flv_streaming",  ...)flv-streaming.extensions = ( ".flv" )
Take the flash-player from flashcomguru and adjust the URL in the player and try yourself.



flv streaming

High performance flv-streaming with lighttpd is possible since lighttpd 1.4.11.
With lighty you can easily handle 10000 parallel downloads of your movies including protection against hot-linking with mod_secdownload. This is basicly all you need to build the free video.google.com for yourself.
Just add this you your lighttpd.conf and restart the server:
server.modules = ( ..., "mod_flv_streaming", ... )flv-streaming.extensions = ( ".flv" )
Players
mod_flv_streaming
expects you to fetch the flv-file with a GET parameter if you want to do a seek into the file.
encoding flash movies
As example I took a video from Ryan Wiebers page about Saber-Effects.
The .mov file was converted into a .flv with the help of ffmpeg and indexed with flvtool2.
$ wget http://ryanw.michaelfrisk.com/ryan-w/clips/kid_fight.mov$ ffmpeg -i kid_fight.mov kid_fight.flv$ flvtool2 -U kid_fight.flvLinks
小鱼的淘宝店铺-多多支持哇

flv视频拖放技术

视频在线上传+队列转换FLV+水印+捉图+修复+获时+转3GP(API语言不限,开视频站必备!)
附件1:flv视频播放相关资料与软件
about-flv.rar (您是游客您没有权限下载)

附件下载:
FLVMDI-CN.rar 690.42KB
f4e001449c6e406bcd4088d7e77d9ace20090821055116.rar (您是游客您没有权限下载)


http://blog.lighttpd.net/articles/2006/03/09/flv-streaming-with-lighttpd
http://www.flashcomguru.com/index.cfm/2006/6/18/lightyupdate
flv streaming
High performance flv-streaming with lighttpd is possible since lighttpd 1.4.11.
With lighty you can easily handle 10000 parallel downloads of your movies including protection against hot-linking with mod_secdownload. This is basicly all you need to build the free video.google.com for yourself.
Just add this you your lighttpd.conf and restart the server:
server.modules = ( ..., "mod_flv_streaming", ... )
flv-streaming.extensions = ( ".flv" )
Players
mod_flv_streaming expects you to fetch the flv-file with a GET parameter if you want to do a seek into the file.
GET /movie.flv?start=23 HTTP/1.1
Host: ...
?Fabian Topfstedt has done this for us. Get his player and place it in the webfolder. To use the player you have include this piece of HTML:
 <object
   classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
   codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0"
   width="336"
   height="297">
   <param name="movie" value="scrubber.swf?file=/movie.flv" />
   <param name="quality" value="high" />
   <embed src="scrubber.swf?file=/movie.flv"
     quality="high"
     pluginspage="http://www.macromedia.com/go/getflashplayer"
    type="application/x-shockwave-flash"
     width="336"
     height="297"></embed>
 </object>
?for the RMP you can use a simple rewrite to get it working with mod_flv_streaming
url.rewrite = (
 "^/name-of-php-script.php\?file=(.+)&position=0___FCKpd___3quot; => "/$1",
 "^/name-of-php-script.php\?file=(.+)&position=([0-9]+)___FCKpd___3quot; => "/$1?start=$2",
)
encoding flash movies
As example I took a video from Ryan Wiebers page about Saber-Effects.
The .mov file was converted into a .flv with the help of ffmpeg and indexed with flvtool2.
$ wget http://ryanw.michaelfrisk.com/ryan-w/clips/kid_fight.mov
$ ffmpeg -i kid_fight.mov kid_fight.flv
$ flvtool2 -U kid_fight.flv-------------------------------------------当前流行的视频网站,关于视频的在线拖动观看技术的小试, 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代码
1.for (k = 0; k < p->conf.extensions->used; k++) {

2.        da
ta_string *ds = (da
ta_string *)p->conf.extensions->da
ta[k];

3.        int ct_len = ds->value->used - 1;

4.  
5.        if (ct_len > s_len) continue;  
6.        if (ds->value->used == 0) continue;  
7.  
8.        if (0 == strncmp(con->physical.path->ptr + s_len - ct_len, ds->value->ptr, ct_len)) {

9.            data_string *get_param;  
10.            stat_cache_entry *sce = NULL;  
11.            buffer *b;  
12.            int start;

13.            char *err = NULL;  
14.            /* if there is a start=[0-9]+ in the header use it as start,

15.             * otherwise send the full file */  
16.  
17.            array_reset(p->get_params);  
18.            buffer_copy_string_buffer(p->query_str, con->uri.query);

19.            split_get_params(p->get_params, p->query_str);

20./*这个是重点,获得客户端的播放器通过get方法传来的start(文件拖动的开始位置offset)*/  
21.            if (NULL == (get_param = (data_string *)array_get_element(p->get_params, "start"))) {  
22.                return HANDLER_GO_ON;  
23.            }  
24.  
25.            /* too short */  
26.            if (get_param->value->used < 2) return HANDLER_GO_ON;  
27.  
28.            /* check if it is a number */  
29.            start = strtol(get_param->value->ptr, &err, 10);

30.            if (*err != '\0') {  
31.                return HANDLER_GO_ON;  
32.            }  
33.  
34.            if (start <= 0) return HANDLER_GO_ON;  
35.  
36.            /* check if start is > filesize */  
37.            if (HANDLER_GO_ON != stat_cache_get_entry(srv, con, con->physical.path, &sce)) {

38.                return HANDLER_GO_ON;  
39.            }  
40.  
41.            if (start > sce->st.st_size) {

42.                return HANDLER_GO_ON;  
43.            }  
44.  
45.            /* we are safe now, let's build a flv header */  
46.            b = chunkqueue_get_append_buffer(con->write_queue);

47.                          
48.                        /*准备发送给客户端播放器的flv公共头信息13字节*/  
49.            buffer_copy_string_len(b, CONST_STR_LEN("FLV\x1\x1\0\0\0\x9\0\0\0\x9"));  
50.                          
51.                        /*发送seek到的拖动关键桢的位置keyframe, 并计算出从拖动点到该视频文件结束的长度*/  
52.            http_chunk_append_file(srv, con, con->physical.path, start, sce->st.st_size - start);

53.                       /* http相关信息的填充*/  
54.            response_header_overwrite(srv, con, CONST_STR_LEN("Content-Type"), CONST_STR_LEN("video/x-flv"));  
55.  
56.            con->file_finished = 1;  
57.                       /*done, 处理拖动完成*/  
58.            return HANDLER_FINISHED  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)) {
  da
ta_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 = (da
ta_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代码

   1.  
   2.if (NULL != (get_param = (da
ta_string *)array_get_element(p->get_params, "start")))    
   3.{  
   4.  
   5.    /* too short */  
   6.    if (get_param->value->used < 2)

   7.                    return HANDLER_GO_ON;  
   8.  
   9.                /* check if it is a number */  
   10.                start = strtol(get_param->value->ptr, &err, 10);

   11.                if (*err != '\0')    
   12.                {  
   13.                    return HANDLER_GO_ON;  
   14.                }  
   15.                  
   16.                /* check if tflvbegin is >= 0 */  
   17.                if (start < 0)    
   18.                    return HANDLER_GO_ON;  
   19.  
   20.                /* check if start is > filesize */  
   21.                if (start > sce->st.st_size)

   22.                {  
   23.                    return HANDLER_GO_ON;  
   24.                }  
   25.            }  
   26.            else

   27.            {  
   28.                return HANDLER_GO_ON;  
   29.            }  
   30.                          
   31.            /* if there is a start=[0-9]+ in the header use it as end,

   32.             * otherwise send the full file */  
   33./*这里重点,仿照lighttpd如何获得get方法的中的start,同理获得end参数, 并做一些必要的合法性检查*/  
   34.            if (NULL != (get_param = (data_string *)array_get_element(p->get_params, "end")))    
   35.            {  
   36.                /* too short */  
   37.                if (get_param->value->used < 2)

   38.                    return HANDLER_GO_ON;  
   39.  
   40.                /* check if it is a number */  
   41.                end = strtol(get_param->value->ptr, &err, 10);

   42.                if (*err != '\0')    
   43.                {  
   44.                    return HANDLER_GO_ON;  
   45.                }  
   46.  
   47.                /*参数检查,必须*/  
   48.                /* check if end is > 0

   49.                 * check if start < end

   50.                 * make sure star > 0

   51.                 * */  
   52.                if (end <= 0 || start >= end)

   53.                    return HANDLER_GO_ON;  
   54.  
   55.                /* check if end is > filesize */  
   56.                if (end > sce->st.st_size)

   57.                {  
   58.                    //return HANDLER_GO_ON;

   59.                    tflvend = sce->st.st_size; /* path tflvend is not right */  
   60.                }  
   61.            }  
   62.            else

   63.            {  
   64.                return HANDLER_GO_ON;  
   65.              
   66.      
   67.   }  
   68.  
   69./* we are safe now, let's build a flv header */  
   70.            b = chunkqueue_get_append_buffer(con->write_queue);

   71.                          
   72.                        /*准备发送给客户端播放器的flv公共头信息13字节*/  
   73.            buffer_copy_string_len(b, CONST_STR_LEN("FLV\x1\x1\0\0\0\x9\0\0\0\x9"));  
   74.  
   75.                      /*这个是重点,以前默认的是发送的数据长度是用 fileseize-start, 现在要用end替代filesize, 即是 end-start*/  
   76.            http_chunk_append_file(srv, con, con->physical.path, start, end - start);

   77.            response_header_overwrite(srv, con, CONST_STR_LEN("Content-Type"), CONST_STR_LEN("video/x-flv"));  
   78.            con->file_finished = 1;  
   79.            return HANDLER_FINISHED

附件下载:
scrubber_lighty.zip 177.53KB
2d102efffe0a74c16d06d66c1e5dbf8920090820120955.zip (您是游客您没有权限下载)
本帖最后由 张小鱼 于 2010-11-09 09:13 编辑
小鱼的淘宝店铺-多多支持哇

搭建一个Flv视频播放服务器

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





经过一天的努力,查了好多资料,终于搞定了Flv视频服务器。本来这个事情没那么复杂的,无奈网上的很多资料都是错漏百出,内容脱节的,包括一些官方站也是,实在让人郁闷不已。为了让大家能避免被错误的文档误导,写个简短文章给大家做参考。
目前,由于Flash的流行,网络上绝大多数的微视频网站都采用了Flv格式来播放视频。
在互联网上播放视频,有两种方式,一种是文件方式,即通过HTTP协议访问视频文件,这种方式的缺点是不能从特定的帧开始播放;另外一种就是采用专门的流媒体服务器,这种方式的缺点是要搭建复杂的流媒体服务器。不过,现在有了一种集合了以上两种方式优点的一种解决方案,即通过HTTP来实现伪流媒体。本文描述的就是这样的一种解决方案。
Flv播放器
首先,你需要有一个能够播放Flv视频的播放器,很显然,它还需要能够嵌入到网页中。目前比较流行的,功能上也还比较完善的一个Flv播放器就是 JW FLV Media Player(也称为 jwplayer)。它的网址是:
http://www.longtailvideo.com/players/jw-flv-player/

本文写作时,jwplayer的最新版本是4.6。它对于非商业使用是免费。
从上述网址下载jwplayer,输入邮件地址即可下载一个压缩包。
可以考虑下载使用带有 Viral 插件的版本,Viral插件会在视频播放完后,弹出一个窗口,可供浏览者将该视频嵌入到其他网页、发布该视频的URL和推荐该视频,对于推广视频比较有用。

将包中的player.swf(如果是带有Viral插件的,就是player-viral.swf)放到你的网站内,这就是用来提供视频播放的播放器。至于包中其它的文件,都可以不要。
接下来,将播放器嵌入到你的视频播放网页中。嵌入的方式有两种:
直接嵌入,使用Object/Embed代码嵌入

代码 复制 - 运行

<object id="player1" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" name="player1" width="328" height="200"> 
 <param name="movie" value="player.swf" /> 
 <param name="allowfullscreen" value="true" /> 
 <param name="allowscriptaccess" value="always" /> 
 <param name="flashvars" value="file=video.flvℑ=preview.jpg&autostart=false&type=http&streamer=start" /> 
 <embed 
  type="application/x-shockwave-flash" 
  id="player2" 
  name="player2" 
  src="player.swf"  
  width="328"  
  height="200" 
  allowscriptaccess="always"  
  allowfullscreen="true" 
  flashvars="file=video.flvℑ=preview.jpg&autostart=false&type=http&streamer=start"  
 /> 
</object>

上面代码中,你需要将video.flv和preview.jpg替换成你的视频文件及其预览图。





基本上这种直接代码嵌入的方式在各种浏览器中都是兼容的。但是,以上代码在IE7+的某些安全设置下,播放Flash时会弹出安全提示,需要手动许可。所以,还有一种更好方式来嵌入,
使用swfobject来嵌入Flash:
swfobject是一个很小的JavaScript脚本(10k),该脚本引入了一个swfobject对象,用于在网页内嵌入Flash,并避免了上述的安全提示。swfobject已经得到了广泛的使用和好评。
swfobject在jwplayer包中也包含了一个,不过是很旧的1.5版,建议使用最新的版本。本文写作时,最新的版本是2.2。swfobject可以从此下载(只需要其中的swfobject.js文件):
http://code.google.com/p/swfobject/

使用swfobject嵌入的代码如下:

代码 复制 - 运行

<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>

上述代码中,首先引入swfobject.js,然后将实例化播放器的代码放到head中;在body内放一个空的div用来为播放器占位,该div的ID(上例中是placeholder1)会被传递给swfobject.embedSWF()函数,swfobject会在该div内生成播放器;最后在body的onload事件中进行播放器的创建。

在上述的两种代码中,有两个关键点
  • flashvars中的type参数的值应为“http”,这表明了该视频是通过http方式访问的。
  • falshvars中的streamer参数的值应为“start”,这个参数用于传递给服务器从特定的(关键)帧开始播放,没有这个参数,视频就不能拖到特定点播放。(lighttpd和nginx的Flv模块都支持这个start参数)

此外,需要注意的是,如果一个Flv视频要能够被拖到特定点播放,该Flv需要在其metadata中有关键帧的信息。如果你的Flv视频制作的时候没有这些信息,也是不能拖放播放的。可以使用flvmdi来为你的视频加上关键帧信息,这是一个windows下的小程序,从此下载:
http://www.buraks.com/flvmdi/

完成了以上工作,那么客户端的播放器的显示就可以工作了。接下来我们搭建用来提供Flv文件访问的HTTPD服务器。
Flv视频服务器
搭建Flv视频服务器,建议采用轻量级的HTTP服务器,毕竟Flv文件只是静态文件。轻量级的HTTP服务器有两种选择:lighttpd和nginx。选择任何一个都可以,在提供Flv服务方面,两者相差不多。
nginx
从nginx的网站下载最新的稳定版,本文写作时的最新稳定版的版本是0.7.63:
http://nginx.net/

下载后进行编译,要将“ --with-http_flv_module ” 加上,这个是用来专门提供Flv服务的模块。nginx的编译的其他选项及配置这里就不多说了,只说明一下在配置中如何激活flv模块:
在server配置中,加入如下语句,表明所有的flv文件由flv模块进行处理:

代码 复制 - 运行

location ~ \.flv { flv; }


lighttpd

从lighttpd下载最新的稳定版,本文写作时的最新稳定版的版本是1.4.24:
http://www.lighttpd.net/

下载后编译不需要特定选项,flv模块是默认编译进去的,但是在配置文件中并无此模块,需要手动添加:
在server.modules区块中加入如下语句来激活flv模块(如果不是插入到最后一行,记得末尾的逗号):

代码 复制 - 运行

"mod_flv_streaming",

然后在配置文件中增加如下行来说明所有的Flv文件都由flv模块处理:

代码 复制 - 运行

flv-streaming.extensions = ( ".flv" )


说明:在以上两种HTTP服务器中,flv模块实际上会接收通过拖放播出而传递的类似 “?start=1030435” 这样的参数,并根据该参数传递从特定位置开始的视频数据。
这样,Flv视频服务器就安装好了。你可以试试播放Flv视频,也可以看看拖放是否工作。
如果你需要播放mp4视频,基本原理如上,只是需要额外的处理mp4文件的模块,在此就不赘述了。
本文系Linux中国原创文章,版权归作者(wxy)及Linux中国所有。
欢迎转载,但希望保留本版权信息及原文出处。
原文:http://linux.cn/home/space-3-do-blog-id-136.html
小鱼的淘宝店铺-多多支持哇

搭建flv可拖拽流媒体服务器-方案之Lighttpd

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

一、废话少说,预备知识:
×互联网上播放视频的两种方式
一种是以http协议方式来访问视频文件,这种方式的缺点是不能从视频特定的帧位置进行播放,必须从头开始。常用的方案是Appache+前端flv播放器。
另外一种方式是搭建专门的复杂的流媒体服务器,优点是视频支持拖拽播放,缺点是这种服务器搭建复杂,配置要求也比较高,而且运行其上的程序必须是某种语言。
常用的免费方案是RED5(使用java语言) 我现在做的这个方案是使用lighttpd自带的flv_streaming模块来实现伪流媒体。
×flv格式以及播放器
FLV 是FLASH VIDEO的简称,FLV流媒体格式是随着Flash MX的推出发展而来的视频格式。由于它形成的文件极小、加载速度极快,使得网络观看视频文件成为可能。
我们一般看电影用的格式主要是rm,rmvb,mp4,mpg,avi等格式,这些格式都可以用视频转换工具转换成flv格式,比如win平台下的格式工厂、linux下的ffmpeg,但是转换生成的flv往往Meta Data是损坏的,不支持拖拽操作,一拖拽就又从头播放了。
我们使用flv修复工具,如flvtools,yamdi等等。
flv播放器也非常多,但是80%的flv播放器也只是起到flv解码播放的作用,无法向服务器发送帧参数。比如我要拖拽到50秒那个地方播放,而50秒对应的帧假如是第900帧,flv播放器应该向服务器发送一个类似“start=9000”的帧参数请求。
二、我们搭建流媒体服务器要有3大条件:
1是支持伪flv流的web服务器,这里用的是lighttpd
2是Meta Data完好无损的flv文件
3是支持发送帧参数的flv播放器,比如fwplayer和flowplayer
搭建步骤
我们首先搭建一下流媒体服务器
用rpm安装lighttpd,首先添加rpmforge源
view plaincopy to clipboardprint?
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······15001.wget ftp://ftp.univie.ac.at/systems/linux/fedora/epel/5/i386/lighttpd-1.4.26-2.el5.i386.rpm

02.rpm -ivh rpmforge-release-0.5.1-1.el5.rf.i386.rpm
wget ftp://ftp.univie.ac.at/systems/linux/fedora/epel/5/i386/lighttpd-1.4.26-2.el5.i386.rpm
rpm -ivh rpmforge-release-0.5.1-1.el5.rf.i386.rpm
安装lighttpd,目前最新版本是1.4.28
view plaincopy to clipboardprint?
01.yum install lighttpd

yum install lighttpd
配置开启lighttpd的flv_streaming模块,网上很多教程都只开启了flv_streaming模块,建议也开启mod_secdownload模块。Lighttpd的配置主文件是/etc/lighttpd/lighttpd.conf,模块配置文件是/etc/lighttpd/modules.conf
在server.modules 中加入"mod_secdownload","mod_flv_streaming"
view plaincopy to clipboardprint?
01.vi /etc/lighttpd/modules.conf

02.server.modules = (
03.#"mod_access",
04.#  "mod_alias",
05.#  "mod_auth",
06.#  "mod_evasive",  
07."mod_redirect",  
08."mod_rewrite",  
09."mod_secdownload", #新加行  
10."mod_flv_streaming", #新加行
11.#  "mod_setenv",
12.#  "mod_usertrack",  
13.)  
14.flv-streaming.extensions = ( ".flv" ) #新加行,说明所有的Flv文件都由flv模块处理
vi /etc/lighttpd/modules.conf
server.modules = (
#"mod_access",
#  "mod_alias",
#  "mod_auth",
#  "mod_evasive",
"mod_redirect",
"mod_rewrite",
"mod_secdownload", #新加行
"mod_flv_streaming", #新加行
#  "mod_setenv",
#  "mod_usertrack",
)
flv-streaming.extensions = ( ".flv" ) #新加行,说明所有的Flv文件都由flv模块处理
我们启动一下lighttpd
view plaincopy to clipboardprint?
01.service lighttpd restart

service lighttpd restart
如果启动成功,我们的流媒体服务器就已经完成了。
在浏览器中访问一下服务器,如果访问不了成功,配置一下防火墙,开放80端口。并且把selinux设置为允许。如果还是不行,你的配置有问题,最好的办法是看一下日志:tail /var/log/lighttpd/error.log
第二步我们制作一个flv视频,用到的工具是centos下的ffmepg+flvtool2 或者 win下的格式工厂+flvmdi,流程就是先把rm,rmvb,mov,mp4等等各类视频匆匆转换成flv格式,再用meteData工具修复一下。
目前作者的做法是这样的,
先下载格式工厂:下载地址http://www.xdowns.com/soft/10/35/2008/Soft_41466.html,如果这个页面失效了,大家谷歌自己找
通过格式工厂我把一小电影video.rm 转换成了video.flv,具体操作就不详细说了
video.flv的修复工作我是在centos里面进行的,因为flvmdi有时候不起作用,还是flvtool2稳定。我们可以通过samba共享或者用ftp把video.flv传到Centos系统里面。
在Centos上安装flvtool2并修复一下video.flv
view plaincopy to clipboardprint?
01.yum install flvtool2

02.flvtool2 -U video.flv
yum install flvtool2
flvtool2 -U video.flv
flv文件已经准备好了,再进行最后一步,配置flv播放器,我使用的是jw player
下载地址:http://www.longtailvideo.com/players/jw-flv-player/
另外使用了swfobject.js,下载地址:http://code.google.com/p/swfobject/downloads/list
lighttpd默认的web目录在/srv/www/lighttpd下面,我们放这几个文件
网页文件:index.html
视频文件:video.flv
视频预览图片:perview.jpg
js:swfobject.js
flv播放器:player.swf
---------------------------------------------------------------
附:index.html文件内容:
view plaincopy to clipboardprint?
01.<html>

02.<mce:script type="text/JavaScript" src="swfobject.js" mce_src="swfobject.js"></mce:script>
03.<head>
04.<mce:script type="text/JavaScript"><!--  
05.  
06.function createPlayer() {  
07.    var flashvars = {  
08.        file:"video.flv",  
09.        type:"http",  
10.        image:"preview.jpg",  
11.        autostart:"false",  
12.        streamer:"start"  
13.    }  
14.    var params = {  
15.        allowfullscreen:"true",  
16.        allowscriptaccess:"always"  
17.    }  
18.    var attributes = {  
19.        id:"player1",  
20.        name:"player1"  
21.    }  
22.    swfobject.embedSWF("player.swf", "placeholder1", "320", "196", "9.0.115", false, flashvars, params, attributes);  
23.        }  
24.  
25.// --></mce:script>
26.</head>
27.<body onload="createPlayer();">
28.    <div id="placeholder1"></div>
29.</body>
30.</html>
<html>
<mce:script type="text/JavaScript" src="swfobject.js" mce_src="swfobject.js"></mce:script>
<head>
<mce:script type="text/JavaScript"><!--

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);
       }

// --></mce:script>
</head>
<body onload="createPlayer();">
   <div id="placeholder1"></div>
</body>
</html>
ok!三条件已经完成,访问http://yourserverip/index.html
**************************** ****************
* 作者:
* 叶文涛
* 参考:
* FLV播放器拖动处理 http://hi.baidu.com/flyinweb/blog/item/d0a00ef4afea846bddc4749b.html
* lighttd搭建流媒体Flash服务器支持seek操作 http://www.bwcsc.net/?q=node/467&page=96
* 用 lighttpd 建立 FLV 影片網站 http://cha.homeip.net/blog/2007/08/328.html

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/qduleaf/archive/2010/11/19/6021505.aspx
小鱼的淘宝店铺-多多支持哇