meowcaller is a Go library for the WhatsApp Web VoIP stack. It is 100% pure GO without CGO and it has minimal dependencies. It includes the novel proprietary audio codec MLOW written and validated completely in GO. In turn, meowcaller does not rely on any native bindings and can run everywhere that GO can.
Matrix room: #meowcaller:matrix.org.
Discord channel: #meowcaller in the WhiskeySockets Discord server.
You can find the underlying spec in the WhatsApp Calls Research Group. Video transition behavior is cross-checked against the independently implemented whatsapp-rust call stack.
The godoc includes docs for all methods.
There's a range of examples in the examples directory.
The API is easy to approach and implement: attach a Source to send media, a Sink to receive it, and register callbacks for call events.
A 12-line example to show the power and simplicity of the library:
// wa is a whatsmeow.Client
client := meowcaller.NewClient(wa)
client.OnIncomingCall(func(call *meowcaller.Call) {
call.Answer()
if mp3, err := meowcaller.MP3File("hello.mp3"); err == nil {
call.Play(mp3) // stream audio to the caller
}
if wav, err := meowcaller.WAVRecorder("caller.wav"); err == nil {
call.Receive(wav) // record their voice
}
if h264, err := meowcaller.AnnexBRecorder("caller.h264"); err == nil {
call.ReceiveVideo(h264) // record their video
}
})
// Placing a call is just as short:
call, _ := client.Call(ctx, "+15551234567")
call.Receive(meowcaller.SinkFunc(func(pcm []float32) { /* the peer's audio */ }))
Core VoIP features are present:
The experimental group surface uses the latest upstream go.mau.fi/whatsmeow;
it does not require a fork. See the
group-call feature guide and the
examples/web browser test console.
Things that are not yet implemented:
meowcaller relies heavily on primitives that are implemented in the WhatsApp Calls Research Group. I thank all the developers who have contributed to it.
The video transition lifecycle was validated against whatsapp-rust PR #1024, an independent implementation of the same protocol.
You may contribute to the maintenance of this library by sponsoring its maintainers on GitHub.
You may also submit pull requests and issues where relevant, given you follow the contributor Code of Conduct.
This repository follows the MIT license, as stated in the LICENSE file
Go
99.2%
meowcaller is a Go library for the WhatsApp Web VoIP stack. It is 100% pure GO without CGO and it has minimal dependencies. It includes the novel proprietary audio codec MLOW written and validated completely in GO. In turn, meowcaller does not rely on any native bindings and can run everywhere that GO can.
Matrix room: #meowcaller:matrix.org.
Discord channel: #meowcaller in the WhiskeySockets Discord server.
You can find the underlying spec in the WhatsApp Calls Research Group. Video transition behavior is cross-checked against the independently implemented whatsapp-rust call stack.
The godoc includes docs for all methods.
There's a range of examples in the examples directory.
The API is easy to approach and implement: attach a Source to send media, a Sink to receive it, and register callbacks for call events.
A 12-line example to show the power and simplicity of the library:
// wa is a whatsmeow.Client
client := meowcaller.NewClient(wa)
client.OnIncomingCall(func(call *meowcaller.Call) {
call.Answer()
if mp3, err := meowcaller.MP3File("hello.mp3"); err == nil {
call.Play(mp3) // stream audio to the caller
}
if wav, err := meowcaller.WAVRecorder("caller.wav"); err == nil {
call.Receive(wav) // record their voice
}
if h264, err := meowcaller.AnnexBRecorder("caller.h264"); err == nil {
call.ReceiveVideo(h264) // record their video
}
})
// Placing a call is just as short:
call, _ := client.Call(ctx, "+15551234567")
call.Receive(meowcaller.SinkFunc(func(pcm []float32) { /* the peer's audio */ }))
Core VoIP features are present:
The experimental group surface uses the latest upstream go.mau.fi/whatsmeow;
it does not require a fork. See the
group-call feature guide and the
examples/web browser test console.
Things that are not yet implemented:
meowcaller relies heavily on primitives that are implemented in the WhatsApp Calls Research Group. I thank all the developers who have contributed to it.
The video transition lifecycle was validated against whatsapp-rust PR #1024, an independent implementation of the same protocol.
You may contribute to the maintenance of this library by sponsoring its maintainers on GitHub.
You may also submit pull requests and issues where relevant, given you follow the contributor Code of Conduct.
This repository follows the MIT license, as stated in the LICENSE file
Go
99.2%