La respuesta a su pregunta realmente depende de lo que quiera hacer con ella. Aquí hay 2 ejemplos de cómo lo he hecho:
Desarrollé el software para Go2Call.Com (ahora propiedad de Deltathree), y se utilizó para llamadas de PC a teléfono. En el caso de Go2Call, era un applet de Java para el frontend de marcador que llamaba una DLL de Windows escrita en C++. A partir de ahí, habló un protocolo propio para hablar con los servidores que a su vez enviaron la llamada a líneas fijas regulares.
Unos años más tarde, escribí un control basado en la web (control ActiveX) que permitiría las llamadas PC-a-PC o PC-a-teléfono, y usó el protocolo estándar H.323.
Recomendaría comenzar por averiguar cuál es su objetivo final y luego buscar los protocolos y tecnologías necesarios para lograrlo.
Para PC-to-PC, puede hacer lo que desee si ambas personas usan su software. En ese caso, puede averiguar cómo funciona VOIP (incluidos los códecs de compresión, etc.) e implementarlo como lo desee.
Para PC-a-teléfono o cuando desea llamar al software de otra persona, recomiendo SIP ya que es probablemente el protocolo más popular. H.323 sigue siendo frecuente, pero SIP parece estar tomando el control.
Lo siento, esto probablemente no te diga todo, pero hay mucho que hacer. Con suerte, esto lo ayudará a comenzar en la dirección correcta.
Actualización: Desde que mencionaste PC-to-PC, Packetizer tiene una lista de normas y bastante información que utilicé mucho cuando hacía mucha programación de VoIP.
En lo que respecta a los libros, los libros que he visto hasta ahora no están relacionados con la programación, sino más bien con el uso del software VoIP y la instalación de redes VoIP.
Para la comparación también está Twilio: https://www.twilio.com/docs/api/client –