WebRTC は RTP を利用して音声や映像を送受信しています。RTP には RTP 拡張という好き勝手に拡張できる仕組みがあります。
RFC 8285 - A General Mechanism for RTP Header Extensions
つい最近古い RFC が上書きされたのでせっかくなので紹介してみます。RTP 拡張については RFC 読めばわかるので割愛します。
#!/usr/bin/osascript -l JavaScript | |
ObjC.import("stdlib"); | |
ObjC.import("AppKit"); | |
ObjC.import("PDFKit"); | |
ObjC.import("Vision"); | |
const scriptName = $.NSProcessInfo.processInfo.arguments.objectAtIndex(3).lastPathComponent.js; | |
console.error = (obj) => { |
#!/bin/bash | |
SCRIPTNAME=$(basename "$0") | |
function realpath () { | |
f=$@; | |
if [ -d "$f" ]; then | |
base=""; | |
dir="$f"; | |
else | |
base="/$(basename "$f")"; |
WebRTC は RTP を利用して音声や映像を送受信しています。RTP には RTP 拡張という好き勝手に拡張できる仕組みがあります。
RFC 8285 - A General Mechanism for RTP Header Extensions
つい最近古い RFC が上書きされたのでせっかくなので紹介してみます。RTP 拡張については RFC 読めばわかるので割愛します。
以下の内容は M63 時点の情報です。
WebRTC ライブラリのソースコードはサイズが 6GB 以上あってダウンロード時間でペヤングが 100 個は食べられるほどで、ビルドするにも Mac Pro の 12 コアをフル回転させて 1 つのアーキテクチャにつき最低 15 分はかかります。その上ビルドは相当に複雑な構成をしており、全地球のプログラマの寿命を戦闘機のカタパルトで助走をつけて殴っていいレベルで削らせるブラックなボックスです。あまりに自力ビルドの難易度が高いので WebRTC Build Scripts というビルドスクリプトも登場しましたが、最近ビルド方法が大きく変更されたために残念ながらこのビルドツールの内容は古くなってしまいました。
幸い iOS では公式ビルドのバイナリをダウンロードできるようになりました。 ところが「これで iOS はすべて解決!」とも言えません。 WebRTC のビルドには様々なオプションが用意されており、公式ビルドはあくまで特定のオプションの組み合わせの一つです。残念なことに用途によっては公式ビルドでカバーできない場合もあり、気軽に依存できない状況もあると思います。 時雨堂の WebRTC SFU Sora とかそうです (宣伝)。
この記事の目的は、ビルドの各手順の意味を把握してもらうことです(理解とは言ってない)。おそらく自力ビルドせざるを得ない人はほとんどいないと思いますが、万が一の場合に参考になれば幸いです。
Streaming your Linux desktop to Youtube and Twitch via Nvidia's NVENC and VAAPI:
Considerations to take when live streaming:
The following best practice observations apply when using a hardware-based encoder for live streaming to any platform:
Set the buffer size (-bufsize:v
) equal to the target bitrate (-b:v
). You want to ensure that you're encoding in CBR mode.
Set up the encoders as shown: