Войти
Собственный видеохостинг
01.02.2010 | Кат. Полезные заметки | 1280
Статья описывает процесс построения собственного видеохостинга (как, например, YouTube) на базе lighttpd с модулем mod_flv_streaming для трансляции потокового видео в формате .flv и модулем
mod_secdownload для предотвращения хотлинкинга. В качестве проигрывателя мы возьмем FlowPlayer, который поддерживает mod_flv_streaming. Также мы опишем процесс перекодировки видео различных форматов (.mp4 .mov .mpg .3gp .mpeg .wmv .avi) в формат FLV, который будет использоваться на нашем сайте

Необходимые замечания
Перед описанием непосредственно процесса давайте определим используемые в статье некоторые параметры, которые могут отличаться от ваших (и наверняка отличаются :))
Все происходит на сервере с адресом server1.example.com и IP-адресом 192.168.0.100. Предполагается, что на сервере уже установлен lighttpd и php с поддержкой MySQL
В Лайти также включена поддержка PHP. В качестве операционной системы мы используем Debian Etch
Итак, приступим

Устанавливаем LAME
LAME - это mp3-декодер. Он необходим нам для того, чтобы в наших сконвертированных видеофайлах сохранялась аудиодорожка. В репозитриях Etch LAME отсутствует, поэтому мы будем собирать его вручную.
Установим необходимые пакеты:

apt-get install build-essential

Затем скачаем и скомпилируем LAME
cd /tmp
wget http://mesh.dl.sourceforge.net/sourceforge/lame/lame-3.97.tar.gz
tar xvfz lame-3.97.tar.gz
cd lame-3.97
./configure --enable-shared --prefix=/usr
make
make install

Устанавливаем ffmpeg
Для перекодирования видео мы будем использовать ffmpeg. Установим его и плагины к нему

apt-get install ffmpeg libavcodec0d libavformat0d libavifile-0.7c2 libpostproc0d libasound2-plugins avifile-player avifile-utils avifile-mad-plugin avifile-mjpeg-plugin avifile-vorbis-plugin

Проблема LAME в Debian заключается в том, что он не поддерживает кодирование mp3 из-за патентных ограничений, а значит наше видео превратится в “немое кино”. Чтож, немного поправим пакет

cd /usr/src/
apt-get source ffmpeg
cd ffmpeg-0.cvs20060823

Отредактируем файл debain/rules. В начале файла есть две строки confflags с опциями сборки. Добавим в одну из них --enable-mp3lame и сохраним файл
[...]
confflags += --enable-gpl --enable-pp --enable-pthreads --enable-mp3lame
confflags += --enable-vorbis --enable-libogg --enable-a52 --enable-dts --enable-libgsm
[...]

Соберем пакет

dpkg-buildpackage

dpkg-buildpackage, скорее всего, будет “ругаться” на отсутствующие пакеты, которые нужны ему для сборки ffmpeg
server1:/usr/src/ffmpeg-0.cvs20060823# dpkg-buildpackage
dpkg-buildpackage: source package is ffmpeg
dpkg-buildpackage: source version is 0.cvs20060823-8
dpkg-buildpackage: source changed by Sam Hocevar (Debian packages)
dpkg-buildpackage: host architecture i386
dpkg-buildpackage: source version without epoch 0.cvs20060823-8
dpkg-checkbuilddeps: Unmet build dependencies: debhelper (>= 4.0) quilt libogg-dev libvorbis-dev liba52-dev libdts-dev zlib1g-dev libsdl1.2-dev libfreetype6-dev libimlib2-dev texi2html libraw1394-dev libdc1394-13-dev libtheora-dev (>> 0.0.0.alpha4) libgsm1-dev
dpkg-buildpackage: Build dependencies/conflicts unsatisfied; aborting.
dpkg-buildpackage: (Use -d flag to override.)
server1:/usr/src/ffmpeg-0.cvs20060823#

Если вы видите что-то подобное, то просто доставьте недостающие пакеты

apt-get install debhelper quilt libogg-dev libvorbis-dev liba52-dev libdts-dev zlib1g-dev libsdl1.2-dev libfreetype6-dev libimlib2-dev texi2html libraw1394-dev libdc1394-13-dev libtheora-dev libgsm1-dev

и запустите dpkg-buildpackage снова

dpkg-buildpackage

Процесс создания нового пакета займет некоторое время, а результатом его будут *.deb-файлы в директории /usr/src. Установим их командой

cd ..
dpkg -i *.deb

Устанавливаем flvtool2
При перекодировке видео неплохо было добавить некоторые метаданные в конечные файлы, например информацию о длительности, чтобы наш плеер смог корректно показывать счетчик времени. Для этого воспользуемся утилитой flvtool2. Она написана на Ruby, поэтому сначала установим его

apt-get install ruby

Затем скачаем и установим flvtool2

