WebRTC Native Client Momo は双方向の夢を見るか

WebRTC 配信クライアントとして、いろいろな方面で使って頂いてる Momo ですが SDL を利用することで双方向を実現しました。

まとめ

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 と Sora でマルチストリームで 3 人で

なぜ Momo で双方向?

一方向の Momo はそれはそれで使いみちが色々あるのですが、双方向を実現することで Raspberry Pi でブラウザ無しで 1:1 のチャットとかを気軽に作れるようにしたかったというのがあります。ブラウザはちょっと重すぎるんですよね。

用途は誰かが考えてくれるという方針なので開発側で用途を想定はしていません。

なぜ SDL ?

もともとはターミナルで映像が表示できる技術を利用しようと思っていたのですが色々不便だったことから、 SDL を使うというのを tnoho が考え出しました。

自分は SDL は名前を聞いたことがある程度でしたが、まさに Momo の送受信部分としてピッタリで、さすがだなと。

今後は?

Momo に色々オプション引数を追加してデフォルトでは無効にし、 Linux / macOS で気軽に利用できるようにする予定です。

動作確認にも使えますし、色々利用幅が広がると思います。拡張性もありますし、カスタマイズして使うというのもできると思います。

使ってみたい

macOS 版になりますが、バイナリを公開しました。使い方なども書いてありますので触ってみて下さい。

Written by

Erlang/OTP / 時雨堂 / WebRTC / E2EE

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store