SIP経由でTwilioからオーディオストリームを取得し、さらに配信するためにRTMP CDNに送信します

画像

ご存知のように、本質的に、ストリーミングビデオをエンドユーザーに配信するために使用されるCDNネットワークがあります。 たとえば、サッカーの試合のオンライン放送を見てみましょう。 歴史的に、Adobeが開発したRTMPプロトコルは、ライブビデオコンテンツの配信で非常に人気があり、このプロトコルは、カメラからビデオストリームをキャプチャし、後でサーバーまたはCDNに送信する自尊心のあるすべてのエンコーダデバイスまたはプログラムでサポートされています配布。 この記事では、SIPをCDNのストリームソースにする方法について説明します。

ビデオをエンドユーザーにさらに配信する方法は、特定のCDNと使用されるテクノロジーによって異なります。これにより、Apple HTTPライブストリーミング、RTSP、MPEG-DASH、WebRTC、Websocketsなど、多くのデバイスやプラットフォームでストリームを表示できます。

画像

また、SIP(Session Initiation Protocol)プロトコルが主にオーディオコールとテレフォニーのプロトコルとして知られていることも歴史的に開発されており、このため、このプロトコルはCDNプロバイダーおよびCDNネットワークのサーバーソフトウェアベンダーの関心のある分野に該当しなかった可能性が最も高いです。

画像

多くのSIPはテレフォニーのみに関連付けられていますが、SIPは当初、オーディオ、ビデオ、ファイル、メッセージなどの任意のデータの後続の転送のための接続を確立するためのユニバーサルプロトコルとして計画および開発されました。 これまでのところ、プロトコルは完全に古く、多数のソフトウェアおよびインターネットサービスが何らかの形でSIPプロトコルをサポートしています。 基本的に、ビデオ会議、ビデオチャット、通信に関連するこのソフトウェアと機器。

その結果、この技術的接合点であるSIPとCDNで、SIPデバイスまたは通信サービスをCDNネットワークのビデオストリームのソースとして使用し、このビデオストリームをエンドユーザーに配信するための統合タスクが登場しました。

画像

最も単純な例は、SIPサポートを備えたソフトウェアに基づいて展開され、イベントの幅広いプレゼンテーションのためにCDNネットワークへのブロードキャストを必要とする、教育またはパブリックトピックに関するビデオ会議またはウェビナーです。

画像

この記事では、簡単にするために、SIP会議からオーディオストリームをキャプチャし、RTMPを介してこのストリームをさらにブロードキャストすることに制限します。 厳密に言えば、このアクションは、ビデオキャプチャよりもさらに変換とトラフィックのリダイレクトを伴うSIPコールです。

画像

「コマンド」の矢印は、キャプチャとブロードキャストの図に表示されます。実際、SIPデバイス、統合サーバー、およびRTMPサーバーの3人の参加者がいる場合、SIPストリームのキャプチャを開始するコマンドを与えることができるインターフェイスまたはAPIが必要ですさらにブロードキャスト、つまりケース自体を実行します。

別の要件-呼び出しとブロードキャストは、並行して大量にインストールできる必要があります。 つまり SIP Call1-RTMP Stream1、SIP Call2-RTMP Stream2のペアなどを設定できます。 たとえば、同時に進行する複数のウェビナー(部屋)がある場合。

画像

SIP会議のサーバー/サービスとして、Twilioサービスを使用します。
CDNを構築できるRTMPサーバーとして、Wowza Streaming Engineを使用します。
統合サーバーは、SIPからRTMPへの変換および変換をサポートするWeb Call Server 4になります。
SIPを呼び出してストリームをRTMPにリダイレクトするサーバーへのコマンドは、REST / HTTPを介して送信されます。これは、おそらくインターネットで最も一般的なHTTPベースのソフトウェア相互作用方法です。

この記事では、簡単なREST / HTTPリクエストを使用して音声メッセージまたは音声通話をブロードキャストする方法について説明します。

これには以下が必要です。


Twilio


