工作,学习,生活,这里将会有一些记录. 备用域名:http://meisw.wdlinux.cn 注册 | 登陆
浏览模式: 标准 | 列表全部文章

在线视频点播

FLV格式是FLASH VIDEO格式的简称,随着Flash MX的推出,Macromedia公司开发了属于自己的流媒体视频格式——FLV格式。FLV流媒体格式是一种新的视频格式,由于它形成的文件极小、加载速度也极快,这就使得网络观看视频文件成为可能,FLV视频格式的出现有效地解决了视频文件导入Flash后,使导出的SWF格式文件体积庞大,不能在网络上很好的使用等缺点,FLV是在sorenson公司的压缩算法的基础上开发出来的。sorenson公司也为MOV格式提供算法。FLV格式不仅可以轻松的导入Flash中,几百帧的影片就以两秒钟;同时也可以通过rtmp 协议从Flashcom 服务器上流式播出。因此目前国内外主流的视频网站都使用这种格式的视频在线观看。

 

flv在线播放器 Vcastr3

下载地址:

http://www.ruochigroup.com/main/2008/03/19/vcastr-30/

 

 

有一个源于Linux的工具软件ffmpeg可以轻易地实现FLV向其它格式(avi(mpeg4)asfmpeg)的转换或者将其它格式转换为flv

 如果只需要转到flv,装mencodercodecs就可以了,如果还需要截图或者其他功能,就要装ffmpeg和相关解码包。ffmpeg支持的格式没有前者多,但是速度比较快,参数也很简单。另外我们还需要转换到rm,找了很久都没找到基于前述两种软件的解决方法。在对转换速度不具特殊需求的情况下,我使用Helix Producer for linux来解决该问题,这同时也是real的人所建议的。

 

mencoder

下载地址:

MPlayer-1.0rc2-gui.zip

MPlayer-mingw32-1.0rc2.zip

http://www5.mplayerhq.hu/MPlayer/releases/win32/

windows-all-20071007.zip

http://www5.mplayerhq.hu/MPlayer/releases/codecs/

参数说明:

   CODE:

    mencoder [options] file1 [specific options] [file2] [specific options]

    mencoder src.avi -o dst.avi -vf scale=320:240 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=500

    # src.avi 原文件

    # -o dst.avi 定义压缩为dst.avi

    # -vf scale=320:240,调整视频尺寸到320x240

    # -oac copy,指定音频编码器,copy是指不压缩,直接使用源文件里的音频。copy换成 MP3lame,即压缩成mp3

    # -ovc lavc,指定视频编码器,使用libavcodec编码器;

    # -lavcopts vcodec=mpeg4:vbitrate=500,指定libavcodec的参数,vcodec=mpeg4指使用mpeg4压缩,就是DivXvbitrate=500500kbps的比特率。

 

    CODE:

    mencoder src.avi -o dst.flv -of lavf -oac MP3lame -lameopts abr:br=32:mode=3 -ovc lavc i_certify_that_my_video_stream_does_not_use_b_frames -vf scale=350:-3 -sws 2

 

    # src.avi 输入文件路径,是Mplayer能支持的格式即可

    # -o dst.flv 输出路径

    # -of lavf 输出格式 lavf表示libavcodec

    # -oac MP3lame 输出音频编码方式,lame是最好的mp3编码器

    # -lameopts abr:br=32:mode=3 abr代表平均码率,相对于cbr(固定码率)vbr(可变码率,貌似不支持),br就是音频的码率,越高音质越好,mode=30-3分别代表 Stereo,Joint Stereo,Force ms_stereo,Mono(默认为自动,事实上13对文件大小的影响并不是很大),另外可选的还有 vol(音量,取值0-10,数值越大音量越大,不建议修改)

    # -srate 22050 声音采样频率设置,也可以选11025,文件可以稍小一点

    # -ovc lavc 输出视频编码 lavc就是libavcodec

    # -lavcopts codec=flv flv格式压缩 vbitrate=150 视频码率

    # -vf scale=350:-3 -sws 2 缩放视频,指定宽度为350,高度按比例来。质量由-sws选项控制,具体看手册

    # -ofps 23 设定帧数,缩小帧数对节约文件大小效果不明显,且可能造成画面声音同步。建议不设置

 

mencoder “input.avi" -o "output.flv" -of lavf -lavfopts i_certify_that_my_video_stream_does_not_use_b_frames -oac mp3lame -lameopts abr:br=56 -ovc lavc -lavcopts vcodec=flv:vbitrate=500:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:dia=4:cmp=6:vb_strategy=1 -ofps 29.97 -srate 22050   

参数详解:

-o "output.flv":是输出文件路径;

-of lavf:是输出文件格式,这里不是flv而是lavf,是因为flv属于libavformat

-lavfopts i_certify_that_my_video_stream_does_not_use_b_frames-lavfopts表示对lavf进行一些设置,设置的内容就是i_certify_that_my_video_stream_does_not_use_b_frames,翻译成中文就是:我确定,我的视频不用B frames,对于转换flv格式,最好加上这个参数,否则可能会报错。

-oac mp3lameoac=output audio codec,输出音频编码器,这里用的mp3lame

-lameopts abr:br=56lame options,是专门针对mp3lame的参数设置,abr:br=56,是设置音频比特率为56

-ovc lavcovc=output video codec,输出视频编码器,lavc表示one of libavcodecs video codec,输出格式为libavformat之一;

-lavcopts vcodec=flv:vbitrate=500:mbd=2:mv0:v4mv:trell:cbp:last_pred=3:dia=4:cmp=6:vb_strategy=1:对lavc进行一些设置,详细介绍如下:

vcodec=flv:指定视频编码器为flv

vbitrate=500:指定视频比特率为500

mbd:宏模块选择算法,值为02默认为0,值越大转换越缓慢,但在品质和文件大小方面有好处;

mv0:编译每个宏模块并选择最好的一个,当mbd=0时无效;

v4mv:会稍微增加品质,mbd>0时效果更明显;

trell:量子化网格搜索,对每8×8block找到最优化编码;

cbp:只能和trell一期使用,评估失真的图像块编码;

last_pred=3:与上一帧相比的移动数量预测,值为09913比较合适,大于3时对品质的提高已经无关紧要,但却会降低速度;

dia=4:移动搜索范围,值为-996,对于快速转换,-1是个不错的值,如果不是很重视速度,可以考虑24

cmp=6:值为12000,默认为0,设置用于全象素移动预算的比较函数

vb_strategy=1:对动作很大的场景会有帮助,对有些视频,设置vmax_b_frames会有损品质,加上vb_strategy=1会好点。

 

示例:

rmvb->flv

mencoder D:/video/xchk.rmvb FLV1 -of lavf -oac mp3lame -lameopts aq=9:cbr:br=64:vol=2 -ovc lavc -lavcopts vcodec=flv:vbitrate=200:acodec=mp3:abitrate=56 -vf scale=320:270,expand=320:270:::1,crop=320:270:0:0 -ofps 18 -srate 22050  -o D:/video/xchk.flv

 

mencoder D:/video/tl.rmvb FLV1 -of lavf -oac mp3lame -lameopts aq=9:cbr:br=64:vol=2 -ovc lavc -lavcopts vcodec=flv:vbitrate=200:acodec=mp3:abitrate=56 -vf scale=320:270,expand=320:270:::1,crop=320:270:0:0 -ofps 18 -srate 22050  -o D:/video/test/tl.flv

 

mpg->flv

mencoder D:/video/hx.mpg FLV1 -of lavf -oac mp3lame -lameopts aq=9:cbr:br=64:vol=2 -ovc lavc -lavcopts vcodec=flv:vbitrate=200:acodec=mp3:abitrate=56 -vf scale=320:270,expand=320:270:::1,crop=320:270:0:0 -ofps 18 -srate 22050  -o D:/video/test/hx1.flv

 

DAT->flv

mencoder D:/video/avs001.DAT FLV1 -of lavf -oac mp3lame -lameopts aq=9:cbr:br=64:vol=2 -ovc lavc -lavcopts vcodec=flv:vbitrate=200:acodec=mp3:abitrate=56 -vf scale=320:270,expand=320:270:::1,crop=320:270:0:0 -ofps 18 -srate 22050  -o D:/video/test/avs0011.flv

 

avi->flv

mencoder D:/video/pxgk.avi FLV1 -of lavf -oac mp3lame -lameopts aq=9:cbr:br=64:vol=2 -ovc lavc -lavcopts vcodec=flv:vbitrate=200:acodec=mp3:abitrate=56 -vf scale=320:270,expand=320:270:::1,crop=320:270:0:0 -ofps 18 -srate 22050  -o D:/video/test/pxgk1.flv

 

 

 

----------------------------------------------------------

ffmpeg

ffmpeg能解析的格式:asxasfmpgwmv3gpmp4movaviflv

下载地址:

http://tirnanog.fate.jp/mirror/ffmpeg/

ffmpeg参数说明

【常用参数】        【说明】        【示例】

-i "路径"          指定需要转换的文件路径   -i "C:/nba.wmv"

-y     覆盖输出文件,即如果nba.xxx文件已经存在的话,直接覆盖       

   控制画面参数

-bitexac 使用标准比特率    

-vcodec xvid    使用xvid压缩         

-s <宽高比>    指定分辨率大小   -s 320*240

-r <数值>         帧速率(非标准数值会导致音画不同步【标准值为1529.97)          -r 15

-b <比特率>   指定压缩比特率   -b 1500

 

-qmin <数值>

         设定最小质量        -qmin 10

-qmax <数值>         -qmin相反,可以与-qmin同时使用        -qmax 30

-sameq   使用与源视频相同的质量    

   控制声音参数

-acodec aac    设定声音编码         

-ac <数值>      设定声道数:1为单声道,2为立体声      -ac 2

-ar <采样率> 设定声音采样率(80001102522050)     -ar 22050

-ab <比特率>          设定声音比特率(-ac设为立体声时要以一半比特率来设置,比如192kbps的就设成96)   -ab 96

-vol <百分比>          设定音量大小,比如设定200就会比原来的音量大2         -vol 200

 

利用ffmpeg的这两个参数,可以控制让ffmpeg来将一个大video劈分成许多小段的独立播放的文件。

-ss time_off        set the start time offset

-t duration         set the recording time

 

详细参数:

ffmpeg [[options][`-i’ input_file]]… {[options] output_file}…

如果没有输入文件,那么视音频捕捉就会起作用。

作为通用的规则,选项一般用于下一个特定的文件。如果你给 b 64选项,改选会设置下一个视频速率。对于原始输入文件,格式选项可能是需要的。

缺省情况下,ffmpeg试图尽可能的无损转换,采用与输入同样的音频视频参数来输出。

3.选项

a) 通用选项

-L license

-h 帮助

-fromats 显示可用的格式,编解码的,协议的。。。

-f fmt 强迫采用格式fmt

-I filename 输入文件

-y 覆盖输出文件

-t duration 设置纪录时间 hh:mm:ss[.xxx]格式的记录时间也支持

-ss position 搜索到指定的时间 [-]hh:mm:ss[.xxx]的格式也支持

-title string 设置标题

-author string 设置作者

-copyright string 设置版权

-comment string 设置评论

-target type 设置目标文件类型(vcd,svcd,dvd) 所有的格式选项(比特率,编解码以及缓冲区大小)自动设置 ,只需要输入如下的就可以了:

ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg

-hq 激活高质量设置

-itsoffset offset 设置以秒为基准的时间偏移,该选项影响所有后面的输入文件。该偏移被加到输入文件的时戳,定义一个正偏移意味着相应的流被延迟了 offset秒。 [-]hh:mm:ss[.xxx]的格式也支持

b) 视频选项

-b bitrate 设置比特率,缺省200kb/s

-r fps 设置帧频 缺省25

-s size 设置帧大小 格式为WXH 缺省160X128.下面的简写也可以直接使用:

Sqcif 128X96 qcif 176X144 cif 252X288 4cif 704X576

-aspect aspect 设置横纵比 4:3 16:9 1.3333 1.7777

-croptop size 设置顶部切除带大小 像素单位

-cropbottom size –cropleft size –cropright size

-padtop size 设置顶部补齐的大小 像素单位

-padbottom size padleft size padright size padcolor color 设置补齐条颜色(hex,616进制的数,红:绿:兰排列,比如 000000代表黑色)

-vn 不做视频记录

-bt tolerance 设置视频码率容忍度kbit/s

-maxrate bitrate设置最大视频码率容忍度

-minrate bitreate 设置最小视频码率容忍度

-bufsize size 设置码率控制缓冲区大小

-vcodec codec 强制使用codec编解码方式。 如果用copy表示原始编解码数据必须被拷贝。

-sameq 使用同样视频质量作为源(VBR

-pass n 选择处理遍数(1或者2)。两遍编码非常有用。第一遍生成统计信息,第二遍生成精确的请求的码率

-passlogfile file 选择两遍的纪录文件名为file

 

c)高级视频选项

-g gop_size 设置图像组大小

-intra 仅适用帧内编码

-qscale q 使用固定的视频量化标度(VBR)

-qmin q 最小视频量化标度(VBR)

-qmax q 最大视频量化标度(VBR)

-qdiff q 量化标度间最大偏差 (VBR)

-qblur blur 视频量化标度柔化(VBR)

-qcomp compression 视频量化标度压缩(VBR)

-rc_init_cplx complexity 一遍编码的初始复杂度

-b_qfactor factor pb帧间的qp因子

-i_qfactor factor pi帧间的qp因子

-b_qoffset offset pb帧间的qp偏差

-i_qoffset offset pi帧间的qp偏差

-rc_eq equation 设置码率控制方程 默认tex^qComp

-rc_override override 特定间隔下的速率控制重载

-me method 设置运动估计的方法 可用方法有 zero phods log x1 epzs(缺省) full

-dct_algo algo 设置dct的算法 可用的有 0 FF_DCT_AUTO 缺省的DCT 1 FF_DCT_FASTINT 2 FF_DCT_INT 3 FF_DCT_MMX 4 FF_DCT_MLIB 5 FF_DCT_ALTIVEC

-idct_algo algo 设置idct算法。可用的有 0 FF_IDCT_AUTO 缺省的IDCT 1 FF_IDCT_INT 2 FF_IDCT_SIMPLE 3 FF_IDCT_SIMPLEMMX 4 FF_IDCT_LIBMPEG2MMX 5 FF_IDCT_PS2 6 FF_IDCT_MLIB 7 FF_IDCT_ARM 8 FF_IDCT_ALTIVEC 9 FF_IDCT_SH4 10 FF_IDCT_SIMPLEARM

-er n 设置错误残留为n 1 FF_ER_CAREFULL 缺省 2 FF_ER_COMPLIANT 3 FF_ER_AGGRESSIVE 4 FF_ER_VERY_AGGRESSIVE

-ec bit_mask 设置错误掩蔽为bit_mask,该值为如下值的位掩码 1 FF_EC_GUESS_MVS (default=enabled) 2 FF_EC_DEBLOCK (default=enabled)

-bf frames 使用frames B 帧,支持mpeg1,mpeg2,mpeg4

-mbd mode 宏块决策 0 FF_MB_DECISION_SIMPLE 使用mb_cmp 1 FF_MB_DECISION_BITS 2 FF_MB_DECISION_RD

-4mv 使用4个运动矢量 仅用于mpeg4

-part 使用数据划分 仅用于mpeg4

-bug param 绕过没有被自动监测到编码器的问题

-strict strictness 跟标准的严格性

-aic 使能高级帧内编码 h263+

-umv 使能无限运动矢量 h263+

-deinterlace 不采用交织方法

-interlace 强迫交织法编码 仅对mpeg2mpeg4有效。当你的输入是交织的并且你想要保持交织以最小图像损失的时候采用该选项。可选的方法是不交织,但是损失更大

-psnr 计算压缩帧的psnr

-vstats 输出视频编码统计到vstats_hhmmss.log

-vhook module 插入视频处理模块 module 包括了模块名和参数,用空格分开

D)音频选项

-ab bitrate 设置音频码率

-ar freq 设置音频采样率

-ac channels 设置通道 缺省为1

-an 不使能音频纪录

-acodec codec 使用codec编解码

E)音频/视频捕获选项

-vd device 设置视频捕获设备。比如/dev/video0

-vc channel 设置视频捕获通道 DV1394专用

-tvstd standard 设置电视标准 NTSC PAL(SECAM)

-dv1394 设置DV1394捕获

-av device 设置音频设备 比如/dev/dsp

 

F)高级选项

-map file:stream 设置输入流映射

-debug 打印特定调试信息

-benchmark 为基准测试加入时间

-hex 倾倒每一个输入包

-bitexact 仅使用位精确算法 用于编解码测试

-ps size 设置包大小,以bits为单位

-re 以本地帧频读数据,主要用于模拟捕获设备

-loop 循环输入流。只工作于图像流,用于ffserver测试

 

 

示例:

抓图 avi->jpg

ffmpeg -i "D:/video/pxgk.avi" -y -f image2 -ss 8 -t 0.001 -s 350x240 "D:/video/test/pxgk.jpg" 

 

转换 mp3->flv

ffmpeg.exe -i D:/video/山不转水转.mp3 -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 D:/video/山不转水转.flv

转换 avi->flv

ffmpeg -i "D:/video/pxgk.avi" -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 D:/video/test/pxgk.flv

转换 DAT->flv error

ffmpeg -i "D:/video/avs001.DAT" -y -ab 56 -ar 22050 -b 500 -r 15 -s 320*240 D:/video/test/avs001.flv

转换: mpg->flv

ffmpeg -i "D:/video/hx.mpg" -y -ab 56 -ar 22050 -b 500 -r 15 -s 320*240 D:/video/test/hx.flv

转换: mov->flv

ffmpeg -i "D:/video/heartbeatmv.mov" -y -ab 56 -ar 22050 -b 500 -r 15 -s 320*240 D:/video/test/heartbeatmv.flv

转换:vob->flv

ffmpeg -i "D:/video/vts.VOB" -y -ab 56 -ar 22050 -b 500 -r 15 -s 320*240 D:/video/test/vts.flv

 

 

利用mencoder转换flv 报错

命令如下:

mencoder D:/video/pxgk.avi  -vf scale=320:240 -ffourcc FLV1 -of lavf  -ovc lavc -lavcopts vcodec=flv:vbitrate=200 -srate 22050 -oac lavc -lavcopts acodec=mp3:abitrate=56 -o D:/video/test/pxgk1.flv

 

错误如下:

Forcing output FourCC to 31564c46 [FLV1].

Audio LAVC, couldn't find encoder for codec mp3.

 

Exiting...

 

命令修改如下即可:

加上如下命令参数:-oac mp3lameoac=output audio codec,输出音频编码器,这里用的mp3lame

 

 

mencoder D:/video/pxgk.avi FLV1 -of lavf -oac mp3lame -lameopts aq=9:cbr:br=64:vol=2 -ovc lavc -lavcopts vcodec=flv:vbitrate=200:acodec=mp3:abitrate=56 -vf scale=320:270,expand=320:270:::1,crop=320:270:0:0 -ofps 18 -srate 22050  -o D:/video/test/pxgk1.flv

 

 

FLV播放时不能拖放

是由FFMPEGMencoder转的FLV文件,Meta Data是损坏的,FLV播放时不能拖放。

两个修复工具:Flvtool2,Flvmdi,给flv文件加入时间标签。

 

 

Flvtool2 下载:flvtool2-1.0.6.zip

http://rubyforge.org/frs/?group_id=1096&release_id=9694

 

Flvmdi 下载:

http://www.buraks.com/flvmdi/

 

使用方法:

命令提示符下输入usage: flvmdi inFile [outFile] [/v] [/s] [/x] [/k] [/l] [/eExtraData] [/p]

 

inputFile outputFile可以是单独文件或目录,如果未指定输出文件或路径,则对原始文件覆盖。

 

 

示例:

flvmdi D:/video/test/hx1.flv D:/video/test/hx12.flv

 

flvmdi D:/video/test/hx1.flv D:/video/test/hx13.flv /s "/e guoqiang test"

CentOS mencoeder ffmpeg

1、安装yum的fpmforge源

rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm2

安装mencoeder、ffmpeg、flvtool2、yamdi等

yum install libgcc gcc gcc-c++ libstdc++ libstdc++-devel compat-glibc compat-libstdc++-33 libevent libevent-devel
yum install ffmpeg ffmpeg-devel mplayer mencoder flvtool2 yamdi3

执行编码的参数

mencoder /root/1.rmvb -o /root/2.flv -of lavf -oac mp3lame -lameopts abr:br=56 -ovc lavc -lavcopts vcodec=flv:vbitrate=500:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:dia=4:cmp=6:vb_strategy=1 -vf scale=480:-3 -ofps 12 -srate 220504、为flv增加关键帧

flvtool2 -U 2.flv

yamdi -i 2.flv -o 3.flv  //注意添加了关键帧的视频为3.flv

squid日志缓存状态解释

#cat /var/log/squid/access.log|gawk '{print $4}'|sort|uniq -c|sort -nr

如果看到很多的TCP_MEM_HIT ,这表明该文件是从内存缓存读取的,squid已经起作用了!你再用浏览器打开该文件,应该是快如闪电了。。呵呵,大功告成了!还有其他类型的HIT,如TCP_HIT等等,这些是从磁盘读取的,我觉得加速的意义不大,只不过缓解了apache的压力而已。

相应于HTTP请求,下列标签可能出现在access.log文件的第四个域。

TCP_HIT

Squid发现请求资源的貌似新鲜的拷贝,并将其立即发送到客户端。

TCP_MISS

Squid没有请求资源的cache拷贝。

TCP_REFERSH_HIT

Squid发现请求资源的貌似陈旧的拷贝,并发送确认请求到原始服务器。原始服务器返回304(未修改)响应,指示squid的拷贝仍旧是新鲜的。

TCP_REF_FAIL_HIT

Squid发现请求资源的貌似陈旧的拷贝,并发送确认请求到原始服务器。然而,原始服务器响应失败,或者返回的响应Squid不能理解。在此情形下,squid发送现有cache拷贝(很可能是陈旧的)到客户端。

TCP_REFRESH_MISS

Squid发现请求资源的貌似陈旧的拷贝,并发送确认请求到原始服务器。原始服务器响应新的内容,指示这个cache拷贝确实是陈旧的。

TCP_CLIENT_REFRESH_MISS

Squid发现了请求资源的拷贝,但客户端的请求包含了Cache-Control: no-cache指令。Squid转发客户端的请求到原始服务器,强迫cache确认。

TCP_IMS_HIT

客户端发送确认请求,Squid发现更近来的、貌似新鲜的请求资源的拷贝。Squid发送更新的内容到客户端,而不联系原始服务器。

TCP_SWAPFAIL_MISS

Squid发现请求资源的有效拷贝,但从磁盘装载它失败。这时squid发送请求到原始服务器,就如同这是个cache丢失一样。

TCP_NEGATIVE_HIT

在对原始服务器的请求导致HTTP错误时,Squid也会cache这个响应。在短时间内对这些资源的重复请求,导致了否命中。 negative_ttl指令控制这些错误被cache的时间数量。请注意这些错误只在内存cache,不会写往磁盘。下列HTTP状态码可能导致否定 cache(也遵循于其他约束): 204, 305, 400, 403, 404, 405, 414, 500, 501, 502, 503, 504。

TCP_MEM_HIT

Squid在内存cache里发现请求资源的有效拷贝,并将其立即发送到客户端。注意这点并非精确的呈现了所有从内存服务的响应。例如,某些cache在内存里,但要求确认的响应,会以TCP_REFRESH_HIT, TCP_REFRESH_MISS等形式记录。

TCP_DENIED

因为http_access或http_reply_access规则,客户端的请求被拒绝了。注意被http_access拒绝的请求在第9域的值是NONE/-,然而被http_reply_access拒绝的请求,在相应地方有一个有效值。

TCP_OFFLINE_HIT

当offline_mode激活时,Squid对任何cache响应返回cache命中,而不用考虑它的新鲜程度。

TCP_REDIRECT

重定向程序告诉Squid产生一个HTTP重定向到新的URI(见11.1节)。正常的,Squid不会记录这些重定向。假如要这样做,必须在编译squid前,手工定义LOG_TCP_REDIRECTS预处理指令。

NONE

无分类的结果用于特定错误,例如无效主机名。

相应于ICP查询,下列标签可能出现在access.log文件的第四域。

UDP_HIT

Squid在cache里发现请求资源的貌似新鲜的拷贝。

UDP_MISS

Squid没有在cache里发现请求资源的貌似新鲜的拷贝。假如同一目标通过HTTP请求,就可能是个cache丢失。请对比UDP_MISS_NOFETCH。

UDP_MISS_NOFETCH

跟UDP_MISS类似,不同的是这里也指示了Squid不愿去处理相应的HTTP请求。假如使用了-Y命令行选项,Squid在启动并编译其内存索引时,会返回这个标签而不是UDP_MISS。

UDP_DENIED

因为icp_access规则,ICP查询被拒绝。假如超过95%的到某客户端的ICP响应是UDP_DENIED,并且客户端数据库激活了(见附录A),Squid在1小时内,停止发送任何ICP响应到该客户端。若这点发生,你也可在cache.log里见到一个警告。

UDP_INVALID

Squid接受到无效查询(例如截断的消息、无效协议版本、URI里的空格等)。Squid发送UDP_INVALID响应到客户端。

 

附:HTTP响应状态码

Table 13-1列出了数字HTTP响应CODE和理由短句。注意Squid和其他HTTP客户端仅仅关注这些数字值。理由短句是纯解释性的,不会影响响应的意义。对每个状态码,也提供了一个到RFC 2616的具体节的索引。注意状态码0和600是squid使用的非标准的值,不会在RFC里提到。
Table 13-1. HTTP response status codes

Code Reason phrase RFC 2616 section
0 No Response Received (Squid-specific) N/A
1xx Informational 10.1
100 Continue 10.1.1
101 Switching Protocols 10.1.2
2xx Successful 10.2
200 OK 10.2.1
201 Created 10.2.2
202 Accepted 10.2.3
203 Non-Authoritative Information 10.2.4
204 No Content 10.2.5
205 Reset Content 10.2.6
206 Partial Content 10.2.7
3xx Redirection 10.3
300 Multiple Choices 10.3.1
301 Moved Permanently 10.3.2
302 Found 10.3.3
303 See Other 10.3.4
304 Not Modified 10.3.5
305 Use Proxy 10.3.6
306 (Unused) 10.3.7
307 Temporary Redirect 10.3.8
4xx Client Error 10.4
400 Bad Request 10.4.1
401 Unauthorized 10.4.2
402 Payment Required 10.4.3
403 Forbidden 10.4.4
404 Not Found 10.4.5
405 Method Not Allowed 10.4.6
406 Not Acceptable 10.4.7
407 Proxy Authentication Required 10.4.8
408 Request Timeout 10.4.9
409 Conflict 10.4.10
410 Gone 10.4.11
411 Length Required 10.4.12
412 Precondition Failed 10.4.13
413 Request Entity Too Large 10.4.14
414 Request-URI Too Long 10.4.15
415 Unsupported Media Type 10.4.16
416 Requested Range Not Satisfiable 10.4.17
417 Expectation Failed 10.4.18
5xx Server Error 10.5
500 Internal Server Error 10.5.1
501 Not Implemented 10.5.2
502 Bad Gateway 10.5.3
503 Service Unavailable 10.5.4
504 Gateway Timeout 10.5.5
505 HTTP Version Not Supported 10.5.6
6xx Proxy Error N/A
600 Unparseable Response Headers (Squid-specific) N/A

Code Reason phrase RFC 2616 section
0 No Response Received (Squid-specific) N/A
1xx Informational 10.1
100 Continue 10.1.1
101 Switching Protocols 10.1.2
2xx Successful 10.2
200 OK 10.2.1
201 Created 10.2.2
202 Accepted 10.2.3
203 Non-Authoritative Information 10.2.4
204 No Content 10.2.5
205 Reset Content 10.2.6
206 Partial Content 10.2.7
3xx Redirection 10.3
300 Multiple Choices 10.3.1
301 Moved Permanently 10.3.2
302 Found 10.3.3
303 See Other 10.3.4
304 Not Modified 10.3.5
305 Use Proxy 10.3.6
306 (Unused) 10.3.7
307 Temporary Redirect 10.3.8
4xx Client Error 10.4
400 Bad Request 10.4.1
401 Unauthorized 10.4.2
402 Payment Required 10.4.3
403 Forbidden 10.4.4
404 Not Found 10.4.5
405 Method Not Allowed 10.4.6
406 Not Acceptable 10.4.7
407 Proxy Authentication Required 10.4.8
408 Request Timeout 10.4.9
409 Conflict 10.4.10
410 Gone 10.4.11
411 Length Required 10.4.12
412 Precondition Failed 10.4.13
413 Request Entity Too Large 10.4.14
414 Request-URI Too Long 10.4.15
415 Unsupported Media Type 10.4.16
416 Requested Range Not Satisfiable 10.4.17
417 Expectation Failed 10.4.18
5xx Server Error 10.5
500 Internal Server Error 10.5.1
501 Not Implemented 10.5.2
502 Bad Gateway 10.5.3
503 Service Unavailable 10.5.4
504 Gateway Timeout 10.5.5
505 HTTP Version Not Supported 10.5.6
6xx Proxy Error N/A
600 Unparseable Response Headers (Squid-specific) N/A

Code Reason phrase RFC 2616 section
0 No Response Received (Squid-specific) N/A
1xx Informational 10.1
100 Continue 10.1.1
101 Switching Protocols 10.1.2
2xx Successful 10.2
200 OK 10.2.1
201 Created 10.2.2
202 Accepted 10.2.3
203 Non-Authoritative Information 10.2.4
204 No Content 10.2.5
205 Reset Content 10.2.6
206 Partial Content 10.2.7
3xx Redirection 10.3
300 Multiple Choices 10.3.1
301 Moved Permanently 10.3.2
302 Found 10.3.3
303 See Other 10.3.4
304 Not Modified 10.3.5
305 Use Proxy 10.3.6
306 (Unused) 10.3.7
307 Temporary Redirect 10.3.8
4xx Client Error 10.4
400 Bad Request 10.4.1
401 Unauthorized 10.4.2
402 Payment Required 10.4.3
403 Forbidden 10.4.4
404 Not Found 10.4.5
405 Method Not Allowed 10.4.6
406 Not Acceptable 10.4.7
407 Proxy Authentication Required 10.4.8
408 Request Timeout 10.4.9
409 Conflict 10.4.10
410 Gone 10.4.11
411 Length Required 10.4.12
412 Precondition Failed 10.4.13
413 Request Entity Too Large 10.4.14
414 Request-URI Too Long 10.4.15
415 Unsupported Media Type 10.4.16
416 Requested Range Not Satisfiable 10.4.17
417 Expectation Failed 10.4.18
5xx Server Error 10.5
500 Internal Server Error 10.5.1
501 Not Implemented 10.5.2
502 Bad Gateway 10.5.3
503 Service Unavailable 10.5.4
504 Gateway Timeout 10.5.5
505 HTTP Version Not Supported 10.5.6
6xx Proxy Error N/A
600 Unparseable Response Headers (Squid-specific) N/A

假如Squid从原始服务器没有接受到任何响应,你可在access.log里看到状态码0。假如Squid接受到的响应没有包含HTTP头部,就会出现状态码600。在少数情况下,某些原始服务器仅发送响应body,而忽略了任何头部。

pure-ftpd.conf设置

限制用户在其主目录
ChrootEveryone yes
兼容ie等比较非正规化的ftp客户端,否则用IE打开不自动弹出登陆对话框
BrokenClientsCompatibility yes
服务器总共允许同时连接的最大用户数
MaxClientsNumber 500
同一IP允许同时连接的用户数
MaxClientsPerIP 500
不允许匿名连接,仅允许认证用户使用,否则不自动打开登陆对话框
NoAnonymous yes
MySQL 配置文件 (参考 README.MySQL)
MySQLConfigFile /etc/pureftpd-mysql.conf
启用简单的 Unix系统 认证方式(/etc/passwd), 使linux用户可登陆
UnixAuthentication yes
认证用户允许登陆的最小组ID(UID),设为0使root可登陆
MinUID 0
用户主目录不存在的话,自动创建
CreateHomeDir yes
# 被动连接响应的端口范围。- for firewalling.
PassivePortRange          30000 50000
要启用被动模式,需在防火墙开放30000:50000端口
vi /etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 30000:50000 -j ACCEPT






pure-ftpd.conf 中文说明




# 如果你想要使用配置文件代替命令行选项来运行 Pure-FTPd ,请运行下面的命令:
#
# RPM 缺省使用另外一个配置文件:
# /etc/sysconfig/pure-ftpd
#
# 请不要忘了浏览一下 http://www.pureftpd.org/documentation.html
# 文档,查看全部的选项列表。
# 限制所有用户在其主目录中
  ChrootEveryone              yes
# 如果前一个指令被设置为了 "no",下面组的成员(GID)就不受主目录的限制了。而其他的用户还是
# 会被限制在自己的主目录里。如果你不想把任何用户限制在自己的主目录里,只要注释掉 ChrootEveryone
# 和 TrustedGID 就可以了。
# TrustedGID                    100
# 兼容ie等比较非正规化的ftp客户端
  BrokenClientsCompatibility  no
# 服务器总共允许同时连接的最大用户数
  MaxClientsNumber            50
# 做为守护(doemon)进程运行(Fork in background)
  Daemonize                  yes
# 同一IP允许同时连接的用户数(Maximum number of sim clients with the same IP address)
  MaxClientsPerIP            8
# 如果你要记录所有的客户命令,设置这个指令为 "yes"。
# This directive can be duplicated to also log server responses.
  VerboseLog                  no
# 即使客户端没有发送 '-a' 选项也列出隐藏文件( dot-files 。
  DisplayDotFiles            yes
# 不允许认证用户 - 仅作为一个公共的匿名FTP。
  AnonymousOnly              no
# 不允许匿名连接,仅允许认证用户使用。
  NoAnonymous                no
# Syslog facility (auth, authpriv, daemon, ftp, security, user, local*)
# 缺省的功能( facility 是 "ftp"。 "none" 将禁止日志。
  SyslogFacility              ftp
# 定制用户登陆后的显示信息(Display fortune cookies)
# FortunesFile              /usr/share/fortune/zippy
# 在日志文件中不解析主机名。日志没那么详细的话,就使用更少的带宽。在一个访问量很大 
# 的站点中,设置这个指令为 "yes" ,如果你没有一个能工作的DNS的话。
  DontResolve                yes
# 客户端允许的最大的空闲时间(分钟,缺省15分钟)
  MaxIdleTime                15
# LDAP 配置文件 (参考 README.LDAP)
# LDAPConfigFile                /etc/pureftpd-ldap.conf
# MySQL 配置文件 (参考 README.MySQL)
# MySQLConfigFile              /etc/pureftpd-mysql.conf
# Postgres 配置文件 (参考 README.PGSQL)
# PGSQLConfigFile              /etc/pureftpd-pgsql.conf
# PureDB 用户数据库 (参考 README.Virtual-Users)
# PureDB                        /etc/pureftpd.pdb
# pure-authd 的socket 路径(参考 README.Authentication-Modules)
# ExtAuth                      /var/run/ftpd.sock
# 如果你要启用 PAM 认证方式, 去掉下面行的注释。
# PAMAuthentication            yes
# 如果你要启用 简单的 Unix系统 认证方式(/etc/passwd), 去掉下面行的注释。
# UnixAuthentication            yes
# 请注意,LDAPConfigFile, MySQLConfigFile, PAMAuthentication 和
# UnixAuthentication 这些指令只能被使用一次,不过,他们能被混合在一起用。例如:如果你使用了
# MySQLConfigFile 和 UnixAuthentication,那么 SQL 服务器将被访问。如果因为用户名未找
# 到而使 SQL 认证失败的话,就会在/etc/passwd 和 /etc/shadow 中尝试另外一种认证,如果因
# 为密码错误而使 SQL 认证失败的话,认证就会在此结束了。认证方式由它们被给出来的顺序而被链
# 接了起来。
# 'ls' 命令的递归限制。第一个参数给出文件显示的最大数目。第二个参数给出最大的子目录深度。
  LimitRecursion              2000 8
# 允许匿名用户创建新目录?
  AnonymousCanCreateDirs      no
# 如果系统被 loaded 超过下面的值,匿名用户会被禁止下载。
  MaxLoad                    4
# 被动连接响应的端口范围。- for firewalling.
# PassivePortRange          30000 50000
# 强制一个IP地址使用被动响应( PASV/EPSV/SPSV replies)。 - for NAT.
# Symbolic host names are also accepted for gateways with dynamic IP
# addresses.
# ForcePassiveIP                192.168.0.1
# 匿名用户的上传/下载的比率。
# AnonymousRatio                1 10
# 所有用户的上传/下载的比率。
# This directive superscedes the previous one.
# UserRatio                1 10
# 不接受所有者为 "ftp" 的文件的下载。例如:那些匿名用户上传后未被本地管理员验证的文件。
  AntiWarez                  yes
# 服务监听的IP 地址和端口。(缺省是所有IP地址和21端口)
# Bind                      127.0.0.1,21
# 匿名用户的最大带宽(KB/s)。
# AnonymousBandwidth            8
# 所有用户的最大带宽(KB/s),包括匿名用户。
# Use AnonymousBandwidth *or* UserBandwidth, both makes no sense.
# UserBandwidth            8
# 新建目录及文件的属性掩码值。<文件掩码>:<目录掩码> .
# 177:077 if you feel paranoid.
  Umask                      133:022
# 认证用户允许登陆的最小组ID(UID) 。
  MinUID                      100
# 仅允许认证用户进行 FXP 传输。
  AllowUserFXP                yes
# 对匿名用户和非匿名用户允许进行匿名 FXP 传输。
  AllowAnonymousFXP          no
# 用户不能删除和写点文件(文件名以 '.' 开头的文件),即使用户是文件的所有者也不行。
# 如果 TrustedGID 指令是 enabled ,文件所属组用户能够访问点文件(dot-files)。
  ProhibitDotFilesWrite      no
# 禁止读点文件(文件名以 '.' 开头的文件) (.history, .ssh...)
  ProhibitDotFilesRead        no
# 永不覆盖文件。当上传的文件,其文件名已经存在时,自动重命名,如: file.1, file.2, file.3, ...
  AutoRename                  no
# 不接受匿名用户上传新文件( no = 允许上传)
  AnonymousCantUpload        no
# 仅允许来自以下IP地址的非匿名用户连接。你可以使用这个指令来打开几个公网IP来提供匿名FTP,
# 而保留一个私有的防火墙保护的IP来进行远程管理。你还可以只允许一内网地址进行认证,而在另外
# 一个IP上提供纯匿名的FTP服务。
#TrustedIP                  10.1.1.1
# 如果你要为日志每一行添加 PID  去掉下面行的注释。
# LogPID                    yes
# 使用类似于Apache的格式创建一个额外的日志文件,如:
# fw.c9x.org - jedi [13/Dec/1975:19:36:39] "GET /ftp/linux.tar.bz2" 200 21809338
# 这个日志文件能被 www 流量分析器处理。
# AltLog                    clf:/var/log/pureftpd.log
# 使用优化过的格式为统计报告创建一个额外的日志文件。
# AltLog                    stats:/var/log/pureftpd.log
# 使用标准的W3C格式创建一个额外的日志文件。(与大部分的商业日志分析器兼容)
# AltLog                    w3c:/var/log/pureftpd.log
# 不接受 CHMOD 命令。用户不能更改他们文件的属性。
# NoChmod                    yes
# 允许用户恢复和上传文件,却不允许删除他们。
# KeepAllFiles                yes
# 用户主目录不存在的话,自动创建。
# CreateHomeDir              yes
# 启用虚拟的磁盘限额。第一个数字是最大的文件数。
# 第二个数字是最大的总的文件大小(单位:Mb)。
# 所以,1000:10 就限制每一个用户只能使用 1000 个文件,共10Mb。
# Quota                      1000:10
# 如果你的 pure-ftpd 编译时加入了独立服务器( standalone 支持,你能够改变 pid 文件
# 的位置。缺省位置是 /var/run/pure-ftpd.pid 。
# PIDFile                    /var/run/pure-ftpd.pid
# 如果你的 pure-ftpd 编译时加入了 pure-uploadscrīpt 支持,这个指令将会使 pure-ftpd
# 发送关于新上传的情况信息到 /var/run/pure-ftpd.upload.pipe,这样 pure-uploadscrīpt
# 就能读然后调用一个脚本去处理新的上传。
# CallUploadscrīpt yes
# 这个选项对允许匿名上传的服务器是有用的。当 /var/ftp 在 /var 里时,需要保留一定磁盘空间
# 来保护日志文件。当所在磁盘分区使用超过百分之 X 时,将不在接受新的上传。
  MaxDiskUsage              99
# 如果你不想要你的用户重命名文件的话,就设置为 'yes' 。
# NoRename yes
# 是 'customer proof' : 工作区(workaround)反对普通的客户错误,类似于:'chmod 0 public_html' 的错误。
# 那是一个有效的命令,不过,将导致无知的客户所定他们自己的文件,将使你的技术支持忙于愚蠢的的问题中。
# 如果你确信你所有的用户都有基本的Unix知识的话,这个特性将没什么用了。不过,如果你是一个主机提供商
# 的话,启用它。
CustomerProof yes
# 每一个用户的并发限制。只有在添加了 --with-peruserlimits 编译选项进行编译后,这个指令才起
# 作用。(大部分的二进制的发布版本就是例子)
# 格式是 : <每一个用户最大允许的进程>:<最大的匿名用户进程>
# 例如: 3:20 意思是同一个认证用户最大可以有3个同时活动的进程。而且同时最多只能有20个匿名用户进程

分享Windows服务器网站文件同步备份解决方案之cwRsyn进行文件同步(转)

 

本文和大家分享Windows服务器网站文件同步备份解决方案,来自博客园dudu的文章。对于一个网站来说,用户上传文件的同步备份是必需要解决的问题。对于有着巨量上传文件的大型网站,一般采用分布式存储系统。而对于上传文件量不是很大的网站,只要在另外一台服务器上保存上传文件的同步备份,避免单点故障,就可以满足需求。如果采用分布式存储系统,性价比不是很高,而cwRsyn就是一个不错的选择。

下面简单介绍一下如何使用cwRsyn进行文件同步。

cwRsync是Windows平台的文件同步解决方案,cwRsync打包了rsync和cygwin,rsync是Linux平台的文件同步软件,cygwin是一个在Windows平台上运行的Linux模拟环境。

1. cwRsync服务端安装与配置

1) 下载并安装cwRsyncServer,下载地址:http://sourceforge.net/projects/sereds/files/

安装过程中,会出现创建用户的窗口,输入用户名与密码后,安装软件会自动创建一个Windows帐户。该帐户用于运行RsyncServer的Windows服务(要注意该帐户对要同步的文件夹是否具有权限),当然你也可以用系统帐户来运行服务。安装完成后,在管理工具》服务中会出现RsyncServer服务。

2) 修改配置文件rsyncd.conf,配置文件如下:

use chroot = false
strict modes
= false
hosts allow
= *
log file
= rsyncd.log
uid
= 0
gid = 0

[test]
path
= /cygdrive/f/test
read only
= false
transfer logging
= yes

配置文件说明:

a) uid = 0,gid = 0是针对匿名访问的情况进行设置的,这样客户端同步时就不需要进行用户验证。如果不进行这样的设置,客户端同步时会出现“invalid uid nobody”或“invalid gid nobody”的错误提示。如果需要用户验证,就要进行另外的设置。

b) [test]相当于虚拟目录,客户端同步时,就是通过这个名字访问服务器上要同步的文件夹。

c) path = /cygdrive/f/test,同步文件夹的实际路径,f/test=f:/test。

3) 进入管理工具》服务,启动RsynServer服务。

注:cwRsyncServer默认端口是873,如果要指定端口,在rsyncd.conf中添加:port = 端口号。

2. 客户端使用方法

1) 下载并安装cwRsyn客户端,下载地址:http://sourceforge.net/projects/sereds/files/

2)通过命令行进行同步操作:

假设cwRsync服务器的IP是192.168.0.58,使用默认端口873,要同步的虚拟目录是test,客户端进行同步的文件夹是h:/sync/test,则运行如下的命令进行同步:

rsync -av rsync://192.168.0.58:873/test  /cygdrive/h/sync/test

注:如果服务器端删除文件,客户端同步时不会在客户端删除文件,只同步增加和更新的文件。

3) 创建同步批处理文件并加入任务计划。

为了让客户端同步操作自动进行,需要将同步命令放在批处理文件中,并将该批处理文件加入任务计划。

php curl 获取状态码

<?php

ini_set('display_errors','1');
ini_set('display_startup_errors','1');
//error_reporting(E_ALL);
error_reporting(E_ALL ^ E_NOTICE);
set_time_limit(60);
mb_internal_encoding("UTF-8");
mb_regex_encoding("UTF-8");
date_default_timezone_set('PRC');

$curlHandle = curl_init();
curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER,true);
curl_setopt($curlHandle, CURLOPT_TIMEOUT, 20);
curl_setopt($curlHandle, CURLOPT_URL, 'http://www.163.com');
curl_setopt($curlHandle, CURLOPT_HEADER, 1);
$strRet = curl_exec($curlHandle);
if ($strRet === false) {    /* 失败或超时 */
    die('false');
} else {
    $status = curl_getinfo($curlHandle, CURLINFO_HTTP_CODE);
}
curl_close($curlHandle);
echo $status;

?>

shell awk 去除空格

awk -F ':' '{gsub(/^[ \t]+/,"",$2);print $2}' | tr "\n" "|"

rsync备份时排除指定目录

要排除指定目录,可以在客户端命令行中使用–exclude-from命令
例如
rsync -vzrtopg –progress –delete –exclude-from=/home/pcfile xxx@xxx.xxx.xxx.xxx::xxx /back/xxx

pcfile内容写成
aaa/
bbb/

这样,待同步目录中的子目录 aaa和bbb,就不在同步之列了
以下内容待定
同理,若要指定只同步某几个目录,可以用–include-from
include 和 exclude指令则可以排除或不排除指定的文件