Instantly share code, notes, and snippets.

Embed
What would you like to do?
WebRTC オンライン専用コミュニティ

WebRTC オンライン専用コミュニティ

更新:2018-10-14
作者:@voluntas
バージョン:18.10.1
URL:https://voluntas.github.io/

概要

日本語専用の WebRTC 関連のオンライン専用コミュニティを作りました。興味のある方は参加してみてください。

参加は以下からどうぞ。メール認証必須にしてあります。

https://discord.gg/vZT8zGu

注意

Discord 上で話した話題や質問は公開することがありますので、それを理解して上でご参加ください。

目的

仕事で WebRTC 関連の情報を追いかけているのですが、気軽に WebRTC に興味ある人向けに共有する仕組みが欲しいというのが一番です。他には WebRTC 技術に関する雑談や情報共有をができるとよいなおもっています。

あまり難しく考えず、よろしくない行動には厳しくというスタンスです。

注意

  • 管理者が自身に関係する話題や宣伝を行うことはありません
    • 他の方が話題にしていただくのは構いません
    • コミュニティを公平にするべき手段だと考えています
    • 宣伝は @voluntas という Twitter でつぶやいています

管理者

時雨堂 という会社で WebRTC SFU Sora を開発しています。WebRTC スタックには詳しいですが、コーデックはさっぱりです。

Twitter ID は @voluntas です。 DM をオープンにしておりますので、何かあればお気軽に連絡ください。

用途

  • @voluntas が淡々と WebRTC 関連のニュースをコメント付きで貼っていきます
  • WebRTC 関連の技術的な質問はしていただいて問題ありません
  • WebRTC を使った何かの宣伝も大歓迎です
  • WebRTC の仕事探していますとかも大歓迎です
  • Opus や AV1 などのコーデック情報も大歓迎です
  • HLS/MPEG-DASH や CMAF などの話題も大歓迎です

追記していきます。

質問や話題まとめ

最近できていません

Discord 上で話題に上がったものや質問があったもので自分が気になったのだけ暇を見てまとめていっています

Google の Project Stream が WebRTC を利用している

  • コントローラーの動作は DataChannel を利用
  • 映像はフル HD で 60 FPS の H.264 で音声は Opus

Safari Technology Preview 67 で VP8 に対応した

リリースノートには書いていないが VP8 と Unified Plan がオプションとして指定できるようになっている。

RTCRtpTransceiver が M69 の Unified Plan で利用できるようになった

PSA: RTCRtpTransceiver shipping in M69 behind sdpSemantics:'unified-plan' - Google グループ

これで Unifed Plan に必要な機能は出揃った感じがします。

rav1e はまだ画質がしょぼい

コメント:

rav1e気になったので試してみたのですが画質はあまり良くないですね……
エンコード速度はaomencよりずっと早いんですけどね
1080pの375フレームをそれぞれ3000Kbpsでエンコードしてaomenc cpu-used=0が96時間30分27秒でrav1e speed2が3時間33分46秒でした

https://i.imgur.com/pn72f0W.png

コメント:

aomencよりは悪いけどx265/x264のslowerよりも良いのなら・・・・と思ったら、濃い緑がrav1eだから一番下のラインか....うーむ.....
これだとtheoraのほうがビット当たり品質よいかも...?

コメント:

ロジェクトゴールは汎用AV1 encoderかもしれません。現時点では IntraOnly = 全部がキーフレーム なので、動画コーデックというより静止画のコーデックですね。
このチャネル的には、簡単でも良いのでInter Frame(動き探索とフレーム間予測)が実装されると映像配信用途のAV1 encoderとして有望株になりそうかなぁと期待。

rav1e が --speed つけると 30fps 出た

xiph/rav1e: The fastest and safest AV1 encoder.

コメント:

この384x288の動画 http://samples.mplayerhq.hu/yuv4mpeg2/example.y4m.bz2 を--speedオプションで最速設定にすると 30fps出ました。デフォルト設定だと0.2fpsでした。エンコード後のファイルサイズはデフォルト設定のよりも10%くらい増加し、デフォルトのと最速のでSSIM取ったら0.954でした。chromeかfirefoxあたりが配信でav1サポートするとか言い出すのも時間の問題かもしれないですねー

WebRTC M68 リリース

PSA: WebRTC M68 Release Notes - Google グループ

  • Unified Plan が試せるようになっています
  • WebRTC ObjC SDK にはソフトウェアビデオコーデックが無効になっています

Millicast

Real-time CDN - Millicast

WebRTC をフル活用したサービス。

Google が提供しているWebRTC が一通り学べるサイト

Real time communication with WebRTC

SkyWay と Voice Activity Detection の実装サンプル

SkyWayとvoice-activity-detectionを使って音声検出を実装する - Qiita

Safari TP 57

Release Notes for Safari Technology Preview 57 | WebKit

Go で実装された TURN サーバ

pions/turn: Pion TURN server, a simple extendable Golang TURN server

ARM の新しい GPU/VPU は VP9 の HWA 対応

ARMがスマホ向け新GPU「Mali-G76」&新VPU「Mali-V76」を発表、スマホで8K・60fps再生に対応へ - GIGAZINE

ARM Announces Mali-V76 Video Processor: Planning For the 8K Video Future

Chrome M67 から mp4 に VP8 を突っ込んで再生できるようになった

Sergio Garcia Murilloさんのツイート: "Chrome 67 now is able to play vp8 inside mp4 containers! You can finally use a single container for all your #webrtc recordings.. ;)"

WebRTC ハンズオン

実際に体験できるのはとても貴重だと思います。

SkyWay UG Kansai #2 初心者向けSkyWayハンズオン&LT!

【大阪開催】SkyWay UG Kansai #2 初心者向けSkyWayハンズオン&LT! - connpass

Firefox 61 のリリースノート

Media/WebRTC/ReleaseNotes/61 - MozillaWiki

Edge の API リスト

Catalog of standard and vendor APIs across browsers - Microsoft Edge Development

Safari のスクリーンシェア機能の現状

Dr. Alex. Gouaillardさんのツイート: "#webrtc Screen Sharing support in Safari is Awesome! Developer build only for now. Benchmarking of the new capturer coming soon. Stay tuned.… https://t.co/u1iKC08JhA"

WhatsApp が画像と映像をどうやって送っているか

How are Images/Videos sent in WhatsApp?

Twilio による Edge の Screen Capture API 解説

Screen capture in Microsoft Edge – Twilio Cloud Communications Blog

Web Audio の話

Web Audio APIの闇 - Qiita

WebRTC とは直接関係ないですが、何かと Web Audio のお世話になることは多いので。

PeerJS を今後使うのはもうやめた方がいい

PeerJSを今後も使い続けるのは危険 – Yusuke Naka – Medium

すでにメンテナンスされていないので使うのはやめようという話。

NTT-AT の Coomme@ の事例

NTT-AT、簡易コンタクトサービス「Comme@」で映像・画面共有などのビジュアル通信を可能にする拡張機能を提供 - クラウド Watch

Agora.io が Xamarin へ対応

https://twitter.com/agoraio/status/999341986904592384?s=21

有名そうなチャットサービス

Live video chat rooms, simple and easy. - Tinychat

WebRTC を使っているらしいです

HDMI から USB への変換アダプター

http://www.iodata.jp/product/av/capture/gv-huvc/

国内公式は珍しい気がします。

ソシオネクストのハードウェアエンコーダーボード

http://www.socionext.com/jp/pr/sn_pr20180517_01j.pdf

ニコニコ動画が採用して話題になりました。

Windows UWP で P2P の WebRTC を実現したいの理解の確認

シグナリングサーバ(OS、言語に依存せず)で、一度P2P通信を確認すれば、1音声・映像と、2テキスト、画像が通信できるって理解であっていますでしょうか? 1と2は別の転送をすると理解しております。

大体あっていますが、
”サーバー”といわれるように、シグナリングサーバーとの接続はP2Pではありません。
シグナリングサーバーは、お互いの情報(IPアドレスや、どういったメディアを送受信するか)をやり取りするために使用します。
これらのやり取りを行った後にP2P接続が行われます。
音声と映像、テキストと画像は、おっしゃるように別々のプロトコルで転送されます。

補足ですが、シグナリングサーバは接続するクライアントを管理する役割を持っているものもあります。(つまり常時接続している)シグナリングサーバの機能というのはWebRTCの仕様では決まっていないため、OSSや各サービスが独自に決めています。ご自身で作られるならシグナリングサーバと常時接続しておかなくても問題ないような実装にする必要があると思いますよ。

シグナリングサーバはIDを発行、発行したID裏側に接続情報(IPアドレス)や付加情報(端末名とかログインユーザ名など)を管理しており、つなぎたい人はID選択して接続するということ理解しました。それでシグナリングサーバがわでIDを発行した端末から接続確認がてきなくなると、発行したID情報を無効化するという考えだと理解しました。この辺りは実装が必要ということですね。

接続情報の管理、WebRTCのP2Pコネクション確立時の仲介役、この2つがシグナリングサーバの主な役割です。後者については、ネット上に技術情報がいくつかあると思いますが、前者はサービス仕様と直結するので、一般的な情報はあまりないと思います。

アップデートされた RFC ドラフト

Rust 製の SDP パーサー

nils-ohlmeier/rsdparsa: Rust SDP parser

Firefox で Google ハングアウトが動作するようになった

Firefox is now supported by Google Hangouts and Meet - Advancing WebRTC

WebRTC M67 リリースノート

WebRTC M67 Release Notes - Google グループ

getUserMedia() でカメラ・マイクのブロックを個々に検知

getUserMedia() でカメラ・マイクのブロックを個々に検知 - Webエンジニアの備忘録

パーミッション周りはやっかいなので、覚えておいて損はなさそうです。

Edge の仕様

aboba/edgertc: Documentation on the Microsoft Edge Realtime Communications (RTC) platform

仕様策定の Aboba さんの個人リポジトリにありました。

Windows で動く Media サーバ

無償版ではサーバでの変換は行えていないとのことです。

Chrome M66 の動画自動再生ポリシーの変更について

Chrome M66 で動画自動再生ポリシーが変わったが、ひっくり返って一旦無効になる Chrome M70 で再導入を目指すという話。色々あるので、説明が難しいが、とりあえず導入は延期されたという認識で良い。

国産で WebRTC P2P で頑張っている会議サービス

Web会議・テレビ会議クラウドサービス『V-SESSION』

  • Stream Control Transmission Protocol(SCTP) は暗号化プロトコルではないので気付いたら修正してほしい。
    • 消えてた

RTCRtpReceiver が M69 にずれ込むという話

777617 - Support RTCRtpTransceiver (transceiver) - chromium - Monorail

これから WebRTC を学ぶ人向けの歴史

History of the WebRTC API [Infographic] — callstats.io

CDN を利用した遅延一秒以下の動画配信

CDNで遅延1秒以下の動画配信を全世界で実現--ライムライト・ネットワークス - ZDNet Japan

どんな技術で実現しているのかとても気になる。

WebRTC + QUIC

WebRTC で利用しているプロトコルを QUIC に置き換えるという話。今すぐとかではなくまずは並行で。そして DataChannel を QUIC にしてみるという話。

仕様や議論などは色々と出ている。

ストリーミングプロトコルの比較表が秀逸

Streaming protocols and ultra-low latency including #webrtc | WebRTC by Dr Alex

Unified Plan の webrtc.org のサイト

Unified Plan SDP format - transition plan | WebRTC

ロードマップも公開されている。

国内で WebRTC を使った事例

医師によるオンライン健康相談「first call」、dヘルスケアと連携 - 週刊アスキー

  • TokBox を使ってる
  • 利用時間を 15 分に制限することで従量課金への対策をしている

オンライン健康相談「first call」を法人向けに提供開始しました | プレスルーム

今回のは提携の発表でかなり前から WebRTC を利用して提供している。

Chrome Canary M68 で Unified Plan

Chrome Canary M68 で Unified Plan

やっと使えるようになりました。

WebRTC + TensorFlow Lite + Android

WebRTC + TensorFlow Lite + Android

Edge 側での解析の例。

RTCRtpSender / RTCRtpReceiver に getStats が追加される

Chrome M67 getStats()が最新スペックへ対応した。

前方誤り訂正

WebRTC の前方誤り訂正 – V – Medium

パケロス時に再送せずにパケットを復元する技術の簡単な解説。

WebRTC Meetup Tokyo #18

WebRTC Meetup Tokyo #18 : ATND

Screen Capture APIについて

from @gtk2k

gUM()をベースに仕様策定されたが、サイズやフレームレート等のconstraintsに設定する部分は省かれ、現在のドラフト仕様ではdisplaySurface(DisplayCaptureSurfaceType)とlogicalSurface(Boolean)の2つのみとなっている。
gUM()のサイズやフレームレート制約は「選択」する意味でのサイズ指定であったが、デスクトップのモニターの解像度は大きくなる傾向にあるため、エンコードやビットレートがひっ迫する。そうならないように、選択ではなく「エンコードのダウンスケール」のサイズやフレームレートとして設定できるようにという提案

Vidyo による WebRTC における AV1 の話

from @yusuke.naka

WebRTC + AV1 はもっと時間がかかるので長い目で見て、今のところは VP9 を前提にしていくのが良いと思います。

WebRTC を利用したグループビデオチャットサービス Houseparty

ディープラーニングを利用したノイズ抑制

パケロスを意図的にさせたい

VR180

WebRTC ミートアップ

Edge の Screen Capture API

組み込み WebRTC を利用したい

  • Janus か GStreamer または libwebrtc を頑張る
  • Janus は GPL で GStreamer は LGPL なのは意識しておくこと
  • 組み込み WebRTC を利用した場合、車や電車などで高速に移動する場合、ラグが発生する事が多いのが課題としてある
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment