SIP Core / sip-call-card: no audio playback on iPad (Android OK)

від

у

SIP Core / sip-call-card: немає відтворення аудіо на iPad (Android працює)

Привіт усім,

Я дебажу проблему з TECH7Fox SIP Core + sip-call-card, де дзвінки підключаються нормально на iPad, але я не чую жодного аудіо на iPad (вхідне аудіо мовчить). Це працює ідеально на Android та настільних браузерах.

Це використовується для домофону (Mobotix T26) через Asterisk (додатки HA OS), але проблема НЕ є специфічною для Mobotix: я також не отримую аудіо, коли телефоную на iPad з Linux SIP-клієнта.

Середовище

Home Assistant Core: 2026.1

SIP Core: 5.0.2 (через HACS / Tech7Fox)

Додаток Asterisk: Tech7Fox Asterisk add-on (HA OS)

iPad: iPad 10-го покоління, iPadOS 17.5.1

Тестовані клієнти на iPad:

Safari

Chrome (iOS)

Додаток Home Assistant Companion

→ Жоден не має аудіо

Android телефон працює (аудіо в обох напрямках)

Симптоми

iPad дзвонить і відповідає на дзвінок (сесія WebRTC встановлюється)

Напрямок мікрофона (iPad → двері / Asterisk) працює

Але напрямок динаміка (двері / Asterisk → iPad) мовчить

Asterisk показує, що RTP тече в обох напрямках

Запис MixMonitor захоплює аудіо правильно → аудіо існує на стороні Asterisk

Інформація про кодеки Asterisk

З CLI core show channel … я бачу погоджені кодеки, такі як:

NativeFormats: (ulaw)
WriteFormat: ulaw
ReadFormat: ulaw
WriteTranscode: No
ReadTranscode: No

NativeFormats: (opus)
WriteFormat: slin48
ReadFormat: slin48
WriteTranscode: Yes (slin@48000)->(opus@48000)
ReadTranscode: Yes (opus@48000)->(slin@48000)

Отже, переговори кодеків виглядають нормально.

Дебаг RTP Asterisk показує, що RTP тече

Типові рядки дебагу RTP під час дзвінка:
Отримано RTP пакет від 192.168.0.180:58518 (тип 00, seq …, len 000170)
Відправлено RTP пакет на 192.168.0.60:7078 (тип 00, seq …, len 000160)

… (і навпаки) …

Відправлено RTP пакет на 192.168.0.180:58518 (через ICE) (тип 00, seq …, len 000170)
Отримано RTP пакет від 192.168.0.180:58518 (тип 00, seq …, len 000170)

також повідомлено:

Суворе навчання RTP після завершення ICE
Суворе навчання RTP завершено – блокування на адресі джерела …

Отже, ICE + RTP виглядають активними.

Примітка щодо IPv6

iPad завжди пропонує кандидати ICE IPv6 (неможливо відключити IPv6 на iPad/роутері).

Я бачу кандидати IPv4 та IPv6 у SDP; Asterisk успішно блокується на адресах джерел.

Поточна конфігурація кінцевої точки Asterisk PJSIP (Mobotix)

витяг з pjsip.conf:

[8001]
type=endpoint
context=from-door
disallow=all
allow=ulaw
allow=alaw
direct_media=no
rtp_symmetric=yes
force_rport=yes
rewrite_contact=yes

aors=8001
auth=8001

[8001]
type=aor
max_contacts=1
remove_existing=yes

[8001]
type=auth
auth_type=userpass
username=8001
password=xxx

rtp.conf

[general]
rtpstart=10000
rtpend=20000
icesupport=yes
stunaddr=stun.l.google.com:19302
rtp_ipv6=no

План набору

Я спробував багато варіантів плану набору. Основний поточний тест:

[from-door]
exten => 8001,1,NoOp(Дзвінок з дверей -> iPad)
same => n,Dial(PJSIP/104,30)
same => n,Hangup()

Я також спробував ідеї раннього відповіді/відтворення прогріву, але iPad все ще мовчить.

sip-call-card YAML

type: custom:sip-call-card
extensions:
“100”:
name: morly
“101”:
name: marina
“102”:
name: tablet
override_icon: mdi:doorbell
video: true
ice_gathering_timeout: 5000
buttons: []

ВАЖЛИВО: помилки консолі Safari (навіть до дзвінків)

У консолі Safari на iPad я постійно отримую:

Необроблене відхилення обіцянки: TypeError: undefined не є об’єктом
(оцінка ‘this.config?.buttons.map’)

Це повторюється дуже часто в консолі.

Спостереження за налагодженням DOM

Використовуючи інструменти розробника Safari, я перевірив компонент:

document.querySelectorAll(“sip-call-card”).length повертає 0 (але це може бути тому, що HA використовує shadow DOM)

Я можу знайти елемент sip-call-dialog, і він має конфігурацію (включаючи масив кнопок)

Приклад:

const d = document.querySelector(“sip-call-dialog”);
d?.config?.buttons

Доказ MixMonitor, що аудіо існує

Я записав дзвінок на стороні сервера:

Використаний план набору:

[from-door]
exten => 8001,1,NoOp(Дзвінок з дверей -> iPad (тест запису))
same => n,Set(__RECFILE=/share/door-${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}.wav)
same => n,MixMonitor(${RECFILE},a)
same => n,Dial(PJSIP/104,30)
same => n,Hangup()

Результат: WAV містить правильне аудіо (сторона дверей), але iPad все ще мовчить.

Що я шукаю / запитання

Чи є це відомою проблемою WebRTC / автозапуску / аудіо-виходу для iPadOS 17 з sip-call-card / sip-core?

Чи є помилка buttons.map у консолі відомим багом? (конфігурація кнопок, здається, є обов’язковою для уникнення помилок під час виконання?)

Чи створює/додає картка свій елемент

Чи є рекомендована конфігурація, щоб примусити аудіо вихід на iPad (маршрут динаміка)?

Дякую!

Вкладення, які я можу надати

SIP / RTP логи з Asterisk (pjsip set logger on, rtp set debug on)

Скріншоти консолі Safari на iPad

повну конфігурацію YAML та SIP Core

1 пост – 1 учасник

Читати повну тему

HI-FI Новини

через Home Assistant Community – Останні теми

January 10, 2026 at 11:07AM