cd /tmp
wget http://rubyforge.org/frs/download.php/17497/flvtool2-1.0.6.tgz
tar xvfz flvtool2-1.0.6.tgz
cd flvtool2-1.0.6
ruby setup.rb config
ruby setup.rb setup
ruby setup.rb install

Подгототавливаем директории для видео
Корневой директорией для Лайти в нашем случае является /var/www (по умолчанию в Debian так и есть). Конечно же мы не хотим хранить оригинальные и сконвертированные видеофайлы в этой директории, иначе их смогут скачать все, кто захочет (зная прямую ссылку). Поэтому директорию с оригинальными видео (/var/videos/incoming) и сконвертированными (/var/videos/flv) мы расположим вне DocumentRoot

mkdir -p /var/videos/incoming
mkdir -p /var/videos/flv

Вы (или ваши пользователи) смогут загружать файлы в /var/videos/incoming через FTP или WEB-интерфейс, а вы будете их перекодировать (вручную или автоматически) в FLV-формат и хранить в /var/videos/flv

Перекодирование видео
Предположим, что у нас есть файл video.avi в директории /var/videos/incoming (или .mp4 .mov .mpg .3gp .mpeg .wmv). Мы хотим сконвертировать его в fideo.flv и сохранить в /var/videos/flv. Разрешение конечного файла должно быть 320×240, звук 44100 Hz и частота кадров 12 fps

ffmpeg -i /var/videos/incoming/video.avi -s 320×240 -ar 44100 -r 12 /var/videos/flv/video.flv

(для дополнительной информации рекомендую обратиться к man ffmpeg). Это займет некоторое время, а вывод будет похож на
server1:~# ffmpeg -i /var/videos/incoming/video.avi -s 320x240 -ar 44100 -r 12 /var/videos/flv/video.flv
FFmpeg version SVN-rUNKNOWN, Copyright (c) 2000-2004 Fabrice Bellard
configuration: --enable-gpl --enable-pp --enable-pthreads --enable-mp3lame --enable-vorbis --enable-libogg
--enable-a52 --enable-dts --enable-libgsm --enable-dc1394 --disable-debug --enable-shared --prefix=/usr
libavutil version: 0d.49.0.0
libavcodec version: 0d.51.11.0
libavformat version: 0d.50.5.0
built on Aug 14 2007 15:02:25, gcc: 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)
Input #0, avi, from '/var/videos/incoming/video.avi':
Duration: 00:10:53.8, start: 0.000000, bitrate: 5455 kb/s
Stream #0.0: Video: mpeg4, yuv420p, 1024x576, 24.00 fps(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, q=2-31, 200 kb/s, 12.00 fps(c)
Stream #0.1: Audio: mp3, 44100 Hz, stereo, 64 kb/s
Stream mapping:
Stream #0.0 -> #0.0
Stream #0.1 -> #0.1
No accelerated IMDCT transform found
Press [q] to stop encoding
frame= 7847 q=2.0 Lsize= 21682kB time=653.8 bitrate= 271.7kbits/s
video:16061kB audio:5108kB global headers:0kB muxing overhead 2.427536%
server1:~#

Обратите особое внимание на секцию Output - там должно быть два потока: видео и аудио. Если вы видите там только видеопоток, то значит какие-то проблемы с аудиокодированием, внимательно проверьте наши инструкции по подключению LAME
После кодирования добавим метаданные

cat /var/videos/flv/video.flv | flvtool2 -U stdin /var/videos/flv/video.flv

Настройка Lighttpd
Теперь приступим к настройке Лайти. Откроем главный конфигурационный файл /etc/lighttpd/lighttpd.conf активируем в нем модули mod_secdownload и mod_flv_streaming. Обратите внимание: крайне важно, чтобы модуль mod_secdownload шел перед модулем mod_flv_streaming в секции server.modules. В обратном случае будут проблемы с отображением видео FlowPlayer’ом
[...]
server.modules = (
"mod_access",
"mod_alias",
"mod_accesslog",
"mod_fastcgi",
# "mod_rewrite",
# "mod_redirect",
# "mod_status",
# "mod_evhost",
# "mod_compress",
# "mod_usertrack",
# "mod_rrdtool",
# "mod_webdav",
# "mod_expire",
"mod_secdownload",
"mod_flv_streaming",
# "mod_evasive"
)
[...]

Также добавьте в конец конфига следующие строки
[...]
flv-streaming.extensions = ( ".flv" )
secdownload.secret = "somesecret"
secdownload.document-root = "/var/videos/flv/"
secdownload.uri-prefix = "/dl/"
secdownload.timeout = 120

Не забудьте заменить somesecret на реальную парольную фразу
Как работает mod_secdownload:
На web-странице расположена ссылка примерно следующего вида:
/// (например: /dl/d8a8cb150f7e5962f6a8443b0b6c6cc2/46c1d9f6/video.flv)
Где - это md5-хэш от
Секретной строки
(начинающегося с /)


