La risposta alla tua domanda dipende molto da cosa vuoi fare con esso. Ecco due esempi di come sono andato a riguardo:
Ho sviluppato il software per Go2Call.Com (ora di proprietà di Deltathree) ed è stato utilizzato per le chiamate da PC a telefono. Nel caso di Go2Call, era un'applet Java per il frontend del dialer che chiamava una DLL di Windows scritta in C++. Da lì, ha parlato un protocollo proprietario per parlare con i server che a loro volta hanno inviato la chiamata ai normali numeri fissi.
Alcuni anni più tardi, ho scritto un controllo basato su Web (controllo ActiveX) che consentiva la chiamata da PC a PC o da PC a telefono e utilizzava il protocollo standard H.323.
Vorrei raccomandare di iniziare a capire qual è il tuo obiettivo finale e quindi cercare i protocolli e le tecnologie necessarie per realizzarlo.
Per PC-to-PC, puoi fare quello che vuoi se entrambe le persone usano il tuo software. In tal caso, puoi capire come funziona VOIP (inclusi i codec di compressione, ecc.) E implementarlo come vuoi.
Per PC-to-Phone o quando si desidera chiamare il software di qualcun altro, si consiglia di SIP poiché è probabilmente il protocollo più popolare. H.323 è ancora prevalente, ma SIP sembra prendere il sopravvento.
Spiacente, questo probabilmente non ti dice tutto, ma c'è molto da fare. Spero che questo ti guidi nella giusta direzione.
Aggiornamento: Da quando hai citato PC-to-PC, Packetizer ha una lista di standard e un bel po 'di informazioni che ho usato nel passato quando ho fatto un sacco di programmazione VoIP.
Per quanto riguarda i libri, i libri che ho visto finora non sono legati alla programmazione ma più sull'utilizzo del software VoIP e sull'installazione delle reti VoIP.
Per confronto c'è anche Twilio: https://www.twilio.com/docs/api/client –