pion は Go で書かれた WebRTC 実装です。
これを試してみようとして、まずexampleを動かしてみようとしました。
通信を行うときに両者でお互いの通信条件を取り交わす必要があります。これをシグナリングと呼んでいます。
WebRTCではシグナリングの方法は仕様で定めらていません。
ここのexamplesでは、それを「コピぺ」によって行うようになっています。
(1) webページのフォームに表示された文字列をコピぺして実行ファイルの標準入力に食わせる。
(2) 実行ファイルの標準出力に出てきた文字列をコピぺしてwebページのもうひとつのフォームに入力する。
(3) webページ上の'Start Session'のボタンを押す。
やってみると、これがなかなかうまくいきません。(3)のボタンを押す直前でタイムアウトしてしまいます。
コピペする文字列は百行近くある巨大なものなので、スクロールしている間に時間がたってしまいます。
何度やっても間に合わなくてイライラが爆発しそうになったので、exampleを修正してタイムアウトを伸ばすことにしました。
diff --git a/examples/save-to-disk/main.go b/examples/save-to-disk/main.go
index 6318220..9effce0 100644
--- a/examples/save-to-disk/main.go
+++ b/examples/save-to-disk/main.go
@@ -33,6 +33,8 @@ func saveToDisk(i media.Writer, track *webrtc.Track) {
}
func main() {
+ s := webrtc.SettingEngine{}
+ s.SetCandidateSelectionTimeout(30 * time.Second)
// Create a MediaEngine object to configure the supported codec
m := webrtc.MediaEngine{}
@@ -42,7 +44,7 @@ func main() {
m.RegisterCodec(webrtc.NewRTPVP8Codec(webrtc.DefaultPayloadTypeVP8, 90000))
// Create the API object with the MediaEngine
- api := webrtc.NewAPI(webrtc.WithMediaEngine(m))
+ api := webrtc.NewAPI(webrtc.WithMediaEngine(m), webrtc.WithSettingEngine(s))
// Everything below is the Pion WebRTC API! Thanks for using it ❤️.
これで30秒の猶予ができたので、ゆっくりと操作してexampleを動かすことができるようになりました。