mod_secdownload перенаправит эту ссылку на файл, расположенный в secdownload.document-root (который вне основного корня веб-сервера) и обеспечит доступ к нему в течении secdownload.timeout секунд. По истечении времени ссылка перестанет быть валидной и доступ будет закрыт.
После установки FlowPalyer мы будем генерировать валидные сслыки для mod_secdownload при помощи PHP-скрипта. Дополнительную информацию по mod_secdownload можно получить здесь
Не забудьте перезапустить Лайти

/etc/init.d/lighttpd restart

Установка FlowPlayer
Скачайте последнюю версию плеера с http://flowplayer.org/download и приготовьте его к работе

cd /tmp
wget http://belnet.dl.sourceforge.net/sourceforge/flowplayer/flowplayer-1.19.zip
unzip flowplayer-1.19.zip
mv flowplayer /var/www/

Настройка FlowPlayer
Плеер установлен, теперь давайте создадим файл, с помощью которого можно будет посмотреть наше видео. В нашем примере это /var/www/flowplayertest.php, в котором расположены все параметры для запуска плеера и генерируются валидные ссылки для mod_secdownload
$secret = "somesecret";
$uri_prefix = "/dl/";

# filename
$f = "/video.flv";

# current timestamp
$t = time();

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

?>

width="320" height="256" id="FlowPlayer">

Не забудьте позаботиться о том, чтобы переменная $secret совпадала со значением, указанным в конфиге Лайти. Также должны совпадать $uri_prefix и secdownload.uri-prefix. Если все верно, то ссылки точно будут рабочими. В переменной $f содержится имя видеофайла, начинающееся со слеша (”/”). В нашем примере имя “жестко” зашито в код, но вы можете получать его из БД, например.
В тэгах содержатся конфигурационные параметры для FlowPlayer. Плеер может использовать разные скины (в нашем примере это FlowPlayerThermo), видео имеет размер 320×240 и панель управления имеет высоту 16px. Пожтому мы указали ширину равной 320px и высоту (240+16) 256px. Если вы используете другой скин, поправьте эти параметры. За документацией по FlowPlayer обращайтесь на официальный сайт
В параметре и не можете использовать
За дополнительными настройками FlowPlayer обратитесь к документации

Проверим?
Зайдем браузером на http://192.168.0.100/flowplayertest.php - видео должно работать (со звуком)

  • Если у вас динамический IP

    Этот сервис позволяет обратиться к вашему серверу не по IP адресу, а по его имени, которое (как я надеюсь вам известно) преобразуется в IP адрес через обращение к DNS серверам. Таким образом DNS имя остается постоянным, а IP…

  • Развитие физического тела

    Когда процесс самосовершенствования достигает определенного уровня, мы начинаем задумываться о расширении «аппаратных» возможностей своего тела. Развитие физического тела является важным фактором на пути…

  • Продвижение сайта с помощью YouTube

    Часто ли вы используете в продвижении и оптимизации сайта нестандартные методы? Если вопрос задать общей массе вебмастеров, то ответ однозначен – нет. Занимаясь продвижением сайтов, мы часто используем…

  • Призраки

    Духи умерших, стучащие духи, полтергейст, эгреггоры (духи — воплощение мысли) — весь ряд этих слов обозначает нечто, называемое нами обычно призраками. Между собой духи различаются набором средств общения с…

  • Как сохранить успешные отношения

    Всё ли есть в ваших отношениях, чтобы длиться долго и счастливо. Если вы обнаружите, что ваша любовь не сулит ничего лучше, лучше прочитать эту статью. А если у вас фото, на стене или на полке которое постоянно напоминает…

  • ДРУЖБА

    Общество сверстников является важным фактором в формировании личности подростка. Оно бывает двух видов:1. Общество сверстников, которое организовывают взрослые;2. Общество, которое складывается стихийно.Но эти два…

  • Гениальный Рыков

    История первой финансовой пирамиды в России О существовании этого маленького уездного городка в Рязанской губернии, может быть, Россия никогда бы и не узнала, если бы в один прекрасный день с оглушительным треском в…

  • Кредитование бизнеса.

          В большинстве случаев, при желании заняться собственным бизнесом многие сталкиваются с проблемой нехватки финансовых ресурсов. Поэтому многие банковские организации предлагают услуги по кредитованию…

  • 24 варианта использования .htaccess

     Файл конфигурации .htaccess может быть очень мощным инструментом разработчика при его правильном использовании. Его можно найти в корневой папке сервера, редактируется обычным текстовым редактором. В этой статье вы…

  • Настройка общего доступа к файлам и принтерам в Windows 7

    Откройте оснастку Центр управления сетями и общим доступом. Для этого либо залезьте в Панель управления, либо щелкните правой кнопкой мыши по иконке в трее, символизирующей подключение к сети.В открывшемся Центре…


Комментарии

97 + 43 =