WebRTC streamer for V4L2 capture devices and RTSP sources.
https://habrahabr.ru/post/229243/,/
https://github.com/geraldo/nodeStream
Потоковое видео средствами ffserver & ffmpeg
https://habrahabr.ru/post/78677/
Для организации трансляции нам потребуется:
- Linux
- FFmpeg (включает в себя ffserver)
Теория
FFmpeg — это набор свободных библиотек с открытым исходным кодом, которые позволяют записывать, конвертировать и передавать цифровое аудио и видео в различных форматах. Он включает libavcodec, библиотеку кодирования и декодирования аудио и видео и libavformat, библиотеку мультиплексирования и демультиплексирования в медиаконтейнер. Название происходит от названия экспертной группы MPEG и «FF», означающего «fast forward».
© Wikipedia
ffserver идёт в комплекте с ffmpeg и выполняет роль медиа-сервера — получает видеопоток от ffmpeg, который может быть запущен на другой машине, и раздаёт его счастливым пользователям.
Каждый получаемый поток называется Feed’ом (далее будет просто фид). Таких потоков может быть несколько, так же как и отдаваемых (выходных).
FFmpeg у нас будет захватывать видео с веб-камеры или читать из файла.
Практика
Сначала настроим ffserver, чей конфиг лежит в /etc/ffserver.conf:
Port 8090
BindAddress 0.0.0.0
MaxClients 100
MaxBandwidth 20000
NoDaemon
# Фид, надо запомнить feed.ffm, он нам потребуется при запуске ffmpeg
<Feed feed.ffm>
File /tmp/feed.ffm
FileMaxSize 3M
</Feed>
<Stream test.flv>
# Ранее объявленный фид
Feed feed.ffm
Format flv
VideoCodec flv
VideoFrameRate 30
VideoBufferSize 80000
VideoBitRate 200
# Качество видео от 1 до 31, 1 == отлично 31 == фи!
VideoQMin 1
VideoQMax 5
# Разрешение, везде должно быть одинаково!
VideoSize 352x288
PreRoll 1
# Если у вас есть микрофон, или вы транслируете видео со звуком, закомментируйте эту строчку
Noaudio
</Stream>
# Флешка test.swf для просмотра трансляции
<Stream test.swf>
Feed feed.ffm
# Будет запускаться в Adobe Flash Player
Format swf
VideoCodec flv
VideoFrameRate 30
VideoBufferSize 50000
VideoBitRate 100
VideoQMin 1
VideoQMax 5
# Разрешение, везде должно быть одинаково!
VideoSize 352x288
PreRoll 0
# Если у вас есть микрофон, или вы транслируете видео со звуком, закомментируйте эту строчку
Noaudio
</Stream>
Пускаем 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-страницу используем следующий код:<embed src="http://localhost:8090/test.swf" width="550" height="400"></embed>
.
Это пытаются трансляция видео источников с помощью технологии webrtc, используя простой механизм.
Сигналка с webrtc осуществляется через http-запросы:
-
/звонок : отправить предложение и получить ответ
-
/слайдера : закрыть вызова
-
/addIceCandidate : добавить кандидата
-
/getIceCandidate : попасть в список кандидатов
Список запросов http API доступен через /помочь.
- для x86_64 на Ubuntu надежный
- для ARM crosscompiling с ССЗ-организацией linaro-АРМ-ОС Linux-gnueabihf-raspbian-х64 (эта сборка работает на Raspberry Pi и NanoPi Нео)
-
В настоящее время существует 2 опирается на Трэвиса ки :
-
1. Скачали установочный архив сервера:
$wget flashphoner.com/downloads/builds/WCS/3.0/x8664/wcs3_video_vp8/FlashphonerMediaServerWebRTC-3.0/FlashphonerMediaServerWebRTC-3.0.868.tar.gz
2. Развернули:
$tar -xzf FlashphonerMediaServerWebRTC-3.0.868.tar.gz
3. Установили:
$cd FlashphonerMediaServerWebRTC-3.0.868
$./install.sh
В процессе установки ввели внешний IP адрес сервера: 54.186.112.111 и внутренний 172.31.20.65 (тот что Private IP).
4. Запустили сервер:
$service webcallserver start
5. Проверили логи:
$tail — f /usr/local/FlashphonerWebCallServer/logs/server_logs/flashphoner.log
6. Убедились, что сервер стартовал и готов к работе:
$ps aux | grep Flashphoner
7. Установили и запустили apache:
$yum install httpd
$service httpd start
8. Скачали web-файлы и расположили их в стандартной папке апача /var/www/html
cd /var/www/html
$wget github.com/flashphoner/flashphoner_client/archive/wcs_media_client.zip
$unzip webrtc_media_client.zip
9. Вписали IP адрес сервера в конфиг flashphoner.xml:
10. Остановили firewall.
$service iptables stop
Добавить комментарий
Обратная связь
Интересуют вопросы реализации алгоритмов, программирования, выбора электроники и прочая информация, постараюсь осветить в отдельных статьях
пишите мне на netdm@mail.ru