この文書ではPeercastStationでMKV配信した時の方法を記します。

MKVって何?

概要

ものすごく雑に言うと「何でも一緒くたにできるカゴ」です。

MKVにはどんな映像形式でもどんな音声形式でも入れることができます。 OBSの場合、映像トラックは1つだけですが音声トラックは6つまで乗せることができます。 これはFLVが映像はH.264限定、音声はaac形式1トラック限定なのとは違い、大きな自由度があります。

何がうれしいの?

MKVは複数の音声トラックを乗せることが出来るので、 1つ目のトラックには通常聞きたい音声を乗せて、 他のトラックには解説とかゲームの音声とかを分離して乗せることが可能です。

OBSの場合、設定の出力から詳細モードを選んで録画する時、どのトラックを録画するかを選択することが可能です。 どのトラックに何を乗せたいかについては、OBSのゲインメーター(音声ミキサー)で 「オーディオの詳細プロパティ」を選ぶことで指定することが出来ます。

どんな形式でも乗せることが可能なので、H.264やAAC以外の形式、 例えば映像だとHEVC、音声だとvorbisやopusなどを乗せることが出来ます。

PeercastStationでMKV配信するには

前提

MKVで配信する場合、OBSの「配信開始」ボタンでは配信できません。

MKVはOBS内部で使用しているffmpegを経由して配信することになります。 ただし通常のffmpegと違い、出力を詳細に指定するのはかなり難易度が高くなると思います。

これにともない、OBSの録画機能で録画することが出来ません。 録画する場合は別途ffmpegを用意して、そこにPeercastStationのストリームを読ませる形になります。

なお、再生に関してですが、MKVはWindowsだとWindows Media Playerは標準で対応しています。 VLC等ももちろん対応しています。 映像や音声コーデックについては別途対応が必要です。 例えばHEVCの場合、 VLCは対応していますがWindowsMediaPlayerの場合はMicrosoft StoreでHEVC拡張を購入する必要があります。

OBS側の設定

結論から書きます。

OBSのffmpegの設定

設定画面の出力から出力モードを詳細にして録画タブを開きます。

種別はカスタム出力にしてURLに出力します。 この時指定するURLはPeercastStationが動いているPCのIPアドレスを指定するのですが、 URLが厳密に一致する必要があります。 今回の例ではhttp://192.168.0.100:8080/stream.mkvですが、 これをPeercastStation側でも指定する必要があるので覚えておきます。 ちなみに同じPCでOBSと一緒に動かしている場合は127.0.0.1をIPアドレス部分に指定すればいいでしょう。

コンテナフォーマットはMKVを使いたいのでmatroskaを選びます。

映像ビットレートとエンコーダはお好きなものを設定してください。 通常のlibx264とかlibx265はCPUエンコードを行なうので重いのに注意が必要です。 nvencとかついているのを選ぶとGPUでのエンコードが出来ます。 HEVCの場合、hevc_nvencがNVIDIAのGPU、hevc_amfがAMDのGPUになります。

音声ビットレートと音声エンコーダもお好きなものを設定してください。 最近だとopusがオープンで遅延も少ないしdiscordも採用しているというので、 旬が来ている印象があります。

音声トラックは配信に乗せたいトラックを全て指定します。 最低でも1トラック目はチェックを入れないと音声が無い配信になってしまうでしょう。

PeercastStation側の設定

こちらも結論から書きます。

PeercastStationの配信設定

重要なのは以下の3つです。

  • ソースはHTTP Push Sourceを指定する。
  • ストリームURLはOBSで指定したものと厳密に一致させる。
  • ストリームタイプはMatroskaを指定する。

解説していきます。

HTTP Push SourceはPeercastStation側がHTTPサーバとなってストリームを待ち受ける設定です。 ストリームURLで指定されたURLでPeercastStationはストリームがPOSTされるのを待ち受けます。 通常のHTTPだと80番ポートを使うことが多いのですが、 これは通常のHTTPサーバと競合する可能性が高いので8080番ポートを使用します。 IPアドレスの後の文字列は何でも良いのですが、 ここは厳密にOBS側と一致させる必要があります(させなくても大丈夫という噂はありますが)。

HTTP Push Sourceの場合、PeercastStation側はどんなコンテナで送られてくるのかわかりません。 RAWを指定した場合はそのまま中継するだけの動作なのでどんなものでも流せるはずですが、 ちゃんとコンテナを選ぶことで(雑に言うと)配信が安定します。

なお、ポートに関してですが当然のことながらPeercastStationが動いているポートでは待ち受けられません。 同じPCで動いているのでなければファイアウォールの設定も必要になります。

その他、ネットワーク等の設定項目は通常通りです。 念のため注記しておくと「ネットワーク」はどのネットワークに配信を流すかという設定です。 現状ではIPv6に対応しているのはYPv6だけなので通常はIPv4を選びましょう。

配信を録画するには

配信を録画するにはPeercastStation経由で録画する必要があります。 さらにffmpegを入れている必要があります。 ffmpegのインストールについての詳細については省きます。

まず、PeercastStationのリレー画面から自分の配信のストリームURLを探しておきます。 HTML UIの場合、自分の配信の部分のコンテナ部分(MKVとか)にそこへのリンクがあるはずです。

次にコマンドラインで次のように入力します。

ffmpeg -i http://192.168.0.100:7144/stream/XXXXXXXXXXXXXXXXXXXXXXXX?auth=XXXXXXXXXXXXXXXXXXXXXXXXXXXX -c:v copy -c:a copy -map 0:v -map 0:a test.mkv

ポイントは以下の点です。

  • -iの後にストリームURLをそのまま入力する(コピペでよい)。
  • -c:v copy-c:a copyは手元で再エンコードしないために設定する。
  • -map 0:v -map 0:aは全ての映像トラックと全ての音声トラックを指定している。これが無い場合、音声トラックは1つだけコピーされる。
  • test.mkvは出力ファイルを指定している。.mkvの部分以外は別になんでもよい。

もちろん空白(スペース)はちゃんと入れておきましょう。

最後に

MKV配信はまだ発展途上です。私の配信でもトラブルが何回も起きています。

しかしながら好きなコーデックを選べて音声トラックをたくさん追加できるメリットは非常に大きいです。 険しい道ですがトライしてみて損は無いでしょう。