Simple UDP Relay


QTSS2/DSS2時代から使える古い技術ですが、現在でも使え、手間はかかるが安定している中継サーバーリレー技術です。過去に手順を書いていなかったようですし、Macwebcaster-MLで書いたので、ここに記述しておきます。
以下、MLへの投稿引用———-
QT BroadcasterとQTSS/DSSとの間のAutomatic UnicastやQTSS/DSS間のPullリレーを私は一切使いません。理由は何度かこのMLでも書いた気がします。
1)ポートが自動選択となり、不具合があったときの原因追求ができない。ポートが指定出来ないためにFirewallを通すのにポートの範囲指定をする必要がある。
2)Pull式リレーは、QTSS/DSSでQT Playerを動作させるのと同じ(TCP:554、逆向きのUDP:6970〜9999を使用)で、既にリレーの親(Broadcasterが接続されているサーバー)が中継を始めていないとリレーが成立しない。また、一度リレー親側が中継を切断するとリレーが解除されてしまう。
よって、私が中継するときは、QT Broadcaster→QTSS/DSSはManual Unicastで接続(ネットワーク設定後、SDPを書き出して、ファイル転送)して、リレーはAppleが呼ぶところのSimple UDP リレー(Push式)を使っています。これだと、決めたポートだけFirewallに穴を空ければ良いし、Broadcasterやリレー親側が中継配信を途中で切っても、中継を再開した時点でリレーも続行出来るからです。
一応、Push式(Simple UDP)リレーの方法を(ご存知無い方のために)書いて起きます。
1) relayconfig.xmlを直接エディター等で編集する。
<RELAY_CONFIG>
<OBJECT TYPE=”relay” NAME=”Camp 04″>
<OBJECT CLASS=”source” TYPE=”udp_source”>
<LIST-PREF NAME=”udp_ports”>
<VALUE>7120</VALUE>
<VALUE>7122</VALUE>
</LIST-PREF>
<PREF NAME=”in_addr”>192.168.0.11</PREF>
</OBJECT>
<OBJECT CLASS=”destination” TYPE=”udp_destination”>
<PREF NAME=”dest_addr”>192.168.0.11</PREF>
<LIST-PREF NAME=”udp_ports”>
<VALUE>8120</VALUE>
<VALUE>8122</VALUE>
</LIST-PREF>
</OBJECT>
<OBJECT CLASS=”destination” TYPE=”udp_destination”>
<PREF NAME=”dest_addr”>192.168.0.6</PREF>
<LIST-PREF NAME=”udp_ports”>
<VALUE>8120</VALUE>
<VALUE>8122</VALUE>
</LIST-PREF>
</OBJECT>
</OBJECT>
</RELAY_CONFIG>
※<>はタグと識別され、blogに埋もれることを防ぐために全角で書いてますが、実際はこれを直接ペーストする前に半角の記号に置換してください。
上の例では、QT BroadcasterはManual Unicastで192.168.0.11なIPのQTSS/DSSのポート7120(Audio)、7122(Video)へ送信し、その192.168.0.11なサーバーは自分自身の別ポート、8120(Audio)、8122(Video)と別サーバーである192.168.0.6のポート、8120(Audio)、8122(Video)の2個所へリレーしている状態です。
relayconfig.xmlは、MacOSXだと、/Library/QuickTimeStreaming/Config/ に、Linuxだと、/etc/streaming/ にあります。
2台のQTSS/DSSの中継/ムービー配信用ディレクトリにそれぞれに、上記リレー設定に対応したSDPファイルを手動で書き換えた後、配置します。
192.168.0.11用
v=0
s=Live Channel
c=IN IP4 192.168.0.11 <–書き換え(IP)
a=x-qt-text-nam:Camp 04 Live Server 1 <–必要に応じて書き換え(タイトル)
a=x-qt-text-des:www.macwebcaster.com
a=x-qt-text-cpy:All Rights Reserved-2004 Macwebcaster-ML
a=x-qt-text-swr:Live Channel Pro 2.2.1
m=audio 8120 RTP/AVP 100 <–書き換え(ポート番号)
a=rtpmap:100 X-QT/44100
a=control:trackID=1
m=video 8122 RTP/AVP 99 <–書き換え(ポート番号)
a=rtpmap:99 X-QT/600
a=control:trackID=2
a=x-bufferdelay:8
192.168.0.6用
v=0
s=Live Channel
c=IN IP4 192.168.0.6 <–書き換え(IP)
a=x-qt-text-nam:Camp 04 Live Server 2 <–必要に応じて書き換え(タイトル)
a=x-qt-text-des:www.macwebcaster.com
a=x-qt-text-cpy:All Rights Reserved-2004 Macwebcaster-ML
a=x-qt-text-swr:Live Channel Pro 2.2.1
m=audio 8120 RTP/AVP 100 <–書き換え(ポート番号)
a=rtpmap:100 X-QT/44100
a=control:trackID=1
m=video 8122 RTP/AVP 99 <–書き換え(ポート番号)
a=rtpmap:99 X-QT/600
a=control:trackID=2
a=x-bufferdelay:8
なお、上記例のプライベートIP(192.168….)は、実際のサーバーリレーでは必要に応じて、そのままグローバルIPに置き換えて考えてください。
この手順だと、手間はかかりますが、リレーの安定性はPULL式より格段に増しますし、エンコーダー(例ではLiveChannel)からの送信やリレーをFirewallを越えて設定しようとする際に目標が明確化できます。