examples/data-channels/README.md
data-channels is Pion's sample WebRTC app that lets you send and receive DataChannel messages from a web browser.
This example will result in messages being sent between a browser and a self-hosted data-channels server. The connection is made by grabbing the browser's generated session description, or SDP, and passing it into the server. The server uses the browser's SDP to then return a new SDP from the server based on the browser's SDP. The server's SDP then gets passed back into the browser which confirms the handshake and forms a connection!
Once the connection is established, messages will automatically be sent from the data-channels server to the browser every 5 seconds. The browser has a button that lets you send a message back to the server when you click on it.
go install github.com/pion/webrtc/v4/examples/data-channels@latest
Open this JSFiddle example page.
The top of the JSFiddle example page contains a text box containing your browser's session description (SDP).
Press Copy browser SDP to clipboard or copy the base64 string manually.
Depending on your OS:
In the following command, replace $BROWSER_SDP with the copied string.
Run echo $BROWSER_SDP | data-channels.
data-channels < my_file.The server will automatically print out a base64 string. Copy it and paste it into the second textbox in the JSFiddle page.
Under Start Session you should see 'Checking' as it starts connecting. If everything worked you should see New DataChannel foo 1.
Pion WebRTC will send random messages every 5 seconds that will appear in your browser.
You can put whatever you want in the Message text area, and when you hit Send Message it should appear in your terminal!
Congrats, you have used Pion WebRTC! Now start building something cool :)
flowchart TB
Browser--Copy Offer from TextArea-->Pion
Pion--Copy Text Print to Console-->Browser
subgraph Pion[Go Peer]
p1[Create PeerConnection]
p2[OnConnectionState Handler]
p3[Print Connection State]
p2-->p3
p4[OnDataChannel Handler]
p5[OnDataChannel Open]
p6[Send Random Message every 5 seconds to DataChannel]
p4-->p5-->p6
p7[OnDataChannel Message]
p8[Log Incoming Message to Console]
p4-->p7-->p8
p9[Read Session Description from Standard Input]
p10[SetRemoteDescription with Session Description from Standard Input]
p11[Create Answer]
p12[Block until ICE Gathering is Complete]
p13[Print Answer with ICE Candidatens included to Standard Output]
end
subgraph Browser[Browser Peer]
b1[Create PeerConnection]
b2[Create DataChannel 'foo']
b3[OnDataChannel Message]
b4[Log Incoming Message to Console]
b3-->b4
b5[Create Offer]
b6[SetLocalDescription with Offer]
b7[Print Offer with ICE Candidates included]
end