Twilioは、テレフォニーサービスをモバイルおよびWebアプリケーションに統合するAPIを提供するクラウドベースの電話プラットフォームです。
Twilioを使用するには、登録する必要があります。 登録後、Twilioの指示を含むアプリケーションURLを割り当てることができる電話番号を選択できます。 この番号への着信コールは、これらの指示に従って処理されます。 たとえば、音声メッセージを再生したり、電話会議への接続を確立したりできます。

電話番号の呼び出しに加えて、TwilioはSIP接続を確立できます。 これを行うには、Twilio SIPドメインを作成および構成する必要があります。このドメインには 、Twilioの手順が記載された「Voice Url」アプリケーションを割り当てることもできます。

Twilio SIPドメインを作成するには、SIPエンドポイントを追加する必要があります。

画像

これは、SIPエンドポイントのリストです。

画像

ソフトフォンなどのSIPデバイスからTwilio SIPドメインを呼び出すことができます。 これには以下が必要です。

1. IPアクセスコントロールリストに外部IPデバイスを追加します。

画像

*「192.168.1.5」の代わりに、デバイスの外部IPを示す必要があります。

2.認証情報リストにユーザー名とパスワードを追加します。

画像

3.登録をオフにしてソフトフォンアカウントを作成し、Twilio SIPドメインと、Twilio SIPドメインアカウントリストに追加された名前とパスワードの両方をユーザー名とパスワードとして指定します。 同様のX-Liteソフトフォンアカウントは次のようになります。

画像

4. Twilio SIPドメインへの呼び出しを開始します(たとえば、ドメイン名がmytwiliodomain.sip.twilio.comの場合、mytwiliodomain.sip.twilio.comを呼び出す必要があります)。

画像

したがって、SIPソフトフォンからTwilioを呼び出し、実際にSIP部分をテストし、通話に参加しているオーディオストリームを取得および損失しました。 WCS4サーバーから同じ呼び出しを行い、受信したオーディオトラフィックをRTMPとしてリダイレクトするようになりました。

画像

Web Call Server 4


WCS4の場合、Linux 64ビットでJavaがインストールされたサーバーが必要です。 コンソールコマンドは、Javaマシンに関する情報を表示する必要があります。

java –version 

javaがインストールされていない場合は、次のコマンドでインストールできます。

 yum install java 

ここからWCS4サーバーをダウンロードし、 こちらから試用ライセンスをリクエストできます。
インストール後にサーバー設定で行う必要がある唯一の変更は、音声送信のみのTwilio SIPドメインへのSIP接続に必要なコーデックリストの削減です。

flashphoner.properties構成ファイル(/ usr / local / FlashphonerWebCallServer / confディレクトリ)のコーデック設定には、G.711 uLawのみが含まれている必要があります。

 codecs = ulaw 

ファイルは、たとえばMidnight Commander(mc)を使用して編集できます。

画像

画像

ワウザ


Wowza Streaming Engineは、 wowza.comからダウンロードできます。 ライセンスが必要です。 無料の開発者ライセンスをリクエストできます。 サーバーのコントロールパネルで、[アプリケーション]の設定でRTMPストリームの公開を有効にする必要があります| 「ライブ」| 「着信セキュリティ」。

画像

呼び出しを開始するためのREST / HTTP要求の形成


WCS、Twilio SIPドメイン、およびWowzaの設定を完了したら、WCSサーバーとTwilio SIPドメイン間のSIP接続の確立に進むことができます。 この場合、SIPコールを開始するには、WCSサーバーにHTTP / REST / POST要求を送信する必要があります。 JSON形式の同様のRESTリクエストの本文の例。

 { "callId":"R2fhkll5Sw3lK", "callee":"mytwiliodomain.sip.twilio.com", "rtmpUrl":"rtmp://my_wowza_server.com:1935/live", "rtmpStream":"streamName", "hasAudio":"true", "hasVideo":"true", "connection":{ "sipLogin":"myusername", "sipPassword":"MyPasswordPassword1", "sipAuthenticationName":"myusername", "sipDomain":"mytwiliodomain.sip.twilio.com", "sipPort":"5060", "sipRegisterRequired":"false", "appKey":"callApp" } } 

