Потоковая передача звука с микрофона на pocketsphinx и браузер одновременно

Я хочу передавать звук с микрофона моего Raspberry Pi в пользовательское приложение pocketsphinx и браузер одновременно. Как бы я это сделал? Сначала я хочу, чтобы он работал в моей локальной сети, но эту технику можно использовать и в глобальной сети.

Что у меня уже есть:

сервер:

gst-launch-1.0 alsasrc ! audio/x-raw, endianness=1234, signed=true, width=16, depth=16, rate=44100, channels=1, format=S16LE ! audioconvert ! audioresample ! tcpserversink host=127.0.0.1 port=3000

клиент:

gst-launch-1.0 tcpclientsrc host=127.0.0.1 port=3000 ! audio/x-raw, endianness=1234, signed=true, width=16, depth=16, rate=44100, channels=1, format=S16LE ! audioconvert ! audioresample ! pocketsphinx ! fakesink

Я бы заменил 127.0.0.1 на локальный IP-адрес моего потокового сервера.

Кажется, это отлично работает с pocketsphinx. Но как мне адаптировать команду для потоковой передачи в браузер? У меня установлен сервер Apache2 html + PHP. Когда клиент заходит на мой сайт, я хочу, чтобы он слышал звук с микрофона, а другому приложению на компьютере в то же время нужен pocketsphinx.


person Tom Atix    schedule 08.02.2019    source источник


Ответы (2)


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

Здесь будет описано, как настроить сервер потокового аудио в реальном времени + службу распознавания речи pocketsphinx на raspberry pi. Должен работать и на других дистрибутивах Linux.

1) Установить пакеты

sudo apt-get install gstreamer-1.0 gstreamer1.0-tools apache2 libapache2-mod-php libopus-dev libmicrohttpd-dev libjansson-dev libssl-dev libsrtp-dev libsofia-sip-ua-dev libglib2.0-dev libopus-dev libogg-dev libcurl4-openssl-dev liblua5.3-dev libconfig-dev pkg-config gengetopt libtool automake git bison python-dev swig make gedit firefox-esr

2) Скомпилировать янус

git clone https://github.com/meetecho/janus-gateway
cd janus-gateway
sh autogen.sh
./configure --prefix=/opt/janus
make -j4
sudo make install
sudo make configs
cd ..

3) Скомпилируйте cmusphinx

git clone https://github.com/cmusphinx/sphinxbase
git clone https://github.com/cmusphinx/pocketsphinx
git clone https://github.com/cmusphinx/sphinxtrain
cd sphinxbase
./autogen.sh
make -j4
sudo make install
cd ..
cd pocketsphinx
./autogen.sh
make -j4
sudo make install
cd ..
cd sphinxtrain
./autogen.sh
make -j4
sudo make install
cd ..
pip install pocketsphinx

4) Обновить конфигурационный файл януса

Просто замените содержимое /opt/janus/etc/janus/janus.plugin.streaming.jcfg следующим:

; You should ensure that one of the streams configured for Janus is the
; following. You need to edit 
;
;       /opt/janus/etc/janus/janus.plugin.streaming.cfg
;
; and add/modify it to have the following section. Make sure all other
; sections in that file are commented out/deleted.

[gstreamer-sample]
type = rtp
id = 1
description = Opus/VP8 live stream coming from gstreamer
audio = yes
audioport = 5002
audiopt = 111
audiortpmap = opus/48000/2
secret = adminpwd

5) Установите переменные среды

Вам нужно запустить это в каждом терминале, где вы используете pocketsphinx, вместо этого вы можете добавить это в свой файл .bashrc:

export LD_LIBRARY_PATH=/usr/local/lib 
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

6) Скопируйте содержимое janus-gateway/html в каталог apache2 (возможно, /var/www/html)

sudo cp -a janus-gateway/html/. /var/www/html

7) Установите звук по умолчанию на звуковую карту USB и перезагрузите компьютер.

gedit /usr/share/alsa/alsa.conf

покажет:

defaults.ctl.card 0
defaults.pcm.card 0

изменить его на:

defaults.ctl.card 1
defaults.pcm.card 1

перезагрузка:

sudo reboot

8) перезапустить апач2

sudo service apache2 restart

9) запустить янус

janus -F /opt/janus/etc/janus

10) Запустите команду gstreamer 1:

gst-launch-1.0 alsasrc ! audio/x-raw, endianness=1234, signed=true, width=16, depth=16, rate=44100, channels=1, format=S16LE ! tee name=t \
    t. ! queue ! audioconvert ! audioresample ! tcpserversink host=127.0.0.1 port=3000 \
    t. ! queue ! audioresample ! audio/x-raw, channels=1, rate=16000 ! opusenc bitrate=20000 ! rtpopuspay ! udpsink host=127.0.0.1 port=5002

Вы должны увидеть что-то вроде «Новый аудиопоток!» в терминале, где вы запустили janus.

11) Запустите команду gstreamer 2:

gst-launch-1.0 tcpclientsrc host=127.0.0.1 port=3000 ! audio/x-raw, endianness=1234, signed=true, width=16, depth=16, rate=44100, channels=1, format=S16LE ! audioconvert ! audioresample ! pocketsphinx ! fakesink

**) Готово!

Вы можете перейти по адресу http://127.0.0.1/streamingtest.html, нажать "Пуск" в плагине. Демонстрация: на вкладке «Потоковая передача» выберите «Прямая трансляция Opus/VP8, исходящая от gstreamer (в прямом эфире)» и нажмите «Смотреть или слушать». Вы услышите звук, исходящий из вашего микрофона. Вы можете посетить этот сайт с любого компьютера в локальной сети, заменив 127.0.0.1 на IP-адрес Raspberry Pi. У меня возникли проблемы с хромом, используйте firefox. Мы установили его в 1). Вы можете запустить его из меню или набрав «firefox-esr» в терминале.

Вы можете проверить pocketsphinx/src/gst-plugin/livedemo.c или liveemo.py, чтобы узнать, как использовать pocketsphinx с gstreamer.

person Tom Atix    schedule 09.02.2019