PeercastStationでMKV配信する方法
この文書では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側の設定
結論から書きます。
設定画面の出力から出力モードを詳細にして録画タブを開きます。
種別はカスタム出力にして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側の設定
こちらも結論から書きます。
重要なのは以下の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配信はまだ発展途上です。私の配信でもトラブルが何回も起きています。
しかしながら好きなコーデックを選べて音声トラックをたくさん追加できるメリットは非常に大きいです。 険しい道ですがトライしてみて損は無いでしょう。