2013-11-11 3 views
0

У меня есть два клиента SIP («A» и «B»), подключенные к звездочке в режиме общего моста.Asterisk API SDP Handling

Видео «А» воспроизводится на «В», но видео «В» НЕ Воспроизведение на «А». Я triple проверил с проводами, что медиа (аудио/видео) прибывает на IP-адрес «А». Аудио работает с обеих сторон.

Мое лучшее предположение, что эта проблема связана с внутренней обработкой SDP звездочки.

Итак, давайте углубимся в проблему.

"A" посылает followind INVITE:

INVITE sip:[email protected] SIP/2.0 
Via: SIP/2.0/UDP 192.168.7.225:10074;branch=z9hG4bK-224696310;rport 
From: "danflu-portsip"<sip:[email protected]>;tag=87652133 
To: <sip:[email protected]> 
Contact: <sip:[email protected]:10074;transport=udp>; 
Call-ID: YTc0NDRjNDYtMWRhMS01MzE2LWVlNDEtYmV 
CSeq: 1354707857 INVITE 
Content-Type: application/sdp 
Content-Length: 447 
Max-Forwards: 70 
Authorization: Digest username="danflu-portsip",realm="asterisk",nonce="5ac40c6d",uri="sip:[email protected]",response="fae8a78ba97 2f6cb0c76846d76f13786",algorithm=MD5 
User-Agent: PortSIP SDK for IOS 
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, REGISTER, SUBSCRIBE, INFO 
P-Preferred-Identity: <sip:[email protected]> 
Supported: 100rel 

v=0 
o=portsip 2013 678901 IN IP4 192.168.7.225 
s=- 
c=IN IP4 192.168.7.225 
t=0 0 
m=audio 20554 RTP/AVP 8 0 97 18 
a=ptime:20 
a=rtpmap:8 PCMA/8000 
a=rtpmap:0 PCMU/8000 
a=rtpmap:97 SPEEX/8000 
a=rtpmap:18 g729/8000 
a=fmtp:18 annexb=yes 
a=sendrecv 
a=ssrc:258325709 cname:258325709 
m=video 29350 RTP/AVP 104 
a=rtpmap:104 H264/90000 
a=fmtp:104 profile-level-id=42801E; packetization-mode=1 
a=sendrecv 
a=ssrc:1956389748 cname:1956389748 

и получает "200 OK" сообщение от Звездочка:

SIP/2.0 200 OK 
Via: SIP/2.0/UDP 192.168.7.225:10010;branch=z9hG4bK-282879312 received=192.168.7.225;  
rport=10010 
From: "danflu-portsip"<sip:[email protected]>;tag=539964865 
To: <sip:[email protected]>;tag=as1b6086b5 
Call-ID: OTE4MjM3NzUtMDIzNy1mNTM1LWM3MzYtOGZ 
CSeq: 1074035624 INVITE 
Server: Asterisk PBX SVN-branch-1.8-r402287M 
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH 
Supported: replaces, timer 
Contact: <sip:[email protected]7.227:5060> 
Content-Type: application/sdp 
Content-Length: 375 

v=0 
o=root 826339596 826339596 IN IP4 192.168.7.227 
s=Asterisk PBX SVN-branch-1.8-r402287M 
c=IN IP4 192.168.7.227 
b=CT:384 
t=0 0 
m=audio 9540 RTP/AVP 8 0 101 
a=rtpmap:8 PCMA/8000 
a=rtpmap:0 PCMU/8000 
a=rtpmap:101 telephone-event/8000 
a=fmtp:101 0-16 
a=silenceSupp:off - - - - 
a=ptime:20 
a=sendrecv 
m=video 7450 RTP/AVP 104 
a=rtpmap:104 H264/90000 
a=sendrecv 

Обратите внимание, что линии:

a = fmtp: 104 profile-level-id = 42801E; пакетирование режим = 1

и

а = SSRC: 1956389748 CNAME: 1956389748

просто исчез в ответ, и я действительно думаю, вот причина видео не работает.

Итак, мой вопрос:

Что API можно использовать для настройки поведения, поэтому строки выше не удаляются, когда Asterisk обрабатывает SDP с обеих сторон? Если нет официального API, где я могу посмотреть в коде для этого? Значит, я мог бы написать патч для моей конкретной ситуации?

Я посмотрел в chan_sip.c и есть функция:

статические INT process_sdp (структура sip_pvt * р, структура sip_request * REQ, внутр t38action)

Но я не уверен, что эта обработка SDP (удаление линий и т. п.) выполняется с помощью ядра звездочки или с помощью драйвера канала sip.

Thanks

ответ

0

Asterisk видео очень странно. Becuase asterisk не транскодирует для видеокодеков/потоков.

Только действительно рабочий режим - все видеокодеки отключены, и только один кодек включен для всех одноранговых узлов.

Для получения дополнительной информации см Asterisk Video on voip-info.org

+0

Спасибо за ответ. Знаете ли вы, что эта «фильтрация» SDP выполняется «ядром» Asterisk или только драйвером канала SIP? – user1558688

+1

ядро ​​не знаю ничего о SDP. Фильтров нет, есть кодеки. Транскодирование для видео не реализовано. Предпочтение реализовано, но не работает. Повторное приглашение (начало видео после запуска звука) реализовано, но зависит от программных телефонов/телефонов с обеих сторон. – arheops

+0

Итак, кто удаляет линии SDP, это драйвер канала SIP (chan_sip.c), правильно? В основном мне нужно понять его внутреннюю работу и исправить ее там. Другая возможность - реализовать прокси-сервер SIP между устройством sip и звездочкой и фильтровать все данные в самом прокси. Есть ли у вас какие-либо другие идеи, предложения? Большое спасибо ! – user1558688

Смежные вопросы