Меню Рубрики

Linux трансляция с web камеры

LINUX — Жизнь в консоли ЕСТЬ.

Главное меню

Последние статьи

Счетчики

FFServer: Трансляция видео с веб-камеры со звуком через браузер.

ffmpeg — набор свободных библиотек с открытым исходным кодом, которые позволяют записывать, конвертировать и передавать цифровые аудио- и видеозаписи в различных форматах. В состав этого пакета входит ffserver — http потоковый сервер для видео и радиовещания.

Принцип трансляции такой: ffmpeg захватывает поток с камеры и отправляет его ffserver-у, ffserver конвертит его превращая в swf, который можно просмотреть в браузере, введя адрес компьютера, на котором ffserver запущен. Использовалась простая usb-камера logitech c170.

apt-get install ffmpeg

Замечание: Я ставил на ubuntu, если у вас debian то нужно ставить из исходников для поддержки H.264 (один из стандартов сжатия видео), из репозитория debian не прокатит.

Конфиг находится в /etc/ffserver.conf

# Порт, на котором будет работать ffserver
Port 4444
# Адрес, на котором будет работать ffserver.
# Если указать 0.0.0.0 то будут использованы все доступные адреса
BindAddress 0.0.0.0
# Максимальное количество обслуживаемых соединений
MaxHTTPConnections 10
# Максимальное количество клиентов
MaxClients 10
# Максимальная используемая полоса (в килобитах)
MaxBandwidth 5000
# Файл журнала. Формат подобен формату лога apache
CustomLog /var/log/ffserver-access.log
# Описываем источник

# Временный файл для хранения промежуточных данных
File /tmp/webcam.ffm
# Максимальный размер файла с промежуточными данными
FileMaxSize 1M
# Команда запуска ffmpeg для захвата видео с камеры и отправки ffserver-у.
# Адрес для отправки данных (localhost) автоматически будет добавлен в конец этой строки.
# (подробнее см. ниже).
Launch ffmpeg -s 640×480 -f video4linux2 -i /dev/video0 -f alsa -i hw:1
# С каких адресов может обращаться источник. Если закоментировано — с любых.
# ACL allow 127.0.0.1

# Описываем поток. SWF-файл с FLV-потоком внутри.

# Источник потока
Feed webcam.ffm
# Используемый формат
Format swf
# Используемый кодек
VideoCodec flv
# Частота кадров
VideoFrameRate 4
# Размер буфера
# VideoBufferSize 100
# Битрейт
# VideoBitRate 200
# Минимальное и максимальное качество (1-лучшее, 31-худшее)
VideoQMin 1
VideoQMax 8
# Размер видео. Дожно совпадать с размером видео на источнике
VideoSize 640×480
# Время ожидания перед началом отправки данных клиенту (в секундах)
PreRoll 0
# Если не нужно транслировать звук
# NoAudio

# При обращении к индексной странице ffserver будем отображать текущий статус сервера

Format status

Некоторые параметры у меня закоментированы, оставил для возможности поэкспериментировать читающим эту статью.

Теперь подробнее о строке:

Launch ffmpeg -s 640×480 -f video4linux2 -i /dev/video0 -f alsa -i hw:1

-s 640×480 — разрешение камеры
-f video4linux2 — интерфейс захвата видео в линукс. Еще можно попробовать video4linux если не прокатит video4linux2.
-i /dev/video0 — путь к камере
-f alsa интерфейс для захвата аудио
-i hw:1 — микрофон. Номер можно посмотреть командой:

arecord -l

ffserver

ffserver -d

для вывода информации в процессе отладки.

Заходим через браузер, например если с того же компьютера: http://127.0.0.1:4444/ , попадаем на информационную страницу ffserver-а, где есть ссылка на просмотр видео.

Желательно использование мощного процессора, ffserver занимает одно ядро полностью, на intel atom задержка показа видео составляла около 2-ух секунд, на dual core около секунды.

Источник

Потоковое видео средствами ffserver & ffmpeg

Для организации трансляции нам потребуется:

Теория

FFmpeg — это набор свободных библиотек с открытым исходным кодом, которые позволяют записывать, конвертировать и передавать цифровое аудио и видео в различных форматах. Он включает libavcodec, библиотеку кодирования и декодирования аудио и видео и libavformat, библиотеку мультиплексирования и демультиплексирования в медиаконтейнер. Название происходит от названия экспертной группы MPEG и «FF», означающего «fast forward».

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

