Потоковое аудио с микрофона на карманный сфинкс и браузер одновременно - PullRequest
0 голосов
/ 08 февраля 2019

Я хочу одновременно передавать звук с микрофона моего 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

client:

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.

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

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

Здесь будет описано, как настроить сервер потоковой передачи аудио в реальном времени + службу распознавания речи 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) Скомпилировать janus

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) Обновить файл конфигурации janus

Просто замените содержимое файла /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) Установите параметры среды vars

Вам необходимо запустить это в каждом терминале, где вы используете 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) перезапустить apache2

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

Вы должны увидеть что-то вроде «New Audio Stream!»в терминале, где вы запустили 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 (live)» и нажмите «Смотреть или слушать».Вы услышите звук, исходящий из вашего микрофона.Вы можете посетить этот сайт с любого компьютера в локальной сети, заменив 127.0.0.1 на ip-адрес raspberry pi.У меня возникли проблемы с Chrome, используйте Firefox.Мы установили его в 1).Вы можете запустить его из меню или набрав «firefox-esr» в терминале.

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

0 голосов
/ 09 февраля 2019

Как и в Реализация многопотоковости в Gstreamer Вы можете разделить потоки gstreamer на два с помощью плагина tee и транслировать их на отдельные конечные точки:

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

См. Также Документация по плагину Gsteamer Tee .

...