Seriál: Programujeme pre Android 26 / Session Initiation protocol API

1

Nie je žiadnym prekvapením, že Android API (od verzie 9) obsahuje podporu SIP protokolu a to vo forme automatizovaných služieb, pomocou ktorých manažuje prichádzajúce a odchádzajúce hovory. SIP spojenia spravuje pomocou tried SipManager a SipSession. Tie pracujú plne autonómne bez toho aby bol programátor nútený riešiť detaily ako napr. manažment spojení (sessions), spôsob komunikácie na transportnej vrstve, spracovanie zvuku a podobne. V tejto, poslednej časti seriálu o programovaní pre Android, si bližšie predstavíme protokol SIP a to najmä z programátorského hľadiska. Následne si v krátkosti popíšeme spomínané triedy Android SIP API.

SIP handshake

Správy (požiadavky, odpovede) protokolu SIP sú textového formátu, ktorý pripomína správy protokolu HTTP. Sú posielané asynchrónne pričom na jednu požiadavku môže byť generovaných viacero odpovedí. Väčšina aplikácií je teda nútená riešiť spracovanie a diferenciáciu viacerých prijatých odpovedí. Pretože SIP dokáže pracovať aj nad nespoľahlivým transportným kanálom (unreliable UDP) SIP správy nemusia byť vždy doručené. Naviac pretože SIP je tzv. peer-to-peer protokol, aplikácie zväčša implementujú nielen posielanie vlastných požiadaviek, ale aj príjem požiadaviek zaslaných iným zariadením (inou aplikáciou).

Proces vytvorenia SIP spoja súvisí so zasielaním požiadaviek, resp. príjmom odpovedí a v neposlednom rade s vymieňaním stavových informácií (kódov), ktoré prechádzajú IP komunikačným kanálom:

1. Volajúci zašle volanému požiadavku SIP INVITE
2. Volaný zašle volajúcemu odpoveď so stavovým kódom „180 Zvoní“ indikujúcim, že koncové zariadenie vyzváňa (upozorňuje volaného na prichádzajúci hovor)
3. Volaný po zdvihnutí zašle volajúcemu odpoveď s kódom „200 OK“ indikujúcim, že hovor bol akceptovaný
4. Volajúci potvrdí akceptáciu hovoru správou so stavovým kódom „ACK“
5. Prebieha samotná konverzácia štandardne s využitím protokolu SIP (v prípade krátkych správ), resp. protokolu RTP (v prípade hlasu a videa)
6. Po skončení konverzácie volaný, alebo volajúci, zašle požiadavku s kódom „SIP BYE“
7. Druhá strana odpovedá kódom „200 OK“ čím konverzácia končí


Obr. 1 SIP handshake

SIP three-way handshake

Koncoví účastníci nikdy nevystupujú samostatne, ale komunikácia prebieha prostredníctvom SIP Proxy a SIP Registrar serverov. Pôvodný dvojstupňový handshake sa tak rozširuje na nasledujúci trojstupňový proces:

1. Volaný sa registruje na Registrar serveri
2. Registrar akceptuje registráciu kódom „200 OK“
3. Volajúci vytvára komunikačný kanál zaslaním požiadavky INVITE (s príslušnými SDP detailami) Proxy serveru
4. Proxy získa adresu volaného z Registrara, na ktorom sa volaný registroval
5. Proxy prepošle požiadavku INVITE volanému
6. Volaný akceptuje požiadavku zaslaním odpovede „200 OK“ (odpoveď zväčša obsahuje SDP informácie týkajúce sa komunikačných možností volaného)
7. Proxy prepošle kód „200 OK“ volajúcemu
8. Volajúci potvrdí nadviazanie spoja zaslaním „ACK“ Proxy serveru
9. Proxy prepošle „ACK“ volanému
10. Medzi volajúcim a volaným prebieha konverzácia
11. Volaný ukončí konverzáciu zaslaním „BYE“ volajúcemu
12. Volajúci odpovedá kódom „200 OK“ a konverzácia končí


Obr. 2 SIP three-way handshake

Android SIP API

API Androidu natívne podporuje komunikáciu pomocou SIP protokolu, pričom má k tomu deklarovaných a definovaných niekoľko základných tried. V princípe ide o „nízkoúrovňový“ aj keď plne automatizovaný prístup, v rámci ktorého sme schopní implementovať zasielanie požiadaviek z vlastného zariadenia ako aj príjem požiadaviek z iného zariadenia. Naviac existuje niekoľko „nadstavbových“ knižníc, ktoré využívajú natívne Android API a prácu ešte viac zjednodušujú.

Manifest aplikácií

Aplikácie, pri ktorých uvažujeme o použití služieb SIP, musia vo svojom manifeste žiadať o povolenie používať INTERNET a SIP:

V ďalšom je vhodné informovať prípadných záujemcov o stiahnutie a používanie takýchto aplikácií, že tieto vyžadujú podporu SIP služieb a sú spustiteľné na minimálnej verzii Android 2.3:

SipManager, SipProfile

Metódy triedy SipManager slúžia na iniciáciu SIP spojenia, registráciu zariadenia na SIP Registrare, kontrolu vytvoreného spojenia a v neposlednom rade na samotnú iniciáciu a príjem SIP volaní (calls). Každý účastník SIP volania je v rámci tejto architektúry identifikovaný sebe vlastným SIP URI. V rámci Android API je takýto účastník reprezentovaný objektom triedy SipProfile. Používa sa pritom štandardná notácia meno-heslo-doména. Volajúci účastník má pridelený lokálny profil, volaný účastník vystupuje pod peer profilom. Výsledok registrácie účastníka (profilu) na SIP Registrar serveri je získavaný pomocou rozhrania SipRegistrationListener.

Na korektné používanie SIP služieb je vhodné vykonať pri štarte aplikácií test podpory VoIP (SipManager.isVoipSupported();) a samotného SIP API (SipManager.isApiSupported();).

SipAudioCall

Listener SipAudioCall slúži na prípravu volania, ktoré následne uskutočníme pomocou metódy makeAudioCall(). Jej parametrami sú názov lokálneho (volajúceho) profilu, peer (volaného) profilu, pripravený SipAudioCall listener a timeout.

Na príjem volaní musí aplikácia registrovať a implementovať BroadcastReceiver. Následne inicializuje lokálny SIP profil, ktorý slúži ako cieľová adresa pre vzdialeného volajúceho. Obe role sa v tomto prípade vymenia čo znamená, že peer sa stáva volajúcim, ktorý volá lokálny profil (ten sa v tomto prípade stáva volaným).

Pre správnu funkčnosť, resp. na účely testovania Androidových aplikácií, ktoré vyžívajú SIP, je nutná existencia dátového IP spojenia. To je možné vytvoriť buď použitím mobilného dátového pripojenia, alebo cestou WiFi. V jednoduchosti je nutné, aby malo zariadenie IP konektivitu na SIP Registrar, na ktorom sa bude účastník registrovať a samozrejme takisto aj na SIP Proxy. Oba tieto servre môžu byť samozrejme nainštalované aj na rovnakom fyzickom stroji.

Zobrazit Galériu

Marek Sopko

Všetky autorove články
Android

1 komentár

PIP CAMERA reakcia na: Programujeme pre Android 26/Session Initiation protocol API

28.1.2017 13:01
It is a great article. You will surely like this also because it is a great stuff, yeah it’s give us lots of interest and pleasure. Their opportunities are so fantastic and working style so speedy. Thank you for sharing the nice article. http://appsforsys.com/pip-camera-selfie-campic-collagepip-camera-apk-download
Reagovať

Pridať komentár