Z punktu widzenia programu będzie całkowicie obojętne czy to GPRS czy HSDPA (tak jak mp programista Firefoxa nie zajmuje się modemami ADSL).
Java operuje na poziomie protokołu TCP/IP, kwestię realizacji połączenia zostawmy systemowi operacyjnemu telefonu.
Bedzie to wygladac następująco
- aplikacja nagywa dzwiek i ma go gdzieś w pamieci
- tworzy połączenie z serwerem na porcie na którym on nasłuchuje (pewnie pare linijek kodu nie licząc obsługi błędów, adres serwera zawsze taki sam)
- zapisuje dane binarnie do strumienia (nie programuje w Javie to nie wiem dokładnie jak to tam wyglada, ale bedzie to pewnie jedna instrukcja, ew w pętli)
- zamyka połączenie i zaczyna nasłuch na dane zwrotne (czeka).
itd...
Java to język wysokiego poziomu. Operacje na TCP/IP są tam z tego co pamietam prawie tak łatwe jak operacje na zwykłych plikach, a o dostęp do internetu zatroszczy sie VM oraz system operacyjny (przy próbie otworzenia połączenia telefon zapyta się czy umożliwić aplikacji dostęp do internetu).
Dlatego zastanawianie sie nad protokołem jest bez sensu, bo i tak będzie to TCP/IP

Przy czym oczywiście pakietów nikt ręcznie nie rzeźbi bo zrobi to Java.
Trzeba sie zastanowić nad formatem przesyłu danych (najłatwiej pewnie ADPCM) a VoIP zostawić w spokoju.