まだ執筆中の箇所が多くあります。ご容赦ください。
---
title: 凡例
---
graph LR
A == 映像信号 ==> B
A -- 音声信号 --> B
A -. 無線通信 .-> B
graph LR
Mic("🎤")
MicIF(KWS-899R\nワイヤレスマイク I/F)
NUC(intel NUC\nボイス処理)
Out((出力))
UR(Steinberg UR22C\nオーディオ I/F)
Mic -. UHF .-> MicIF
MicIF --> UR
NUC --> UR
UR --> Out
UR --> NUC
graph LR
BTr(Bluetooth\nレシーバー)
Out((出力))
Pixel("📱 Pixel 6 Pro\n配信プレビュー")
Pixel -.-> BTr
BTr --> Out
graph
BTt(Bluetooth\nトランスミッター)
iCA(iConnectAudio 4+\nオーディオルーター)
iPhone("📱 iPhone 13 Pro Max\nアバター表示")
Mac("💻 Apple MacBook Air\n配信 and 作業環境")
Monitor("🖥️")
Phone("🎧")
Preview(["⚙️ 共通部分\n配信プレビュー"])
Voice(["⚙️ 共通部分\nボイス処理"])
BTt -.-> Phone
iCA --> BTt
iCA --> Mac
iPhone ==> Mac
Mac --> iCA
Mac ==> Monitor
Preview --> iCA
Voice --> iCA
graph
iPhone("📱 iPhone 13 Pro Max\nアバター表示")
Capture(AVerMedia GC553\nゲームキャプチャー)
iCA(iConnectAudio 4+\nオーディオルーター)
Monitor("🖥️")
Phone("🎧")
Preview(["⚙️ 共通部分\n配信プレビュー"])
Switch("🎮 Nintendo Switch\nゲーム機")
Voice(["⚙️ 共通部分\nボイス処理"])
Mac("💻 Apple MacBook Air\n配信環境")
Capture ==> Mac
Capture ==> Monitor
iCA --> Mac
iCA --> Phone
iPhone ==> Mac
Mac --> iCA
Mac ==> Monitor
Preview --> iCA
Switch ==> Capture
Voice --> iCA
- Bluetooth トランスミッターは遅延が無視できず、ゲーム音声との同期が取れないため、この時は有線接続としています。
(AptX LL 対応トランスミッター&ヘッドホン、もしくは独自無線方式でアナログ入力のあるワイヤレスヘッドホンを探しています……)
graph
Capture(AVerMedia GC553\nゲームキャプチャー)
HDMI(HDMI スプリッター)
iCA(iConnectAudio 4+\nオーディオルーター)
iPhone("📱 iPhone 13 Pro Max\nアバター表示")
Mac("💻 Apple MacBook Air\n配信環境")
Monitor("🖥️")
NUX(intel NUC Extreme\nゲーム)
Phone("🎧")
Preview(["⚙️ 共通部分\n配信プレビュー"])
Voice(["⚙️ 共通部分\nボイス処理"])
iCA --> Phone
iPhone ==> Mac
Capture ==> Mac
HDMI ==> Capture
HDMI ==> Monitor
iCA --> Mac
iCA --> NUX
Mac --> iCA
NUX ==> HDMI
NUX --> iCA
Preview --> iCA
Voice --> iCA
- Mermaid 構文の都合上、矢印が逆転している箇所があることにご留意ください。
- FAQ: なんでゲームキャプチャーのパススルー機能使わず、スプリッターで分配かましてるの?
- →MacBook Air がシャットダウン中、映像全部死ぬから
graph
Capture(AVerMedia GC553\nゲームキャプチャー)
HDMI(HDMI スプリッター)
iCA(iConnectAudio 4+\nオーディオルーター)
iPhone("📱 iPhone 13 Pro Max\n配信プレビュー")
Mac("💻 Apple MacBook Air\n配信環境")
Monitor("🖥️")
NUX(intel NUC Extreme\nVR ゲーム)
Phone("🎧")
Voice(["⚙️ 共通部分\nボイス処理"])
VR("👓 Valve Index\nVR ヘッドセット")
NUX ==> VR
Capture ==> Mac
HDMI ==> Capture
HDMI ==> Monitor
iCA --> Mac
iCA --> NUX
iPhone -.-> Phone
Mac --> iCA
NUX ==> HDMI
NUX --> iCA
Voice --> iCA
VR --> Phone
- この状況の場合、アバター表示を妥協して、静止画表示しています。
- iPhone に AirPods Pro を接続し、外音取り込み機能(逆ノイキャン)を有効にすることで、VR ゲームの音声と iPhone での配信プレビューの音声とを同時に聞くことができます。
graph
iCA(iConnectAudio 4+\nオーディオルーター)
iPhone("📱 iPhone 13 Pro Max\nアバター表示")
Monitor("🖥️")
NUX("intel NUC Extreme\n配信 and (作業 or ゲーム)環境")
Phone("🎧")
Preview(["⚙️ 共通部分\n配信プレビュー"])
Voice(["⚙️ 共通部分\nボイス処理"])
iCA --> Phone
iPhone -. AirPlay .-> NUX
NUX ==> Monitor
iCA --> NUX
NUX --> iCA
Preview --> iCA
Voice --> iCA
graph
Airpods("🎧 Airpods Pro")
iPhone("📱 iPhone 13 Pro Max\nアバター表示")
Pixel("📱 Pixel 6 Pro\n配信プレビュー")
Mac("💻 Apple MacBook Air\n配信 and 作業環境")
iPhone ==> Mac
Airpods -.-> Mac
Mac -.-> Airpods
iConnectAudio 4+ のオーディオルーティング構成は以下の通りです。
本機器は 1 ポート辺り 6ch の USB 入力を 2 ポート、加えて 4ch のアナログ入力持ちます。
(使用していませんが MIDI インターフェイスなども備えています)
graph
Mac("💻 Apple MacBook Air\n配信環境")
Mic("🎤\nAnalog 3ch")
NUX("intel NUC Extreme\nゲーム環境")
Phone("🎧")
Preview(["⚙️ 共通部分\n配信プレビュー\nAnalog 1-2ch"])
Mac -- "1-2ch -> 5-6ch" --> NUX
Mac -- "1-2ch -> mix" --> Phone
Mic -- "3ch -> 1ch" --> Mac
Mic -- "3ch -> 1ch" --> NUX
NUX -- "1-2ch -> 5-6ch" --> Mac
NUX -- "1-2ch -> mix" --> Phone
Preview -- "1-2ch -> mix" --> Phone
intel NUC において、ボイス調整を行なっています。 渡航先などを想定して、Mac にも同等の環境を用意しています。
以下の VST ホスト環境に対して VST プラグインと総称する各種ソフトウェアエフェクターを導入し、ボイス調整を行なっています。
- Windows: Kushview Element
- macOS: Rogue Amoeba Audio Hijack
graph
In((Input))
Out((Output))
DeNoise("RX8 Spectral De-noise\nノイズキャンセラー\n切ると音圧調整で定量的ノイズが増幅される")
DeClick("RX8 DeClick\nクリックノイズキャンセラー\n切ると音圧調整で突発的ノイズが増幅される")
VoicePitcher("ToneBoosters VoicePitcher\nピッチ&フォルマント調整\n切ると地声になる")
Equalizer("ToneBoosters Equalizer\n音域&強調調整\n切ると音域が偏り、ケロケロしたり物足りなくなったりする")
Compressor("ToneBoosters Compressor\n音圧調整\n切ると声が極端に小さくなる")
In --> DeNoise
DeNoise --> DeClick
DeClick --> VoicePitcher
VoicePitcher --> Equalizer
Equalizer --> Compressor
Compressor --> Out
graph LR
Capture(AVerMedia GC553\nゲームキャプチャー)
Chat("💬 Restream Chat\nコメント表示")
Discord("📞 Discord\nボイスチャット")
iPhone("📱 iPhone 13 Pro Max\nアバター表示")
VSCode("Visual Studio Code\n実際の作業画面")
Video("🎞️ 動画ファイル")
Capture --> OBS
Chat --> OBS
Discord --> OBS
iPhone --> OBS
Video --> OBS
VSCode --> OBS
Facebook("Facebook Live")
OBS("OBS Studio\n映像ソース")
Pixel("📱 Pixel 6 Pro\n配信プレビュー")
Restream("Restream.io\n配信プラットフォーム")
Twitch("Twitch")
Twitter("Twitter Live")
YouTube("YouTube")
OBS --> Restream
Restream --> Facebook
Restream -. Twitch 規約上\n同時配信は不可 .-> Twitch
Restream --> Twitter
Restream --> YouTube
YouTube -.-> Pixel
OBS の配信開始に連動して、Restream による各配信プラットフォームへの配信が開始し、配信終了に連動して配信が終了します。この際自動的に配信枠の作成・終了も行われます。
(ただこれには欠点もあり、ネットの瞬断などで配信が一時的に切断された場合、枠ごとぶった斬られます)
stateDiagram-v2
state useGame <<choice>>
state useSpecial <<choice>>
Prepare : 準備中シーン
Game : ゲーム シーン\nキャプチャとアバター
End : 終了シーン
[*] --> useSpecial : 配信開始
Develop --> End : 作業終了
End --> [*] : 配信終了
Game --> End : ゲーム終了
Prepare --> useGame : 準備完了
Special --> [*] : 配信終了
useGame --> Develop : キャプチャ不使用
useGame --> Game : キャプチャ使用
useSpecial --> Prepare : 通常時
useSpecial --> Special : 特殊な配信時
state Develop {
Code : VSCode 表示\nFirefox を PiP 表示
PbP : Firefox と VSCode を\n等分割表示
Web : Firefox 表示\nVSCode を PiP 表示
Code --> PbP : フォーカス\n自動検知
Code --> Web : フォーカス\n自動検知
PbP --> Code : フォーカス\n自動検知
PbP --> Web : フォーカス\n自動検知
Web --> Code : フォーカス\n自動検知
Web --> PbP : フォーカス\n自動検知
}
state Special {
direction LR
Avatar : アバターのみ表示
Capture : キャプチャーのみ表示
[*] --> Avatar
[*] --> Capture
Avatar --> [*]
Capture --> [*]
}
note right of Special : 特殊な配信でのみ使用
自動などの表記がない場合、手動的なシーン操作を行っています。
- コメント表示
- Restream Chat を使用しています。
- Restream Chat は Restream.io による配信プラットフォームへの配信に連動して、各配信プラットフォームからのコメントを表示します。
- OBS 本体のウィンドウキャプチャ
- ビットレート表示: これが死にかけてクルクルした場合、ネット死んだんだなって解ってもらえます。
- ゲームキャプチャ
- AVerMedia GC553 を使用しています。
- ビデオとオーディオを分けてキャプチャしています。
- Discord
- アバター表示
- iPhone 13 Pro Max で表示しているアバターを有線または AirPlay 経由でキャプチャしています。
- Fallback として、静止画像の立ち絵も用意しています。
- 準備中・終了時テキスト
- これは OBS のテキストソースで表示しています。
- チャンネル登録・高評価・コメント・Twitter フォローなどのお願いをしています。
- メインコンテンツのテキスト
- これも OBS のテキストソースで表示しています。
- ゲームのタイトルや現在の作業内容を一言で表示しています。
配信開始してから、実際の配信スタートまでに流す準備中のテロップを表示します。
場合によっては作業中画面をこの段階から表示してしまう場合もあります。(私もやってます)
時間制限を示す、残り時間やプログレスバー、長さ固定のムービーなどを流すと視聴者の流出を防ぎやすいですが、時間ブッチを繰り返すと信用を失う諸刃の剣です。
- 共通パーツ
- コメント表示
- OBS 本体のウィンドウキャプチャ
- ゲームキャプチャ
- Discord
- アバター表示
- メインコンテンツのテキスト
人によっては時計やチャンネル登録者数を表示する人もいます。
- 共通パーツ
- コメント表示
- OBS 本体のウィンドウキャプチャ
- Discord (原則非表示)
- アバター表示
- メインコンテンツのテキスト
- 固有パーツ
- Code
- VS Code 表示
- Firefox を PiP 表示
- PbP
- Firefox と VS Code を等分割表示
- Web
- Firefox 表示
- VS Code を PiP 表示
- Code
人によっては時計やチャンネル登録者数を表示する人もいます。
配信終了の旨のテロップを表示します。 (私は複数プラットフォームで配信しているので、やっていませんが)人によっては YouTube における、チャンネル登録やおすすめ動画表示のための、プレースホルダーを表示する方もいます。
以下のシーンは文字通り全画面に表示するシーンです。 原則として Discord 配信のような特定内輪での配信など、特殊な配信でしか使用しません。
- アバターのみ表示
- キャプチャーのみ表示
開発作業配信などの場合、複数ウィンドウに取っ替え引っ替えフォーカスを当てて作業する場合があります。 一般的にライブ配信では、現在作業しているウィンドウを大きく表示して視認性を確保するのが望ましいですが、これを手動で行うのは大変です。
そこで、OBS には自動シーンスイッチャーという機能があります。 これを使用すると、特定のウィンドウがアクティブになったときに、自動的にシーンを切り替えることができます。
私の環境では、以下のように設定しています。
- ブラウザ表示: Firefox を大きく表示し、VS Code を PiP 表示
- 条件: Firefox のウィンドウをアクティブにしたとき
- コード表示: VS Code を大きく表示し、Firefox を PiP 表示
- 条件: VS Code のウィンドウをアクティブにしたとき
- PbP 表示: Firefox と VS Code を等分割表示
- 条件: Firefox か VS Code 以外のウィンドウをアクティブにしたとき
10 ステップに分けて、順番に行うタスクリストを列挙します。
- 配信するゲームなどの企画を立てます。
- 企画というと大仰な印象ありますが、“APEX Legends でランクマ回す” 程度の一行企画でも問題ありません。
- 1 をもとに、配信概要を作成します。
- これはそのまま YouTube の配信アーカイブの概要になるものです。
- 1 をもとに、サムネを作ります。
- 繰り返しの場合、使いまわせるようにテンプレートを作っておくと良いです。
I の後に行います。より早く行うに越したことはありませんが、余程大規模なイベントを除き 3 週間以上前の告知はお勧めしません。忘れてしまいますので。
- Restream.io にログインし、I-2 と I-3 を使い配信イベントを登録します。
- この段階で各プラットフォームにおける、イベント機能がある場合イベントが登録されます。
- なお、私の利用しているプラットフォームだと、YouTube のみ対応しています。
Twitch のカレンダーとかは未対応っぽい。
- なお、私の利用しているプラットフォームだと、YouTube のみ対応しています。
- この段階で各プラットフォームにおける、イベント機能がある場合イベントが登録されます。
- 1 により各プラットフォームのイベントの URL が発行されるため、そこへ遷移してより詳細なイベントの設定を行います。
- 検索タグ設定や、プレイするゲーム名の設定など。
- 1 の URL を添えて、配信の予告を告知・ツイートします。
- II-1 により RTMP のストリームキーが発行されるため、OBS Studio を起動して、設定の配信カテゴリより上書きします。
- 1 に引き続き、OBS の配信シーンを選択し、テロップに I-2 の概要を簡略化して記入します。
- この工程は忘れないこと! これを忘れると、例えば “APEX Legends をプレイしているのに、配信テロップが Minecraft のままとなっていて、その結果視聴者から「最近のスケルトンはボセック撃ってくるのか」とか「クリーパー飛んでくるのん?」とか指摘を受ける”ような大恥級の事故が発生し得るので注意。
- (時間が圧している場合は省略可)ここで配信に関わる端末を一斉再起動します。
- スマホやキャプチャーボードなども、可能な限り再起動します。
- これにより、システムに蓄積したゴミを一掃でき、変な不具合が発生するのを抑止します。
- 時間に余裕があるなら、再起動前にシステムやアプリの一斉アップデート (
brew upgrade
、choco upgrade -y all
など) もやっておくと、より望ましいです。
- iPhone 側のアバター表示設定を行います。
- iPhone の集中モードを設定して、リア友からの唐突な着信による身バレを防ぎます。
- iPhone でカスタムキャストを起動して、配信を始めます。
- この際必ず “バーチャルライブ配信”を OFF にして、VirtualCast で別の独り言配信を始めないよう注意します。
- iPhone を PC または Mac に接続します。
- Mac に接続する場合、有線接続することで OBS からはキャプチャデバイスとして認識され、OBS から iPhone の画面を配信できるようになります。
- Windows の場合、Reflector などの任意の AirPlay レシーバー アプリ経由で PC に接続する必要があります。
- 配信に必要なアプリを一斉起動して、適宜レイアウトを調整します。
- Discord
- OBS Studio
- Restream Chat
- PC スペックが貧弱な場合、必要に応じて各種アプリを
renice
します。 - 机上にコーヒー、水、お菓子、時には酒も用意します。
- Discord でマイク確認をして、視聴者に読唇術の訓練をさせる放送事故を回避します。
- 必要に応じて Discord のボイスチャットを開始します。
- 他者との通話によるコラボ案件などの場合は、ここで最終ブリーフィングをしておくのも良いかもしれません。
- Pixel 側の設定を行い、配信プレビュー環境を整えます。
- Bluetooth レシーバーに接続し、Pixel からの音声をヘッドホンから直接聞けるようにします。
- Pixel で II-3 を YouTube アプリで開き、待機枠に参加します。
- ゲームなどを起動し、OBS で適切にキャプチャできていることを確認します。
- OBS のシーンを切り替えて、ゲーム音声、マイク音声が適切にキャプチャできていることを確認します。
- Discord ボイスチャットを開始している場合、これも OBS で音声キャプチャできていることを確認して、独り言配信を回避します。
- OBS のシーンを準備中に戻します。
- OBS のスタジオモードを有効にして、プレビュー シーンにメイン配信のシーンを指定しておきます。
- II-1 のツイートのリンクをクリップボードに入れておきます。
- OBS の配信開始ボタンを押下します。
- 各プラットフォームを巡回し、ライブ配信が始まっていることを確認します。
- II-1 ツイートのリンクをつけて、Twitter で配信開始の告知をします。
- ライブ配信が始まっている場合、当該ツイートに “YouTube でも同時配信中” の旨を II-1 ツイートのリンクとともに、リプライでぶら下げます。
- Restream Chat に“まもなく配信を始めます。しばらくお待ちください”という旨のコメントを投下します。
- タイミングを見計らい、トランジション ボタンを押下してシーンを切り替えます。
- 自身の声がライブ配信されていること、ゲーム音声や Discord 通話相手の声がライブ配信されていることを確認します。
- 挨拶します。
- 簡単な自己紹介します。エレベーターピッチを考えておくとより良いです。
- (開発作業配信の場合のみ) シーンスイッチャーを開始します。
- 配信概要を説明します。
- OBS のスタジオモードを終了します。(これはお好みに応じて)
楽しめ!🐱
- ここまでの内容を中間まとめに入ります。
- このチャンネルでの活動内容を、視聴者に対するベネフィットに大きく寄った視点で、簡単に説明します。
- ちょっとシリアス強めな口調で、緊張感ある空気にして視聴者にお願いがある旨を投げかけます。
- 唐突に明るい口調に転じて、高評価をお願いします。
- 高評価の方法をノリの良い感じで説明します。
- 高評価してくれたことに対して、感謝の気持ちを表明します。
- さらにチャンネル登録もお願いします。
この 2〜7 のトークは口癖にできると尚良し!
- まとめに入る感じで、今回の配信の内容を振り返ります。
- VIII-1 〜 VIII-6 と同様のトークを繰り返します。
- 次回配信の告知をします。
- 配信終了の挨拶をします。
- (開発作業配信の場合のみ) シーンスイッチャーを終了します。
- これを忘れると、配信終了シーンから勝手に帰ってきてしまう放送事故が発生します。
- 配信終了シーンに切り替えます。
- 配信をプレビューして、配信終了シーンに切り変わったことを確認します。
- 配信が終わった旨を Restream Chat にコメントします。
- 配信 BGM 音量をフェードアウトします。
- OBS の配信停止ボタンを押下します。
- 配信 BGM 音量を戻します。
- 配信終了と視聴していただいたお礼のツイートをします。
- 他者との通話によるコラボ案件などの場合は、ここで反省会やアフタートーク会を行うのも良いでしょう。
- OBS ほか、各種アプリやゲームを終了します。
- Pixel の YouTube アプリを終了し、Qi スタンドに立てます。
- iPhone のカスタムキャストアプリを終了し、MagSafe 充電器に貼りつけます。
- YouTube のライブ配信のアーカイブにアクセスし、終了画面やチャプターなどの編集をします。
- 次回配信までの健康維持のためにも、いっぱい寝ましょう 😴
MIT に準じます。原則、以下を満たせば自由に利用できます。
- 出典の明記
- 責任は取りません