WebRTCを介してWebページからビデオストリームをFacebookとYouTubeに同時にストリーミングします

FacebookとYouTubeは、ライブビデオストリームを幅広い視聴者にブロードキャストできるブロードキャストサービスを提供します。 この記事では、WebRTCテクノロジを使用してWebページからビデオストリームをキャプチャし、このビデオストリームをライブブロードキャストのためにFacebookとYouTubeに同時に(2つのサービスに)同時に送信する方法を説明します。

ブロードキャストを開始する前に、ストリーミング用にFacebookとYoutubeを提供しているRTMPエンドポイントを確認しましょう。 次に、これらのRTMPアドレスにビデオストリームを送信する必要があります。

フェイスブック


Facebookから始めましょう。 まず、 ライブ開始ボタンを見つける必要があります。 このボタンは次のようになります。


またはこのように:


次に、もう一度Airボタンを押す必要があります


Facebookからではなく、外部デバイスからブロードキャストするには、 [ここをクリック ]リンクをクリックします

次に、 ストリームの作成をクリックします


その結果、FacebookはRTMPストリームデータを提供します。


スクリーンショットは、サーバーアドレスがrtmp://rtmp-api.facebook.com:80 / rtmp /であることを示しています

そして、RTMPストリームの名前は長くてユニークな文字列です:
1489000000111961?Ds = 1&s_l = 1&a = ATj9giGjaTTffppNHBP

翻訳に必要なのはこれらの2つのパラメーターです。 とりあえず、YouTubeのRTMPパラメーターを調べてみましょう。

YouTube


YouTubeからストリーミングを開始するには、 https://youtube.com/liveにアクセスし 、[ アップロード ]ボタンをクリックします


次に、ライブストリーミングを選択し、[ 開始 ]をクリックします。


ストリーミングパネル、プレーヤー、およびRTMP設定が表示されます。


設定から、RTMPサーバーのアドレスはrtmp://a.rtmp.youtube.com/live2であり、ストリーム名は非表示になり、[表示]ボタンをクリックすると表示されるようになります。
YouTubeのRTMPストリームの名前は次のようになります: 8r0t-z4d-9xyj-2bcd

その結果、RTMPストリームの送信先を正確に把握できます。
フェイスブックYouTube
RTMPアドレスrtmp://rtmp-api.facebook.com:80 / rtmp /rtmp://a.rtmp.youtube.com/live2
ストリーム名1489000000111961?Ds = 1&s_l = 1&a = ATj9giGjaTTffppNHBP8r0t-z4d-9xyj-2bcd

Webコールサーバー


サーバーは、WebRTCを介してWebカメラからビデオストリームを受信し、RTMPを介してFacebookおよびYouTubeに配信します。


一度やる

まず、ウェブカメラからGoogle Chromeブラウザからサーバーにビデオストリームを送信します。

この目的で、サンプルHTMLページとストリーミング用のスクリプトをここからダウンロードし、このアーカイブから3つのファイルをWebサーバーに展開できます。


flashphoner.jsはAPIファイルです。 その最新バージョンは、 Web SDKアセンブリからダウンロードできます。

ストリーミングの標準デモのコードは、 ここから入手できます 。 デモを開いたとしましょう。 サーバーに接続し、 5RTDという名前のビデオストリームをWebRTCサーバーに送信します。 次のように機能します。


ビデオはブラウザのカメラ(この場合は仮想カメラ)からキャプチャされ、デバイスとブラウザのバージョンに応じて、VP8 + OpusまたはH.264 + OpusコーデックでWebRTCテクノロジーを使用してWCS5サーバーに送られます。

次のステップは、このビデオをFacebookにリダイレクトすることです。

二回

Web Call Serverには、ストリームの名前を知っているWebRTCビデオストリームをRTMPにリダイレクトできるREST APIがあります。

これを行うには、次のリクエストをREST / HTTPサーバーに送信します。
URL
https://wcs5-eu.flashphoner.com:8888/rest-api/push/startup 
コンテンツの種類アプリケーション/ json
方法投稿
本体
 { streamName: "5dfd", rtmpUrl: "rtmp://rtmp-api.facebook.com:80/rtmp/1489000000111961?ds=1&s_l=1&a=ATj9giGjaTTfgpNHBP" } 

このようなリクエストは、次のような高度なRESTコンソールツールでテストできます。


その結果、WCSはWebRTCビデオストリームを長いアドレスのFacebookにリダイレクトします。

rtmp://rtmp-api.facebook.com:80 / rtmp / 1489000000111961?ds = 1&s_l = 1&a = ATj9giGjaTTfgpNHBP

このアドレスは、RTMP URLとビデオストリームの名前を組み合わせたものです。

数秒後、ビデオがFacebookに表示されます。


3つ行う

YouTubeに同様のリクエストを送信します
URL
 https://wcs5-eu.flashphoner.com:8888/rest-api/push/startup 
コンテンツの種類アプリケーション/ json
方法投稿
本体
 { streamName: "5dfd", rtmpUrl: "rtmp://a.rtmp.youtube.com/live2/8r0t-z4d-9xyj-2bcd" } 

または、RESTコンソールから:


サーバーは200 OKを返し、YouTubeでストリームを取得します。


その結果、ストリームはブロードキャストされ、FacebookとYouTubeの両方のサービスに配信されることがわかります。


同じREST APIからすべてのブロードキャストストリームのリストを要求できるようになりました。
URL
 https://wcs5-eu.flashphoner.com:8888/rest-api/push/find_all 
コンテンツの種類アプリケーション/ json
方法投稿
本体
 {} 

サーバーは、現在FacebookとYouTubeにリレーされているストリームのリストを返します。


2つの呼び出し/プッシュ/終了でリレーを停止します

Facebookから切断する:
URL
 https://wcs5-eu.flashphoner.com:8888/rest-api/push/terminate 
コンテンツの種類アプリケーション/ json
方法投稿
本体
 { "mediaSessionId": "8omef99f40674tcfi4pm87npbb" } 

YouTubeから切断する:
URL
 https://wcs5-eu.flashphoner.com:8888/rest-api/push/terminate 
コンテンツの種類アプリケーション/ json
方法投稿
本体
 { "mediaSessionId": "e13p1gc10bgsk3me49cest9gv2" } 

したがって、WebRTCテクノロジーを使用してWebページからWeb Call Server 5サーバーへのブロードキャストを編成し、1つのRESTリクエスト/プッシュ/スタートアップでビデオストリームをFacebookに再ブロードキャストし、2番目のリクエスト/プッシュ/スタートアップでストリームをYouTubeライブにストリーミングしました。 その後、標準のサービスプレーヤーを介したビデオストリームの再生を確認し、request / push / find_allによってストリーミングされるストリームのリストを表示しました 。 2つの/ push / terminate要求で現在の翻訳を完了することでテストを終了しました。

JavaScript / HTMLコードの記述


おそらく、各開発者またはほぼすべての開発者はREST APIを使用する必要がありました。 したがって、ここではREST / HTTP要求の送信を実装するコードについては説明しません。

代わりに、WebページとWebカメラからのビデオストリームがサーバーに到達する方法について説明します。

前述したように、ビデオをキャプチャする最小限のクライアントを作成するには、3つのスクリプトが必要です。


flashphoner.jsWeb SDKアセンブリに含まれるファイルであり、説明する意味がありません。

streamer.html

このページには、カメラからのキャプチャを表示するlocalVideo div要素と、ブロードキャストを開始する[開始 ]ボタンが含まれています。

 <html> <head> <script language="javascript" src="flashphoner.js"></script> <script language="javascript" src="streamer.js"></script> </head> <body onLoad="init()"> <h1>The streamer</h1> <div id="localVideo" style="width:320px;height:240px;border: 1px solid"></div> <input type="button" value="start" onClick="start()"/> <p id="status"></p> </body> </html> 

streamer.js

変換スクリプトは、4つの主要なAPI関数と連携します。


その結果、Websocketプロトコルを介したサーバーへの接続が確立され、ブラウザーのWebカメラからビデオがキャプチャされ、WebRTCを介してサーバーに送信されます。

 var localVideo; function init(){ Flashphoner.init(); localVideo = document.getElementById("localVideo"); } function start() { Flashphoner.createSession({urlServer: "wss://wcs5-eu.flashphoner.com:8443"}).on(Flashphoner.constants.SESSION_STATUS.ESTABLISHED, function (session) { //session connected, start streaming startStreaming(session); }).on(Flashphoner.constants.SESSION_STATUS.DISCONNECTED, function () { setStatus("DISCONNECTED"); }).on(Flashphoner.constants.SESSION_STATUS.FAILED, function () { setStatus("FAILED"); }); } function startStreaming(session) { session.createStream({ name: "stream222", display: localVideo, cacheLocalResources: true, receiveVideo: false, receiveAudio: false }).on(Flashphoner.constants.STREAM_STATUS.PUBLISHING, function (publishStream) { setStatus(Flashphoner.constants.STREAM_STATUS.PUBLISHING); }).on(Flashphoner.constants.STREAM_STATUS.UNPUBLISHED, function () { setStatus(Flashphoner.constants.STREAM_STATUS.UNPUBLISHED); }).on(Flashphoner.constants.STREAM_STATUS.FAILED, function () { setStatus(Flashphoner.constants.STREAM_STATUS.FAILED); }).publish(); } function setStatus(status) { document.getElementById("status").innerHTML = status; } 

ここから streamer.htmlおよびstreamer.jsスクリプトを使用してアーカイブをダウンロードできます。

ブロードキャストをGoogle Chromeから機能させるには、httpsで動作するWebホスティングにブロードキャストスクリプトを配置する必要があります。

Web Call Serverは、別個のLinuxホストにインストールできます。 ここからテスト用のサーバーをダウンロードします。 サーバーをインストールして実行すると、次のアドレスで着信Webソケット接続を受信します。ws://ホスト:8080およびwss://ホスト:8443

したがって、3つのスクリプトを使用して、Webカメラからビデオをキャプチャし、サーバーにビデオストリームを配信する方法を示しました。 すべてが正しく行われた場合、スクリプトはステータスPUBLISHINGを表示する必要があります。 これは、WebRTCストリームがサーバーに正常に配信され、REST APIを使用してYouTubeまたはFacebookに再ブロードキャストできることを意味します。



参照資料


Web Call Server -YouTubeおよびFacebookに中継する機能を備えたWebRTCサーバー
Web SDK -Webページに翻訳コードを埋め込むためのJavaScript API。
REST API-ビデオストリームのWebRTCリレー管理
ソース -Webページからサーバーにストリームをブロードキャストする例のソースコード。
YouTube Live - YouTubeのライブストリーミングサービス
Facebook Live - Facebookからのライブストリーミングサービス

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


All Articles