前言
pion是一个纯用golang写的开源webrtc项目,目前github上大部分webrtc开源都是使用c++写的。本人认为pion对于一个webrtc入门者来说golang的语法相对简单,你这样可以更好的关注webrtc协议。如果业务场景不是特别高,业务上只做sfu转发服务器的话,可以尝试用golang来做。
读这篇文章你需要稍微了解webrtc的协议。
例子
pion也有提供不少的例子,我这边写了一个我自认为最简单,只能接受一个流的例子。这个例子平铺直叙,走了一个完整的webrtc流程,需要配合前端https://jsfiddle.net/1jc4go7v/当然需要注意的是前端只有publish能用。
整体下来就是:
- 创建peerconnection,设置stun服务器
- 设置对端的sdp
- 创建自己协商的answer,设置answer
- 等待candidate收集完成,输出序列化后的sdp信息
这边就是一个最简单的接受流的例子。
package main
import (
"encoding/base64"
"encoding/json"
"fmt"
"github.com/pion/webrtc/v3"
)
func main() {
//创建pc, 并且指定stun服务器
pc, err := webrtc.NewPeerConnection(webrtc.Configuration{
ICEServers: []webrtc.ICEServer{
{
URLs: []string{
"stun:stun.l.google.com:19302"},
},
},
})
if err != nil {
panic(err.Error())
}
sdp := webrtc.SessionDescription{
}
//todo:这边需要你自己设置对端的sdp信息
sdpStr := "eyJ0eXBlIjoib2ZmZXIiLCJzZHAiOiJ2PTBcclxubz0tIDE2OTQ4Nzk1NDc5OTk0ODE3MDYgMiBJTiBJUDQgMTI3LjAuMC4xXHJcbnM9LVxyXG50PTAgMFxyXG5hPWdyb3VwOkJVTkRMRSAwXHJcbmE9ZXh0bWFwLWFsbG93LW1peGVkXHJcbmE9bXNpZC1zZW1hbnRpYzogV01TIE1PQ0xmd21HT1hwRG41dlB5R3lyZU5nclJ0Y2xQR2xCVmdjSlxyXG5tPXZpZGVvIDUzMzUxIFVEUC9UTFMvUlRQL1NBVlBGIDk2IDk3IDk4IDk5IDEwMCAxMDEgMTAyIDEyMSAxMjcgMTIwIDEyNSAxMDcgMTA4IDEwOSAzNSAzNiAxMjQgMTE5IDEyMyAxMTggMTE0IDExNSAxMTZcclxuYz1JTiBJUDQgNDcuOTEuMjE2LjE5XHJcbmE9cnRjcDo5IElOIElQNCAwLjAuMC4wXHJcbmE9Y2FuZGlkYXRlOjIwOTQwMjg4ODIgMSB1ZHAgMjEyMjI2MD