WebRTC 配信クライアントとして、いろいろな方面で使って頂いてる Momo ですが SDL を利用することで双方向を実現しました。
まとめ
- 双方向の実現には SDL を利用した
- Momo が Ayame を利用し 1:1 の双方向を実現した
- Momo が Sora を利用し 3 人以上の双方向を実現した
- macOS / Linux で利用可能
- https://github.com/shiguredo/momo/releases/tag/19.10.0-rc0
2019–10–19 追記
最新版バイナリを公開しました。
https://github.com/shiguredo/momo/releases/tag/19.10.0-rc1
WebRTC SFU Sora を利用して複数のブラウザとマルチストリームで双方向を実現できるようになりました。
./momo --resolution VGA --no-audio --port 0 --use-sdl --show-me sora --auto --video-codec VP8 --video-bitrate 1000 wss://example.com/signaling momo-sora --multistream
双方向?
簡単に言えば Momo が音声と映像を受信して出力するということです。まずはどんな感じになるか見てもらえればと思います。
動画は以下の URL からどうぞ。
https://i.gyazo.com/fb84e900307647caa38fcd9ce1b8b2fb.mp4
これは macOS 上で Momo を動かして Ayame を使って双方向を実現しています。ブラウザから送られてきた音声と映像を Momo 側で表示しています。
SDL?
そもそも Momo は CLI で動かすものなのになぜ音声や映像が出力できるんでしょうか?答えは SDL を使って実現しています。
SDL (Simple DirectMedia Layer) は、C言語で書かれたクロスプラットフォームのマルチメディアライブラリである。グラフィックの描画やサウンドの再生などのAPIを提供する。Windows、macOS、Linux、iOS、Androidを公式にサポートしている。https://ja.wikipedia.org/wiki/SDL から引用
グラフィックの描画とサウンドの再生ってまさに WebRTC との相性がぴったりではないですか。さらに複数 OS 対応と、もう完璧です。
SDL を使うことで Linux / macOS 上で送信する音声と映像、受信した音声と映像を出力できるようになりました。
これは Ayame と Sora を利用した時のみ実現できています。テストモードには対応できていません。
Sora を利用した場合はマルチストリームを利用することで 3 名とかも可能になりました。もちろんこれは増やしていけます。これは画期的ですね。
なぜ Momo で双方向?
一方向の Momo はそれはそれで使いみちが色々あるのですが、双方向を実現することで Raspberry Pi でブラウザ無しで 1:1 のチャットとかを気軽に作れるようにしたかったというのがあります。ブラウザはちょっと重すぎるんですよね。
用途は誰かが考えてくれるという方針なので開発側で用途を想定はしていません。
なぜ SDL ?
もともとはターミナルで映像が表示できる技術を利用しようと思っていたのですが色々不便だったことから、 SDL を使うというのを tnoho が考え出しました。
自分は SDL は名前を聞いたことがある程度でしたが、まさに Momo の送受信部分としてピッタリで、さすがだなと。
今後は?
Momo に色々オプション引数を追加してデフォルトでは無効にし、 Linux / macOS で気軽に利用できるようにする予定です。
動作確認にも使えますし、色々利用幅が広がると思います。拡張性もありますし、カスタマイズして使うというのもできると思います。
使ってみたい
macOS 版になりますが、バイナリを公開しました。使い方なども書いてありますので触ってみて下さい。