リクエストの「接続」サブオブジェクトのパラメーターは、ソフトフォンアカウントと同じ方法で選択されます。


これらのパラメーターの中には、標準のサーバー側アプリケーション( 'callApp')の名前を示すappKeyパラメーターもあります。これは、SIP呼び出しのステータスと、この呼び出しに関連付けられたRTMPストリームを受け取ります。

その他のパラメーター:


SIPのSendrecvおよびrecvonlyパラメーター


hasAudioおよびhasVideoオプションは重要です。 このケースでは、トラフィックをSIPデバイスに送信せず、SIPデバイスからのトラフィックのみを受信することを想定しています。 hasAudioとhasVideoが「true」に設定されている場合、SDPではオーディオとビデオの「sendrecv」(送信と受信)が示されます。 この場合、一部のSIPデバイスはトラフィックを待機し、トラフィックがない場合はタイムアウトでSIP接続をリセットします。 したがって、この場合、SIPデバイス自体のレイテンシを上げるか、SDPに「recvonly」送信するためにhasAudioとhasVideoを「false」に設定する必要があります。 この場合、SIP側は、ビデオを受信するだけで(受信のみ)、タイムアウトが機能しないことを認識します。

RESTコンソールからREST / HTTPリクエストを送信する


そのようなREST呼び出しのリクエストURIは

my_wcs_server.flashphoner.com:9091/RESTCall/call


my_wcs_server.flashphoner.comは、WCSサーバーのアドレスです。

REST呼び出しを送信するには、RESTクライアントが必要です。 RESTブラウザーまたは拡張RESTクライアントなどのChromeブラウザーの拡張機能、またはWCSサーバーのRTMP RESTクライアントとしてのSIPを使用できます(Google ChromeブラウザーのAllow-Control-Allow-Origin:*拡張機能のインストールが必要です)。

RESTリクエストに必要なフィールドを持つRESTコンソールインターフェイスの例:

画像

WCSサーバーが実行されている場合、TwilioはSIPコールを受け入れ、すべてのデータが正しく入力され、RESTコンソールのPOSTボタンを押してサーバーにリクエストを送信します。 その結果、WCSとTwilioの間にSIP接続が確立され、指定されたRTMPアドレスにオーディオストリームが送信されます。

RTMPプレーヤーでのストリーム再生


公開されたRTMPストリームを再生するには、Wowzaの例でFlash RTMPプレーヤーを使用できます。次に例を示します。 my_wowza_server.com/FlashRTMPPlayer/player.html


画像

ストリームの再生を開始する前に、REST要求で指定された「rtmpUrl」および「rtmpStream」パラメーターの値を「Server」および「Stream」フィールドに入力します。

画像

SIPコールに関連付けられたRTMPストリームを再生する場合、RTMPプレーヤーでは、「Voice Url」Twilio SIPドメイン経由でアクセス可能なアプリケーションによって再生されるオーディオを聞くことができます。

ビデオストリーム放送、追加情報


Twilioの場合のようにオーディオだけでなく、SIPエンドポイントがビデオコールをサポートして応答する場合、H.264コーデックのビデオもブロードキャストできます。

サポートされているコーデックの完全なリスト:


次の図は、通話とメディアの転送を示しています。

1.課題(黒い矢印):


2.メディア(赤い矢印):


画像

ビデオは、たとえば、ソフトフォン(たとえばBria)でインストールされたビデオコールでブロードキャストできます。 この場合、REST呼び出しのパラメーターの値は次のとおりです。


おわりに


したがって、TwilioサービスとRTMPサーバーを統合し、SIPオーディオストリームをRTMPにリダイレクトして、技術的に利用可能な方法でさらに配信することができました。

Source: https://habr.com/ru/post/J271233/


All Articles