ffmpeg 複数インタフェースカードの対応

Pocket

複数のNICが搭載されたサーバマシンで、マルチキャストで配信されているストリーミング映像を受信しようとして、ガッツリと嵌りました。

環境

環境は以下の感じです。

マシン環境

OSCentOS 7.7.1908
NIC5枚 (利用したのは2枚だけ)
eth0〜eth5がある状態でeth0とeth1だけ使用。
(「eth?」は環境によって違うので適当に読み替えてください。)

ネットワーク

ネットワーク環境について説明する。
今回の環境では、ネットワーク1とネットワーク2がある。
ネットワーク1は、インターネットなど外部環境と接続している。
ネットワーク2は、マルチキャストで映像配信が行われており、その映像をキャプチャし、映像処理を施した後にネットワーク1側で提供する。

課題になった現象

今回、課題になった現象は、eth0側の通信は出来るのだが、eth1側からffmpegによる映像キャプチャが出来ないという現象が発生した。

色々と調べてみたのだが、eth1側のマルチキャストをルーティングにテーブルに設定することでキャプチャが可能になるように記載があちらこちらで見受けられたのだが、実際にはそれだけではダメだった。

解決策

このままのネットワーク構成でも実現できる可能性はあったが、結局は、eth0側のデフォルトゲートウェイによりマルチキャストの受信を行おうとしいて受信できない状態になっていると理解した。

そこで、eth0とeth1を入れ替えた。

ここでも問題が生じた。
新たにeth0となったネットワーク2側のデフォルトゲートウェイにより、外部との通信が遮断されてしまったのだ。
外部のアドレスは不特定なため、簡単にルーティングテーブルを指定することが困難であると判断し困惑した。

問題は、本来、ネットワーク1側のゲートウェイを介して外部に接続しなければならないのにも関わらず、ネットワーク2側のゲートウェイで捕捉されてしまい、ネットワーク1側に流れないということと判断した。

そこで、ネットワーク2側のデフォルトゲートウェイの設定を削除した。

次に行ったことは、ルーティングテーブルに224.0.0.0/4を登録した。

ここでも嵌った!

ドキュメントでは、/etc/sysconfig/network-script/route-eth0に以下の様に記述する方法があり、ネット上でもその記載方法が記されていた。

T.B.D

しかしながら、その設定ではなく、別の方法による記述が求められた。

ちなみに、ip routeコマンドでルーティングを/etc/rc.localに記載したのだが、起動時にコマンドを実行しても、ルーティングテーブルを確認すると設定が行われていない状況であった。

GUIを用いて、以下のルートを指定した。
<<<<現状はメモ状態なので、近日中に更新予定>>>>

224.0.0.0/4 ゲートウェイは0.0.0.0

これで上手く通信が出来るようになった。

以上でも問題解決が出来た。
ffmpeg自体はNICの指定が出来ないことから、無理やりするには色々と課題があるようだ。
環境を構築して、確認を行うことをお勧めする。

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください