Стриминг аудио потока на веб-страницу.

924 views
Skip to first unread message

Lowercase Char

unread,
Oct 3, 2013, 1:08:08 AM10/3/13
to stream...@googlegroups.com
Друзья, здравствуйте, прошу помощи.
Решаю задачу стриминга аудио потока с микрофона одной из машин в сети с минимальной задержкой.
Возможно моё решение не самое лучшее, но иду я таким путём (задержка звука 1,5 секунды):

Транслирую аудио поток с микрофона одной из машин на другую (point to point в документации ffmpeg) в локальной сети с помощью ffmpeg таким образом:

ffmpeg -f alsa -i default -acodec libmp3lame -ab 32k -ac 1 -re -f rtp rtp://192.168.1.111:7000/

Этот RTP-поток могу прочитать соответственно двумя методами:
1) с помощью консольной утилиты ffplay, указывая параметром адрес потока (rtp://192.168.1.111:7000/).
2) с помощью VLC Media Pleer'а, открывая тот же поток.

Цель: хочу транслировать этот поток на обычной веб-странице.
Каким образом можно решить проблему?
Хотелось бы, конечно, реализовать задачу с помощью обычного тега audio на странице, который будет воспроизводить поток.
Но возможно и использование каких-либо сторонних плееров на странице.

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

Хочется задействовать flussonic сервер в работе, так как вскоре будет много машин, с которых будет нужно брать звуковой поток.
И задействовав медиа сервер получить постоянные адреса потоков с разных машин. Чтобы потом их было просто yield'ить в код страницы.
Хотя предназначение выше описанного медиа сервера сосредоточено именно на видео потоках, думаю, возможно, можно также гонять через него и аудио потоки.

Разъясните, пожалуйста. Заранее благодарен.

Lowercase Char

unread,
Oct 3, 2013, 1:19:17 AM10/3/13
to stream...@googlegroups.com
Также есть идея использования в решении ip-камер, в которых, как я понимаю, звуковой и видео потоки разделены.
Однако я не имел опыта работы с такого рода камерами и не уверен в этом.
Может быть использование такой камеры решит мою задачу, создавая годный для транслирования в браузере поток, и не нужно будет использовать ffmpeg для создания аудио-потока с внешнего микрофона?

И, возможно, это решение в будущем будет более простым в интеграции с медиа-сервером, чем тот велосипед, который я создаю сейчас?

Anatoly Shipitsin

unread,
Oct 3, 2013, 1:20:09 AM10/3/13
to stream...@googlegroups.com
А что мешает использовать банальный icecast?



2013/10/3 Lowercase Char <harry....@gmail.com>

--
Вы получили это сообщение, поскольку подписаны на группу streaming-ru.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес streaming-ru...@googlegroups.com.
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.

Lowercase Char

unread,
Oct 3, 2013, 1:12:26 PM10/3/13
to stream...@googlegroups.com
Спасибо за ответ. Но сервер icecast2 (как сервер) + ices2 (для передачи звука с микрофона на сервер) при стандартной конфигурации создаёт задержку, около 20 секунд минимум, даже если отдача/получение потока происходит в локальной сети.
Поиск решения оптимизации сервера, в целях уменьшения задержки звука, даёт конфигурацию сервера с которой можно выжать значение минимум 6 секунд, но потом идут проблемы с буфером и delay увеличивается до 30 секунд и более.
http://stackoverflow.com/questions/17133689/icecast-and-darkice-combination-for-live-streaming/17151097#17151097

В моей же задаче одним из приоритетных аспектов является приближенная к real-time передача звука с микрофона.
И как видно из этой статьи ( How To Stream Live Audio from your Mic in Real Time - http://ubuntuforums.org/archive/index.php/t-1544946.html ), оптимальным решением является создание rtp потока средствами ffmpeg.

RTP поток генерируемый, ffmpeg'ом, как я понимаю не буфферизируется, так как поток передаётся по аналогии с UDP протоколом, не заботясь о обязательном доставке информации. Поэтому, как я понимаю, нужно как-то этот RTP поток конвертировать в формат, который будет понимать браузер (например OGG) и транслировать на странице с помощью тегов audio или видео. В это случае задержка, на мой взгляд, будет минимальна (1,5 секунды + какое-то время на конвертацию, думаю около 3 секунд можно выжать).

Кстати, есть решение с использованием TeamSpeak сервера и клиентов. В пределах локальной сети он выдаёт очень хорошие результаты почти без задержки. Но тут нужно использовать исключительно стороннее приложение TeamSpeak и поток в браузер никак не интегрируешь.
Интересно, какой механизм используют они? :)

Artem Miolini

unread,
Oct 3, 2013, 10:56:23 PM10/3/13
to stream...@googlegroups.com
А если использовать udpxy? Или (если браузер не поймет поток) модифицировать?


2013/10/3 Lowercase Char <harry....@gmail.com>

--

Max Lapshin

unread,
Oct 4, 2013, 8:11:08 AM10/4/13
to stream...@googlegroups.com
Зачем вообще аудиосерверу буфер?

Каким плеером вы играете?

Lowercase Char

unread,
Oct 4, 2013, 6:38:32 PM10/4/13
to stream...@googlegroups.com
Max, возможно я неправильно выразился, может быть это не буффер.
Но после включения потока звука с микрофона посредством ices2 или darkice накапливаются какие-то паузы.
В результате чего после прослушивания минуты онлайна этого потока получается, что время между сказанным в микрофон и услышанным из колонок становится около минуты.
И чем дальше - тем дольше.

Поток слушал через ffplay и vlc.

Нашёл новый способ стримить звук с микрофона посредоством VLC, в консоли пишу так:

cvlc -vvv pulse://alsa_input.pci-0000_00_1b.0.analog-stereo --sout '#transcode{acodec=mpga,ab=128,channels=2}:standard{access=http,dst=0.0.0.0:8080/pc.mp3}'

В результате получаю доступный в сети поток звука с микрофона по адресу http://IP_ADRESS_MACHINE:8080/pc.mp3, который могу слушать с любой тачки в сети через VLC, например.
И вроде бы всё хорошо: и http протокол и формат потока mpeg.
Но на странице ни тегом audio (не вопроизводится звук), ни video (пишет, что mime тип не поддерживается), ни даже jwplayer'ом открывать поток не хочет.

Беда.
Reply all
Reply to author
Forward
0 new messages