WebRTC for Golang.
This repository is currently fluctuating a lot, and the exposed interfaces will change. Do not rely on anything in here yet!
- A PeerConnection can be successfully established between two separate machines using this Go library.
- It is possible to exchange bytes over a real DTLS/SCTP datachannel. (See the chat demo)
- Video/Audio support from the Media API is not implemented as it's low priority for us -- but pull requests will be gladly taken!
There is still lots of work to do!
To immediately see some action, try the chat demo from two machines (or one...)
git clone https://github.com/keroserene/go-webrtc
go run demo/chat/chat.go
Type "start" in one of the Peers, and copy the session descriptions. (This is the "copy-paste" signalling channel). If ICE negotiation succeeds, a really janky chat session should begin.
To write Go code which requires WebRTC functionality:
And then you can do things like
If you've never used WebRTC before, there is already plenty of information
demo/* for real usage examples which show how to prepare a
PeerConnection and set up the necessary callbacks and signaling.
Also, here are the GoDocs.
- GCC 5+
The package name is
webrtc, even though the repo name is
(This may be slightly contrary to Go convention, unless we consider the suffix
to really begin at the last dash. Reasons:
- Dashes aren't allowed in package names
- Including the word "go" in a Go package name seems redundant
- Just calling this repo
webrtcwouldn't make sense either.
- Also you can rename imported packages to whatever you like.
import "foo" "github.com/keroserene/go-webrtc")
Latest tested native webrtc archive:
There are currently two ways to build gowebrtc: the easy way, and the hard way.
The hard way is to build from scratch, which involves Google's depot_tools and chromium stuff, gclient syncing, which takes a couple hours, and possibly many more if you run into problems... along with writing a custom ninja file and concatenating archives correctly and such.
The easy way is to use the pre-built archive I've provided in
Once the archive is ready, cgo takes care of everything, and building
is as easy as
go build or
TODO(keroserene): More information / provide a real build script to automate the hard way so it becomes the easy way. (See Issue #23)