pjsip не может воспроизводить аудио: невозможно открыть файл для воспроизведения: не найдено (PJ_ENOTFOUND) [status = 70006] - PullRequest
0 голосов
/ 23 января 2019

Это не дублированный вопрос, у другого пользователя такая же проблема, но этот вопрос добавляет дополнительную информацию. Я работаю над Ubuntu 18.

Когда я получаю вызов с использованием VoIP и сервера звездочки, происходит сбой сценария Python. Этот скрипт Python работает на другом компьютере, но не на моем. Поэтому я попытался диагностировать зависимость pjsip, потому что проблема возникла оттуда.

Я использую pjsip в качестве зависимости Python Most Voip Library

Процесс установки pjsip следующий:

mkdir -p pjsip
cd pjsip
svn co http://svn.pjsip.org/repos/pjproject/trunk/
cd trunk
./configure CFLAGS='-fPIC' -with-ffmpeg
make dep -j4
make clean
make -j4
sudo make install
cd pjsip-apps/src/python/
python2 setup.py install --user

После этого я использую тестовый двоичный файл для проверки моего компьютера:

./pjsip/trunk/pjsip-apps/bin/pjsystest-x86_64-unknown-linux-gnu

Тестовое меню выглядит следующим образом:

17:54:00.264         os_core_unix.c !pjlib 2.8-svn for POSIX initialized
17:54:00.265         sip_endpoint.c  .Creating endpoint instance...
17:54:00.265                  pjlib  .select() I/O Queue created (0x55d462ccde00)
17:54:00.265         sip_endpoint.c  .Module "mod-msg-print" registered
17:54:00.265        sip_transport.c  .Transport manager created.
17:54:00.265           pjsua_core.c  .PJSUA state changed: NULL --> CREATED
17:54:00.266         sip_endpoint.c  .Module "mod-pjsua-log" registered
17:54:00.266         sip_endpoint.c  .Module "mod-tsx-layer" registered
17:54:00.266         sip_endpoint.c  .Module "mod-stateful-util" registered
17:54:00.266         sip_endpoint.c  .Module "mod-ua" registered
17:54:00.266         sip_endpoint.c  .Module "mod-100rel" registered
17:54:00.266         sip_endpoint.c  .Module "mod-pjsua" registered
17:54:00.266         sip_endpoint.c  .Module "mod-invite" registered
17:54:01.427             alsa_dev.c  ..ALSA driver found 32 devices
17:54:01.427             alsa_dev.c  ..ALSA initialized
17:54:01.427                  pjlib  ..select() I/O Queue created (0x55d462d58e28)
17:54:01.430         sip_endpoint.c  .Module "mod-evsub" registered
17:54:01.430         sip_endpoint.c  .Module "mod-presence" registered
17:54:01.430         sip_endpoint.c  .Module "mod-mwi" registered
17:54:01.430         sip_endpoint.c  .Module "mod-refer" registered
17:54:01.430         sip_endpoint.c  .Module "mod-pjsua-pres" registered
17:54:01.430         sip_endpoint.c  .Module "mod-pjsua-im" registered
17:54:01.430         sip_endpoint.c  .Module "mod-pjsua-options" registered
17:54:01.430           pjsua_core.c  .1 SIP worker threads created
17:54:01.430           pjsua_core.c  .pjsua version 2.8-svn for Linux-4.15.0.43/x86_64/glibc-2.27 initialized
17:54:01.430           pjsua_core.c  .PJSUA state changed: CREATED --> INIT
17:54:01.430           pjsua_core.c  PJSUA state changed: INIT --> STARTING
17:54:01.430         sip_endpoint.c  .Module "mod-unsolicited-mwi" registered
17:54:01.430           pjsua_core.c  .PJSUA state changed: STARTING --> RUNNING
M E N U :
---------
0: Tests
  00: Run test wizard
  01: Device Test
  02: Play Tone
  03: Play WAV File1
  04: Play WAV File2
  05: Record Audio
  06: Latency Test
  07: AEC/AES Test

  09: Exit
1: Options
  10: View Devices
  11: View Settings

Enter the menu number: 03

При выборе опции 03 я получаю следующий вывод:

This test will play input.8.wav file to the speaker. Please listen carefully for audio impairments such as stutter. Let this test run for a while to make sure that everything is okay. Press OK to start, CANCEL to skip
1:OK  9:Cancel  
1
17:54:28.350              systest.c  Running WAV File Playback Test
17:54:28.350            pjsua_aud.c  Creating file player: input.8.wav..
17:54:28.350            pjsua_aud.c  .Unable to open file for playback: Not found (PJ_ENOTFOUND) [status=70006]
17:54:28.351            pjsua_aud.c  Creating file player: ../../tests/pjsua/wavs/input.8.wav..
17:54:28.351           wav_player.c  .File player '../../tests/pjsua/wavs/input.8.wav' created: samp.rate=8000, ch=1, bufsize=4KB, filesize=67KB
17:54:28.351            pjsua_aud.c  .Player created, id=0, slot=1
17:54:28.351            pjsua_aud.c  Conf connect: 1 --> 0
17:54:28.351            pjsua_aud.c  .Set sound device: capture=-1, playback=-2
17:54:28.351            pjsua_aud.c  ..Opening sound device (speaker + mic) PCM@8000/1/20ms
17:54:28.412           conference.c !.Port 1 (../../tests/pjsua/wavs/input.8.wav) transmitting to port 0 (default)

Это та же проблема, что и мой скрипт Python, когда я получаю входящий вызов:

Incoming call from "test_user" <sip:test_user@192.168.30.30>
in _start_call_sound_in
[Wed Jan 23 17:56:31 2019] 17:56:31.426            pjsua_aud.c  ...Unable to open file for playback: Not found (PJ_ENOTFOUND) [status=70006]
Unhandled exception in thread started by <function _worker_thread_main at 0x7fb34d50ba28>
Traceback (most recent call last):
  File "/home/ubuntu_user/.local/lib/python2.7/site-packages/pjsua.py", line 2951, in _worker_thread_main
    time.sleep(0.050)
  File "/home/ubuntu_user/.local/lib/python2.7/site-packages/pjsua.py", line 2899, in _cb_on_incoming_call
    _lib._cb_on_incoming_call(acc_id, call_id, rdata)
  File "/home/ubuntu_user/.local/lib/python2.7/site-packages/pjsua.py", line 2781, in _cb_on_incoming_call
    acc._cb.on_incoming_call( Call(self, call_id) )
  File "/home/ubuntu_user/.local/lib/python2.7/site-packages/most/voip/api_backend.py", line 602, in on_incoming_call
    _start_call_sound_in()
  File "/home/ubuntu_user/.local/lib/python2.7/site-packages/most/voip/api_backend.py", line 128, in _start_call_sound_in
    player_in_id = pj.Lib.instance().create_player(sound_file,loop=True)
  File "/home/ubuntu_user/.local/lib/python2.7/site-packages/pjsua.py", line 2579, in create_player
    self._err_check("create_player()", self, err)
  File "/home/ubuntu_user/.local/lib/python2.7/site-packages/pjsua.py", line 2723, in _err_check
    raise Error(op_name, obj, err_code, err_msg)
pjsua.Error: Object: Lib, operation=create_player(), error=Not found (PJ_ENOTFOUND)

Проблема связана с pjsip и связана с воспроизведением потокового аудио.

Ubuntu по умолчанию использует ALSA, и кажется, что все работает. У меня есть утилиты sox, и я правильно играю wav-файлы.

  • ОБНОВЛЕНИЕ: Кажется, что PJ_ENOTFOUND - это просто распространенная ошибка, которая не может найти файл для воспроизведения. Проблема с тестом - просто путь. Перемещение файла wav в двоичный путь make работает без ошибок. Проблема с оболочкой Python другая.

Некоторые идеи?

1 Ответ

0 голосов
/ 24 января 2019

После отладки библиотеки python я обнаружил, что при поступлении вызова попытаться использовать файл wav. Я установил библиотеку python, используя опцию --user, и точка, в которой библиотека искала файл, была неверной.

При использовании опции --user выполняется установка по нестандартному системному пути. При поступлении вызова wav-файл не будет найден, и библиотека Python аварийно завершится. Чтобы решить эту проблему, просто добавьте символическую ссылку на правильный путь:

sudo ln -s /usr/local/lib/python2.7/dist-packages/data/ ${HOME}/.local/lib/python2.7/site-packages/
ls # output shall contain sounds folder

С помощью этой ссылки библиотека принимает звонки, воспроизводя wav-файл.

...