Перекодирование видео на лету

izbushka
На сайте с 08.06.2007
Offline
110
3258

Есть желание реализовать видео хостинг, но конвертировать видео не при загрузке, а при отдаче.

Это не публичный сервис, больше одного-двух потоков одновременно не будет, поэтому хранить копию всего видео в нужном формате смысла нет.

Какими средствами можно реализовать просмотр в броузере? Фронтэндом мог бы быть html5 или флеш, а что можно использовать в качеств бекэнда, конвертирующего видео в нужный формат на лету?

ZiNTeR2001
На сайте с 28.05.2008
Offline
42
#1

По идее тебе нужен сервер обработки потокового видео.

Посмотри такие разработки как Red 5, Wowza streaming server, Adobe media server

http://www.red5.org/

http://www.wowza.com/

http://www.adobe.com/ru/products/adobe-media-server-standard.html

Думаю что чтобы понять основы данной технологии этих ссылок должно хватить.

Всё что знаю кроме Red5 платное. Ну а вообще поищи в гугле по запросам типа "сервер потокового видео" либо video streaming server

Лабаю Медицинского центра "Евразия" (http://http://xn----7sbbhoobaglcj1a2c6o.xn--p1ai/) Плюс ещё Пытаюсь отреставрировать и воссоздать "сообщество любителей поиграть в футбол шаговой доступности" (http://www.kubgoal.ru)
izbushka
На сайте с 08.06.2007
Offline
110
#2

Не хотелось бы сильно усложнять. Можно ограничиться одним потоком.

В принципе мне бы и ffserver подошел бы.. Просто не совсем ясно как ему говорить какое видео брать, как его останавливать при обрыве конекта.

В идеале хотелось бы обойтись perl'ом (nginx) и набором для консольной обработки видео типа ffmpeg.

Было бы хорошо научить nginx брать видео с DLNA.. Гуглю пока..

В принципе nginx умеет RTMP

И даже умеет перекодировать..


rtmp {
server {
listen 1935;

application myapp {
live on;
exec ffmpeg -i rtmp://localhost/myapp/$name -c:v flv -c:a -s 32x32 -f flv rtmp://localhost/myapp32x32/$name;
}

application myapp32x32 {
live on;
}
}
}

Осталось придумать как ему скармливать локальные файлы.. Просто указание -i Filename.avi для ffmpeg не работает...
Он умеет exec_play (выполнять команду при подключении клиента), но транскодить получается только в другой поток.. т.е. получается нужно 2 клиента подключать: один инициирует источник, второй смотрит.. копаю еще..

Вобщем то, решено...

application myapp {
live on;
exec_play ffmpeg -i /path/to/video/$name -c:v flv -s 640x480 -y -f flv -ar 44100 -ab 64000 -ac 1 -acodec mp3 rtmp://localhost/myapp/$name;
}

И смотрим все видео из /path/to/video/ по имени

ffplay rtmp://localhost/myapp/FileName.mov

Осталось доделать веб приложение для просмотра.. Это уже не проблема

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий