WebRTC技術者（C++）必携リンク集

# WebRTC技術者 (C++) 必携リンク集

## 読者対象
javascriptで動画通信プログラムを書く方ではなく、それを実現するWebRTCライブラリ（libwebrtc）の中身を理解する必要がある技術者向けリンク集です。ZoomやSkypeのような動画通信をするネイティブアプリを自分で実装する際には必須の知識になると思われます。（SDKを使うという手もありますが、SDK自体はこの知識をベースにしている、ということになります。）

## なぜこの記事を書いたのか
2022年3月現在、今でもInternet Explorer用WebRTC IE-Plugin (for LiveAssist)をメンテナンスしているためです。IEの中で最新のWebRTCライブラリが動作して、iPadやAndroidやネイティブブラウザとビデオ通話できているのは痛快です。まだまだ当分メンテしますよ～。

## Qiita でWebRTC(C++関連)の検索方法
タグ：webrtc と タグ：c++ の複合検索は下記で良いようです。
https://qiita.com/search?q=tag%3Awebrtc+tag%3Ac%2B%2B&sort=created

## WebRTC 公式仕様
WebRTCライブラリ理解の基本となるいわゆる聖典です。2021年にバージョン1.0に到達しました。各社のブラウザ、ネイティブコンポーネントはこの仕様の実装を目指してアップデートを進めています。Chroniumの中のWebRTCコードでさえ例外ではありません。（編集者の情報を見ると、現在は Cisco, Google, Mozillaの3社から人が出ているのだな、とか、過去にはMicrosoftやEricssonからの人もいたのだな、など、周辺情報も分かります。）

**WebRTC 1.0: Real-Time Communication Between Browsers**
https://www.w3.org/TR/webrtc/
上記の **Google翻訳**（日本語）
https://translate.google.com/translate?sl=en&tl=ja&u=https://www.w3.org/TR/webrtc/

## WebRTC 公式サイト類

### WebRTCホームページ
https://webrtc.org/

## 公式サンプルとその周辺

C++でWebRTCライブラリを活用する必要がある人にとっての必須のサンプルはこちらです。各バージョンにおけるいわゆる"正しい使い方”、そして仕様の変化により、使用側にどう変更を加えるべきかという履歴情報を確認できます。

**webrtc / src / refs/heads/master / examples**
https://webrtc.googlesource.com/src/+/refs/heads/master/examples/

#### おすすめ（１）　peerconnection_sever/peerconnection_client
Windows上でライブラリを動作確認する必要が生じた場合には、まず、peerconnection ディレクトリ内の peerconnection_server と peerconnection_client をビルドして動作確認してみましょう。

#### おすすめ（２）　Unity webrtc plugin サンプル
webrtcをより部品として使えるコードだなぁと思いましたが、実際にUnityと組み合わせて使っている人がいるのだろうか、というのが疑問でした。実際にテストして公開されている方がいたので驚きました。

はむ！の空想具現化したいブログ　2018-04-23
公式WebRTC plugin for Unityのサンプルを公開しました(Android向け)
http://hammmm.hatenablog.com/entry/2018/04/23/233814

#### おすすめ（３）　slideshare「WebRTC と Native とそれから、それから。」
この、Native Client (NaCL)について日本語で解説してくださっている貴重な資料。
https://www.slideshare.net/tnoho/webrtc-native

#### おすすめ（４）　peerconnection_client をTurnサーバ経由で通信させる機能追加
https://www.programmersought.com/article/89435138422/

#### おすすめ（５）　peerconnection_client でハードウェアエンコーダーを使ってみる
https://github.com/PHZ76/webrtc-native-demo

### 公式ビデオ集
まだ文書化されていない最新情報や、背景情報もあったりしますので、結構重要です。
**WebRTC Updates**
https://www.youtube.com/playlist?list=PLCJBf3eedefzXOQihAamh17r4Sm7gavhX

#### 番外
javascriptで動画通信する、**一般的な通常サンプル**はこちら。
https://webrtc.github.io/samples/
サンプルのソースコード：
https://github.com/webrtc/samples

## ソースリポジトリとその周辺
**WebRTC is a free, open software project** that provides browsers and mobile applications with Real-Time Communications (RTC) capabilities via simple APIs. The WebRTC components have been optimized to best serve this purpose.
https://webrtc.googlesource.com/src/

### chromiumのマイルストーンとバージョン番号の対応表
過去のソースコードを参照するために必須です。
https://chromiumdash.appspot.com/branches

あるバージョンのソースコードをサクッと取得したいなら、上記の表で確認して、下記などのような形で該当バージョンのソースコードを取得できます。（ビルドにはdepot_toolsが必要になることに注意。）
3497(m69)なら
https://chromium.googlesource.com/external/webrtc/+/branch-heads/69
3987(m80)なら
https://chromium.googlesource.com/external/webrtc/+/branch-heads/3987


### 各バージョンのリリースノート
ここで、各バージョンでの変更点や新規機能の一覧を確認できます。
https://groups.google.com/g/discuss-webrtc/search?q=subject%3Awebrtc%20subject%3Arelease%20subject%3Anotes
またはこちらで検索：
https://github.com/webrtc/webrtc-org/blob/gh-pages/release-notes/index.md
https://chromium.googlesource.com/external/webrtc/+/refs/heads/master/docs/release-notes.md

### WebRTCリポジトリへのコミットログ
最新のコミットに関するログはこちらで閲覧できます。
https://webrtc.googlesource.com/src/+log/refs/heads/master

### WebRTCライブラリの公式セキュリティ情報
特定のバージョンのWebRTCライブラリがクラッシュする原因の調査とか、過去の製品のメンテナンスの時どのバージョンまで引き上げるべきかなど、判断基準になる情報をこのページで調査できます。

**Security Bugs**
Tracking WebRTC Standalone - Security Bugs
Only a subset of the WebRTC codebase is used in Chrome. For standalone applications such as mobile applications (that depend on WebRTC native fixes) will be announced separately on discuss-webrtc.
https://webrtc.github.io/webrtc-org/bugs/security/

### 公式コミュニティ(discuss-webrtc)
単に疑問点を書くだけでなく、質問の中に自分のソースコードも含めてくれていたりします。WebRTCに関する相談の歴史がここに詰まっています。
https://groups.google.com/g/discuss-webrtc

## バグ情報
### chronium.org
https://bugs.chromium.org/p/chromium/issues/list?q=component%3ABlink%3EWebRTC&sort=-modified

### mozilla.org
https://bugzilla.mozilla.org/buglist.cgi?product=Core&component=WebRTC

### webkit.org
https://bugs.webkit.org/buglist.cgi?content=webrtc&order=changeddate%20DESC%2Cpriority%2Cbug_severity&query_format=advanced

## Windows上でのWebRTCビルド

**chromiumのビルド要件と同じ**なので、そちらで確認します。
下記のページから飛べる場所に必要となるVisual Studioのバージョン情報などが記載されています。
**Build Instructions (Windows)**
https://www.chromium.org/developers/how-tos/build-instructions-windows

下記にchromiumのTags一覧があります。
https://chromium.googlesource.com/chromium/src/+refs
ここで見たいバージョンを選択してから、**/docs/windows_build_instructions.md** を追加すると、そのバージョンにおけるビルド要件を把握できます。

例：m68の最後のリリース
https://chromium.googlesource.com/chromium/src/+/refs/tags/68.0.3440.134
ビルド要件は、Visual Studio 2017 (15.7.2)と、the version 10.0.17134 Windows 10 SDK。
https://chromium.googlesource.com/chromium/src/+/refs/tags/68.0.3440.134/docs/windows_build_instructions.md

### Windows上でのWebRTCライブラリ(.dll/.lib)ビルドスクリプト
勉強になります。おすすめはやはり時雨堂さんのスクリプトです。
https://github.com/shiguredo-webrtc-build/webrtc-build
https://github.com/microsoft/winrtc/tree/master/patches_for_WebRTC_org
https://github.com/RainwayApp/webrtc-build-scripts
https://github.com/iimachines/webrtc-build
https://github.com/sourcey/webrtc-builds
https://github.com/ipop-project/ipop-project.github.io/wiki/Build-WebRTC-Libraries-for-Windows

## 日本のWebRTCに関するコミュニティ
非常に勉強になる、日本語での情報源です。
WebRTC MeetupはWebRTCに興味がある全ての人向けの勉強会です。
https://webrtcmeetup.connpass.com/
ここでの発表は、Youtube上で録画を視聴できます。貴重な情報を公開してくださっていることに感謝いっぱいになります。今、更新頻度の特に高いレポジトリの１つのはずです。
https://www.youtube.com/hashtag/webrtcjp

## FlutterでWebRTC
Googleが本気を出して、TOYOTAやClickupも採用しているFlutterが熱くなっていますね！WebRTCに関する取り組みも必見です。

### Flutter WebRTC - About flutter's voip, webrtc related solutions.
https://github.com/flutter-webrtc
この中でlibwebrtcはどうなっているの？とたどっていくと、さらにこのプロジェクトは下記のライブラリを頼りにしていました。
### WebRTC SDKs - Pre-compiled WebRTC libraries
https://github.com/webrtc-sdk
Windowsに関するビルドの説明は下記にあります。
#### Manual compilation steps for Windows
https://github.com/webrtc-sdk/webrtc-build/blob/main/docs/windows.md

## Stack Overflow
下記で検索すると、案外良い情報が見つかります。
https://stackoverflow.com/questions/tagged/webrtc

## Microsoftのプロジェクト
Windows上でこのライブラリを、それもclangを使わずにmsvcでどこまで行けるのか、という貴重な情報源です。
https://github.com/microsoft/winrtc
https://github.com/webrtc-uwp
https://github.com/microsoft/WebRTC-universal-samples

## 時雨堂さんの技術サイト
日本語で貴重なWebRTCの情報を発信しつづけておられますので必見です。
https://medium.com/shiguredo

## NTT-Skywayさんの技術情報サイト
リリースごとの情報など参考になります。
https://note.com/skyway/

## オンラインの技術資料

### WebRTCハックス
https://webrtchacks.com/
Google翻訳：
https://translate.google.com/translate?sl=en&tl=ja&u=https://webrtchacks.com/

### 好奇心旺盛な人のためのWebRTC（日本語訳）
https://webrtcforthecurious.com/ja/

## 参考になるGithubのプロジェクト

WebRTC Native Client Momo
https://github.com/shiguredo/momo

WebRTC-streamer
https://github.com/mpromonet/webrtc-streamer

libdatachannel - C/C++ WebRTC Data Channels
https://github.com/paullouisageneau/libdatachannel

LibSourcey is a collection of cross platform C++14 modules and classes that provide developers with an arsenal for rapidly developing high performance network based p2p and media streaming applications. Think of it as the power and performance of libuv combined with the features of FFmpeg, OpenCV and WebRTC, all integrated with the ease and readability of the stl (C++ Standard Library).
https://github.com/sourcey/libsourcey/tree/master/src/webrtc