Основная статья: http://habrahabr.ru/blogs/linux/78677/

Дополнительно для просвещения: http://flance.onego.ru/2008/05/22/13

Спасибо автору!

Для Gento:

1. USE="3dnow 3dnowext X alsa encode hardcoded-tables mmx mmxext mp3 ssse3 v4l v4l2 vorbis zlib amr network theora threads x264 xvid" emerge ffmpeg

2. nano /etc/ffserver.conf  - по статье

3. Запуск сервера

ffserver -f /home/ffserver.conf

4. Запуск захвата с видео и аудио

ffmpeg -s 352x288 -r 30 -f video4linux2 -i /dev/video0 http://localhost:8090/feed.ffm -f alsa -ac 2 -i hw:0,0

PS:

!!! Много воды утекло, изменилась версия ffmpeg!!!

К ужасу обнаружил что ffserver не стртует, выдает ошибку:
bind(port 8090): Invalid argument

После бессонной ночи родился патчик:


*** ffmpeg-0.7-rc1/ffserver.c 2011-04-27 02:58:23.000000000 +0400
--- ffmpeg-0.7-rc1/ffserver.c 2011-07-25 23:21:29.000000000 +0400
***************
*** 4087,4092 ****
--- 4087,4093 ----
ERROR("Invalid_port: %s\n", arg);
}
my_http_addr.sin_port = htons(val);
+ my_http_addr.sin_family = AF_INET;
} else if (!strcasecmp(cmd, "BindAddress")) {
get_arg(arg, sizeof(arg), &p);
if (resolve_host(&my_http_addr.sin_addr, arg) != 0) {


Основная статья:

fserver идёт в комплекте с ffmpeg и выполняет роль медиа-сервера — получает видеопоток от ffmpeg, который может быть запущен на другой машине, и раздаёт его счастливым пользователям.
Каждый получаемый поток называется Feed’ом (далее будет просто фид). Таких потоков может быть несколько, так же как и отдаваемых (выходных).
FFmpeg у нас будет захватывать видео с веб-камеры или читать из файла.

Практика


Сначала настроим ffserver, чей конфиг лежит в /etc/ffserver.conf:

  1. Port 8090
  2. BindAddress 0.0.0.0
  3. MaxClients 100
  4. MaxBandwidth 20000
  5. NoDaemon
  6. # Фид, надо запомнить feed.ffm, он нам потребуется при запуске ffmpeg
  7. File /tmp/feed.ffm
  8. FileMaxSize 3M
  9. # Ранее объявленный фид
  10. Feed feed.ffm
  11. Format flv
  12. VideoCodec flv
  13. VideoFrameRate 30
  14. VideoBufferSize 80000
  15. VideoBitRate 200
  16. # Качество видео от 1 до 31, 1 == отлично 31 == фи!
  17. VideoQMin 1
  18. VideoQMax 5
  19. # Разрешение, везде должно быть одинаково!
  20. VideoSize 352x288
  21. PreRoll 1
  22. # Если у вас есть микрофон, или вы транслируете видео со звуком, закомментируйте эту строчку
  23. Noaudio
  24. # Флешка test.swf для просмотра трансляции
  25. Feed feed.ffm
  26. # Будет запускаться в Adobe Flash Player
  27. Format swf
  28. VideoCodec flv
  29. VideoFrameRate 30
  30. VideoBufferSize 50000
  31. VideoBitRate 100
  32. VideoQMin 1
  33. VideoQMax 5
  34. # Разрешение, везде должно быть одинаково!
  35. VideoSize 352x288
  36. PreRoll
  37. # Если у вас есть микрофон, или вы транслируете видео со звуком, закомментируйте эту строчку
  38. Noaudio



Пускаем ffserver:
$ ffserver

Пускаем ffmpeg:
$ ffmpeg -s 352x288 -r 30 -f video4linux2 -i /dev/video0 http://localhost:8090/feed.ffm
-s разрешение, указанное в конфиге ffserver, -r количество кадров/секунду, -f формат, -i путь к камере (или к видео-файлу), http://localhost:PORT/FEED это адрес, где ffserver будет ждать наш поток

PS: если выдаст ошибку, то можно попробовать формат v4l (-f video4linux)

Открываем в браузере http://localhost:8090/test.swf и широко улыбаемся:)

Для отправки видео поменяем параметр -i на путь к файлу, уберём -f (ffmpeg сам определит формат файла):
$ ffmpeg -s 352x288 -r 30 -i ~/big_buck_bunny.ogg http://localhost:8090/feed.ffm

Ну а что бы вставить нашу флешку в html-страницу используем следующий код:
src="http://localhost:8090/test.swf" width="550" height="400"></embed>.