使用Lighttpd和FlowPlayer构建您自己的视频社区(Debian Lenny)
本文介绍如何使用lighttpd及其mod_flv_streaming
模块(用于流媒体.flv
视频,大多数主要视频社区(如YouTube )使用的格式)及其mod_secdownload
模块(用于防止视频的热链接)在Debian上构建自己的视频社区兰妮 我将使用FlowPlayer作为视频播放器,一个免费的Flash视频播放器,支持lighttpd的mod_flv_streaming
模块。 我还将展示如何将视频( .mp4 .mov .mpg .3gp .mpeg .wmv .avi
)编码为Adobe Flash支持的FLV格式。
本文档不附带任何形式的保证! 我想说,这不是设立这样一个制度的唯一办法。 实现这一目标有很多方法,但这是我所采取的方式。 我不会保证这将为您工作!
1初步说明
在本教程中,我使用IP地址为192.168.0.100
的hostname server1.example.com
。 这些设置可能会有所不同,因此您必须在适当的情况下更换它们。
我们需要一个带有PHP支持的lighttpd安装,如本教程所示: 在Debian Lenny上安装带有PHP5和MySQL支持的Lighttpd 。 我不会在这里覆盖,所以请参考本教程,如果您还没有设置lighttpd与PHP支持。
2安装ffmpeg
我们将使用ffmpeg将我们的视频文件转换为FLV格式。 官方Debian ffmpeg软件包的问题是MP3编码不支持,这意味着我们的FLV视频在转换后会失去声音。 因此,我们将Debian-Multimedia存储库添加到sources.list
,并从该存储库安装ffmpeg软件包 - 默认情况下,它支持MP3。
vi /etc/apt/sources.list
添加Debian - 多媒体库(您可以在这里找到一个靠近你的镜像),例如:
[...] deb http://ftp-stud.hs-esslingen.de/pub/Mirrors/debian-multimedia/ stable main deb-src http://ftp-stud.hs-esslingen.de/pub/Mirrors/debian-multimedia/ stable main |
然后下载debian-multimedia-keyring
软件包并安装它:
wget http://www.debian-multimedia.org/pool/main/d/debian-multimedia-keyring/debian-multimedia-keyring_2008.10.16_all.deb
dpkg -i debian-multimedia-keyring_2008.10.16_all.deb
最后更新你的软件包列表:
aptitude update
我们现在可以安装ffmpeg,如下所示:
aptitude install ffmpeg
3安装flvtool2
当我们将视频转换为FLV格式时,我们需要添加一些元数据,例如视频的持续时间到FLV文件,以便FlowPlayer可以正确显示视频的长度。 我们可以使用flvtool2添加这个元数据。 我们可以安装flvtool2如下:
aptitude install flvtool2
4创建视频目录
在本教程中,我假设您的视频网站的lighttpd文档根目录是/ var / www
(Debian上lighttpd的默认文档根目录)。 当然,我们不想将原始视频和FLV视频存储在文档根目录(或子目录)中,以防止任何人直接下载它们(如果他知道链接)。 因此,我们为原始视频(例如/ var / videos / incoming
)和文档根目录外的FLV视频目录
(例如/ var / videos / flv
)创建一个目录:
mkdir -p /var/videos/incoming
mkdir -p /var/videos/flv
您(或您的用户)可以将其原始视频上传到/ var / videos / incoming
(例如通过FTP或某些您编程的网络界面),然后您可以将视频编码为FLV(手动或通过某些脚本)如下一章所示。
5将视频编码为FLV
假设我们在/ var / videos / incoming
中有一个名为video.avi
的视频
(适用于扩展名.mp4 .mov .mpg .3gp .mpeg .wmv
)。 我们要将其转换为文件video.flv
,并将其存储在目录/ var / videos / flv中
。 我想要video.flv
的尺寸为320x240像素,音频采样频率为44100 Hz,两个音频通道(立体声)和12 fps的帧速率。 这是我们的做法:
ffmpeg -i /var/videos/incoming/video.avi -s 320x240 -ar 44100 -r 12 -ac 2 /var/videos/flv/video.flv
(有关更多选项,请查看
man ffmpeg
)
这可能需要一些时间,输出应该是这样的:
server1:~# ffmpeg -i /var/videos/incoming/video.avi -s 320x240 -ar 44100 -r 12 -ac 2 /var/videos/flv/video.flv
FFmpeg version SVN-r13582, Copyright (c) 2000-2008 Fabrice Bellard, et al.
configuration: --prefix=/usr --libdir=${prefix}/lib --shlibdir=${prefix}/lib --bindir=${prefix}/bin --incdir=${prefix}/include/ffmpeg --enable-shared --enable-libmp3lame --enable-gpl --enable-libfaad --mandir=${prefix}/share/man --enable-libvorbis --enable-pthreads --enable-libfaac --enable-libxvid --enable-postproc --enable-libamr-nb --enable-libamr-wb --enable-x11grab --enable-libgsm --enable-libx264 --enable-liba52 --enable-libtheora --extra-cflags=-Wall -g -fPIC -DPIC --cc=ccache cc --enable-swscale --enable-libdc1394 --enable-nonfree --disable-mmx --disable-stripping --enable-avfilter --enable-libdirac --disable-decoder=libdirac --enable-libschroedinger --disable-encoder=libschroedinger --disable-altivec --disable-armv5te --disable-armv6 --disable-vis
libavutil version: 49.7.0
libavcodec version: 51.58.0
libavformat version: 52.16.0
libavdevice version: 52.0.0
libavfilter version: 0.0.0
built on May 3 2009 12:02:42, gcc: 4.3.2
Input #0, avi, from '/var/videos/incoming/video.avi':
Duration: 00:10:53.82, start: 0.000000, bitrate: 5455 kb/s
Stream #0.0: Video: mpeg4, yuv420p, 1024x576 [PAR 1:1 DAR 16:9], 24.00 tb(r)
Stream #0.1: Audio: ac3, 48000 Hz, 5:1, 448 kb/s
Output #0, flv, to '/var/videos/flv/video.flv':
Stream #0.0: Video: flv, yuv420p, 320x240 [PAR 4:3 DAR 16:9], q=2-31, 200 kb/s, 12.00 tb(c)
Stream #0.1: Audio: libmp3lame, 44100 Hz, stereo, 64 kb/s
Stream mapping:
Stream #0.0 -> #0.0
Stream #0.1 -> #0.1
Press [q] to stop encoding
[libmp3lame @ 0xb7cad610]lame: output buffer too small (buffer index: 8359, free bytes: 281)
frame= 7847 fps= 11 q=2.0 Lsize= 21696kB time=653.92 bitrate= 271.8kbits/s
video:16067kB audio:5114kB global headers:0kB muxing overhead 2.428783%
server1:~#
请确保在输出
部分中看到两个流,一个用于视频,一个用于音频。 如果您只看视频,这意味着声音会丢失。
转换完成后,我们现在可以使用flvtool2添加元数据到video.flv:
cat /var/videos/flv/video.flv | flvtool2 -U stdin /var/videos/flv/video.flv