VLCでマルチキャストソースとマルチキャストレシーバを動かす(SSM+IGMPv3)

# はじめに。
　VLCメディアプレイヤーには，マルチキャストソースとしてマルチキャストパケットを配信する機能と，マルチキャストレシーバとしてマルチキャストパケットを受信する機能があります。これらの機能を活用し，ネットワーク内でマルチキャストパケットの疎通をテストしてみます。

# この記事で取り扱わない内容
- ルータ・スイッチなどのネットワーク機器の設定。
- マルチキャストの概要的な知識。
- マルチキャストルーティングプロトコル（PIM-SMとかPIM-DM）
- CODECの種類

# 準備する環境
- マルチキャストルーティング（PIM-SMとSSM）が有効になっているネットワーク（ルータ，スイッチ等）。
- VLCメディアプレイヤー（以下，VLC。今回はubuntu用3.0.18を利用）
- マルチキャストソース用PC（VLCが動くなら，WindowsでもUbuntuでも。）
- マルチキャストレシーバ用PC（VLCが動くなら，WindowsでもUbuntuでも。）

# マルチキャスト配信する（マルチキャストソース用PCの操作）
- 配信用のMP4ファイルを拾ってきます。今回は[ここ](https://test-videos.co.uk/bigbuckbunny/mp4-h264)からダウンロードしました。
- VLCを起動します。
- VLCの設定で、送出パケットのTTLを[変更](https://www.infraexpert.com/study/multicastx03.html)し(32とか64ぐらいにしておけば十分）、VLCを再起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457890/34393ade-de1c-2637-bc4f-e20071747493.png)


- 「メディア」→「ネットワークストリームを開く」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457890/c6a9e471-5aab-edf8-e8dc-536ea184b09d.png)
- 「ネットワーク」タブから「ファイル」タブへ移動
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457890/544358f1-90c4-57c6-e7db-1c73618eb62c.png)
- 「ファイル」タブで「＋追加」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457890/556775bc-95fa-326e-e825-e6787a6c5320.png)
- ファイル選択画面から、MP4ファイルを指定
- 「再生」右の▼をクリックし、「ストリーム再生」を選択。ウィザードが開始されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457890/d1fbc8c1-cf9a-97cc-a98c-a3c5ce814c58.png)
- 「入力元」はそのまま「次へ」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457890/f3d39575-9b39-3a33-7d49-bc80218dd514.png)
- 「出力先の設定」の「新しい出力先」で「RTP/MPEG Transport Stream」を選択し、「追加」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457890/472a153d-8bdf-9087-6dc9-0f74740477fa.png)
- 「アドレス」にグループアドレス（配信先のマルチキャストIPアドレス）を入力し「次へ」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457890/4d4407b5-2d80-b39c-e26f-55491f714bbf.png)
- 「トランスコーディング」では、「トランスコーディングを有効にする」のチェック有、プロファイルを「Video - H.264+MP3(TS)」を選択し「次へ」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457890/714c1af0-956b-a39e-e318-74f79cc00078.png)
-「オプション設定」で「ストリーム」をクリックすると、マルチキャスト配信が始まります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457890/ce4e4677-883b-6ff2-62e3-1900defe2b2a.png)
- ループボタンを押しておくと、エンドレス（ループ再生）でマルチキャスト配信します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457890/efd2497b-1457-0eb6-e544-00083abcba06.png)


# IGMPv3でマルチキャスト受信する（マルチキャストレシーバ側）
- ラストホップルータでSSM（Source Specific Multicast）が有効化されている必要があります。
- VLCを起動します。
- 「メディア」→「ネットワークストリームを開く」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457890/c6a9e471-5aab-edf8-e8dc-536ea184b09d.png)
- 「ネットワークURL」に、「rtp://__ソースIPアドレス__ @ __グループアドレス__」を入力します。例えば、172.16.90.21のマルチキャストソースから232.1.1.1宛のマルチキャストパケットを受信する場合には、「rtp://172.16.90.21@232.1.1.1」です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457890/59b840c7-d4cc-5baa-1b5c-209f90ffc011.png)
-「再生」をクリックすると、マルチキャスト配信された動画が再生されます。
- Wiresharkでキャプチャすると、レシーバからIGMPv3 Membership Reportが送信されたことが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457890/c5187983-847e-25f0-50c9-a4c7f7496486.png)

# 注意点
- VLCのマルチキャストパケットはTTLがデフォルトで1です。なので，そのままだとルータを越えてくれません。ルータ越えする場合には、設定でTTLを増やす必要があります。
- VLCでは[IGMPv2を明示的に使うことはできない](https://forum.videolan.org/viewtopic.php?t=1154)ようです。VLCの機能というより、OSがIGMPv3を使ってしまうようです。WindowsXP（多分それ以降も）では、IGMPv3が標準のようです。[レジストリを書き換えればIGMPv2を使える](https://support.huawei.com/enterprise/en/knowledge/EKB0000396506)ようですが、そこまでしてIGMPv2を使う必要もないでしょう…

# 参考資料
- 詳解マルチキャスト（ソフトバンククリエイティブ）