[Web] Балуюсь с видео-сервисом

Однако попалась очередная забавная задачка, загрузка на сервер видео и соответственно его проигрывание.

С виду все просто, но есть маленький нюанс 😉 видео может быть в любом формате (например avi, flv, 3gp), а проигрывать охота как на десктопах, так и на девайсах с iOS (да, существенный недостаток — отсутствие flash). Естественно с проигрыванием видео спасает например JW Player (он может проигрывать как в формате flash, так и в html5), но видео ему желательно подсовывать в mp4.

И так, с заливкой файла на сервер никаких проблем, но теперь надо преобразовать в mp4, для этого надо будет небольшой набор софтинок, главная из которых — ffmpeg с поддержкой libx264. Тут я воспользовался кучей инструкции, для установки сего комплекта на Debian Sqeeze.

Теперь о самой обработке. Сначала я написал ее прямо в php-коде, что нормально работало при конвертирование в формат отличный от H.264, но как только я начал кодировать в него, сразу скрипт стал вываливаться. Раз нельзя так — пойдем иначе!

Решение оказалось очень простым:

  • написать shell-скрипт, конвертирующий видео
  • запустить его через cron скажем раз в минуту, естественно с блокировкой с помощью например flock

В результате имеем:

#!/bin/sh

	directory=/var/www/site/upload/
	directoryConverted=/var/www/site/converted/
	directoryThumbs=/var/www/site/thumbs/

	for type in "flv" "avi" "mov" "3gp"
	do
		for file in $( find $directory -type f -name '*.'$type | sort )
		do
			fname=$(basename $file)
			name=${fname%.*}
			/usr/local/bin/ffmpeg -y -i $file -acodec libmp3lame -vcodec libx264 -vpre fast -ar 44100 $directoryConverted$name.mp4 
			/usr/local/bin/ffmpeg -y -i $file -an -ss 5 -vframes 1 -s 640x360 -y -f mjpeg $directoryThumbs$name.jpg 

			rm $file
		done
	done
exit 0

И строчка для crontab:

*/1 * * * * root flock -xn /var/www/site/lock -c /var/www/site/convert.sh

Как то так ) пока по тестирую, может что еще доработать надо 😉