Практика

  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 352×288
  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 352×288
  36. PreRoll 0
  37. # Если у вас есть микрофон, или вы транслируете видео со звуком, закомментируйте эту строчку
  38. Noaudio

Пускаем ffserver:
$ ffserver

Пускаем ffmpeg:
$ ffmpeg -s 352×288 -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 352×288 -r 30 -i

Источник

Как организовать потоковое вещание с веб-камеры в linux?

Приветствую!
Всех с наступившим Новым годом 2017!

Пере до мной встала задача организовать потоковое вещание с вебки на линуксе.
Вещание происходит внутри локальной сети, поэтому в качестве протокола передачи хочу использовать rtp, rtsp, или udp — по большому счёту протокол значения не имеет, но думаю не http точно.
На первом месте качество картинки. В windows эта вебка показывает очень хорошо, даже использует подсветку лица в темноте.
Так же очень желательно разделить видео и аудио на 2 разных потока, т.к. в итоге планируется раздельная обработка видео и аудио для разных задач.

На одной машине linux debian с подключенной веб-камерой, ну другой windows на которой я проверяю результаты трансляции с помощью плеера vlc.
В линуксе я не силен и задача довольно специфическая, так что гугл помог не сильно.

Что у меня получилось:

1) Получилось транслировать видео с помощью cv2 на питоне — я понимаю, это дикий костыль, но проверял работоспособность. Меня не устроило то, что качество захвата с веб-камеры при этом способе очень низкое. Изображение плохое и никакие настройки не дали приемлемого результата. Возможно дело в том, что opencv использует свой универсальный драйвер для работы с веб-камерой, но это догадка.

2) Попробовал использовать vlc — но настройки использовал из гугл-примеров. В итоге заработал только такой вариант:

При этом звук вообще отсутствовал, а изображение было серым, с со смазанными конурами того, что есть перед камерой.

3) Использовать ffmpeg вообще не вышло, на смотрящей стороне, воспроизведение хоть и не вызвало никаких ошибок, но изображения не было вовсе, как и звука. Примерный код того, что я писал:

В итоге ни один из вариантов не привёл к удачной трансляции.
Хотелось бы получить помощь с настройкой этой злосчастной трансляции, на которую я уже потратил не один час 🙂

Источник

Трансляция потока с веб-камеры с помощью ffserver

Иногда возникает задача организации трансляции видеопотока с веб-камеры в сеть. Наиболее популярным инструментом для организации такой трансляции является VLC, однако с некоторых пор в составе проекта ffmpeg разрабатывается проект ffserver, позволяющий решать туже самую задачу и имеющий более удобный способ конфигурирования. Далее будет показан пример использования ffserver для организации трансляции с веб-камеры.

Уточним начальные условия:

  1. Сервер под управлением Ubuntu Server 9.10;
  2. Веб-камера Skypemate WC-103M, подключенная к серверу.

Задача: организовать трансляцию с камеры по http в формате flv с возможностью встраивания изображения с камеры в веб-страницы.

Одной из интересных особенностей ffserver является то, что он не транслирует поток сам, а ретранслирует поток с другого источника (примерно так же, как это делает icecast). В связи с этим обычно описывают конфигурации, в которых отдельно сначала запускает ffserver, а потом источник потока (чаще всего ffmpeg). Мы же будем использовать конфигурацию, в которой ffserver сам запускает источник потока.

Приступаем к решению. Для начала установим пакет ffmpeg (ffserver является его частью):

Сразу после установки приступаем к конфигурированию. Для решения задачи достаточно привести файл «/etc/ffserver.conf» к следующему виду:

Более детальную информацию о настройке ffserver можно найти в официальной документации и примере конфигурационного файла от разработчиков продукта.

Запускаем ffserver командой:

Чтобы ffserver автоматически запускался при загрузке сервера нужно добавить эту команду в файл «/etc/rc.local«.

После запуска ffserver можно открыть в браузере адрес «http:// :12345» и увидеть страницу статуса сервера:

На статусной странице сервера кроме информации о состоянии сервера есть так же ссылки на все транслируемые потоки, так что можно сразу их протестировать.

Для картинки с камеры на html-страничку нужно добавить на неё следующий код:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Как удалить другое в mac os
  • Как удалить драйвера в mac os
  • Как удалить вирус с mac os
  • Как удалить ассистент обратной связи mac os
  • Как удалить world of tanks с mac os