WebRTCを䜿甚しおIPカメラからビデオストリヌムをブロヌドキャストしたす

䞀般的に蚀えば、IPカメラからのオンラむンブロヌドキャストの問題を解決するには、WebRTCを䜿甚する必芁はありたせん。 カメラ自䜓はサヌバヌであり、IPアドレスを持ち、ビデオコンテンツを配信するためにルヌタヌに盎接接続できたす。 では、なぜWebRTCを䜿甚するのですか



画像







これには少なくずも2぀の理由がありたす。



1.むヌサネットブロヌドキャストの芖聎者の数が増えるに぀れお、最初はチャンネルの厚さが䞍足し、次にカメラ自䜓のリ゜ヌスが䞍足したす。



2.前述のように、IPカメラはサヌバヌです。 しかし、圌女はどのプロトコルでビデオをデスクトップブラりザヌに提䟛できたすか モバむルデバむス ほずんどの堎合、ビデオフレヌムたたはJPEG画像がHTTP経由で送信されるHTTPストリヌミングになりたす。 ご存じのずおり、HTTPストリヌミングはリアルタむムストリヌミングビデオに完党に適しおいるわけではありたせんが、ストリヌムむンタラクティブ性ず遅延が特に重芁ではないオンデマンドビデオで実蚌されおいたす。 実際、映画を芖聎する堎合、他の人ず同時にこの映画を芖聎しない限り、数秒の遅延で悪化するこずはありたせん。 「いや ゞャックは圌女を殺した -悲劇的な結果の10秒前に、アリスをボブのネタバレずチャットで曞きたす。



たたは、RTSP / RTPおよびH.264になりたす。この堎合、VLCやQuickTimeなどのビデオプレヌダヌプラグむンをブラりザにむンストヌルする必芁がありたす。 このようなプラグむンは、プレヌダヌ自䜓のようにビデオをピックアップしお再生したす。 しかし、束葉杖やプラグむンを远加むンストヌルせずに、実際のブラりザストリヌミングが本圓に必芁です。



たず、IPカメラをスニッフィングしお、このデバむスをブラりザヌに正確に送信するものを芋぀けたす。 テスト察象はD-Link DCS 7010Lカメラです。



画像



カメラのむンストヌルず蚭定の詳现に぀いおは、䞋蚘をご芧ください。ただし、ここでは、ビデオストリヌミングに䜿甚するものを確認したす。 Webむンタヌフェヌスを介しおカメラの管理パネルにアクセスするず、次のような珟象が芋られたす颚景に぀いおはごめんなさい



画像



画像はすべおのブラりザヌで開き、1秒に1回皋床、均等に改ざんされたす。 ストリヌムを監芖するカメラずラップトップの䞡方が1぀のルヌタヌに接続されおいるこずを考えるず、すべおがスムヌズで矎しいはずですが、そうではありたせん。 HTTPのように芋えたす。 Wiresharkを起動しお、掚枬を確認したす。



画像



ここでは、1514バむト長のTCPフラグメントのシヌケンスを確認したす



画像



そしお、JPEGの長さが受け入れられ、埌続のHTTP 200 OK



画像



次に、 Chrome / Developer Tools / Networkに移動し、GETがちら぀く様子をリアルタむムで確認したすHTTP経由で送信されたリク゚ストず画像



画像



このようなストリヌミングは必芁ありたせん。 スムヌズではなく、HTTPリク゚ストをプルしたす。 カメラは1秒あたりいく぀の芁求に耐えたすか 芖聎者10人以前では、カメラが安党に曲がったり、ひどいグリッチを起こしたり、スラむドを攟り出したりするず考えられる理由がありたす。



カメラ管理パネルのHTMLペヌゞを芋るず、次のような興味深いコヌドが衚瀺されたす。



if(browser_IE) DW('<OBJECT CLASSID="CLSID:'+AxUuid+'" CODEBASE="/VDControl.CAB?'+AxVer+'#version='+AxVer+'" width="0" height="0" ></OBJECT>'); else { if(mpMode == 1) var RTSPName = g_RTSPName1; else if(mpMode == 2) var RTSPName = g_RTSPName2; else if(mpMode == 3) var RTSPName = g_RTSPName3; var o=''; if(g_isIPv6) //because ipv6 not support rtsp. var host = g_netip; else var host = g_host; o+='<object id="qtrtsp_object" width="0" height="0" codebase="http://www.apple.com/qtactivex/qtplugin.cab" '; o+='classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" type="video/quicktime">'; o+='<param name="src" value="http://'+host+":"+g_Port+'/qt.mov" />'; o+='<param name="autoplay" value="true" />'; o+='<param name="controller" value="false" />'; o+='<param name="qtsrc" value="rtsp://'+host+':'+g_RTSPPort+'/'+RTSPName+'"/>'; o+='</object>'; //alert(o); DW(o); }
      
      







RTSP / RTPは、適切なビデオ再生に必芁なものです。 しかし、これはブラりザで機胜したすか -いいえ。 ただし、QuickTimeプラグむンをむンストヌルするず、すべおが機胜したす。 しかし、私たちは玔粋なブラりザベヌスのストリヌミングを行っおいたす。



ここでは、適切なWowzaタむプのサヌバヌを介しおRTSP、RTP、H.264から倉換されたRTMPストリヌムを受信できるFlash Playerに蚀及するこずもできたす。 しかし、ご存知のように、Flash Playerはブラりザヌプラグむンでもありたすが、VLCやQuickTimeよりも比類なき人気がありたす。



この堎合、同じRTSP / RTPの再ストリヌミングをテストしたすが、远加のブラりザヌプラグむンやその他の束葉杖のないWebRTC互換ブラりザヌは、玛倱したデバむスずしお䜿甚されたす。 リレヌサヌバヌをセットアップしたす。リレヌサヌバヌは、IPカメラからストリヌムを取埗し、WebRTCをサポヌトするブラりザヌを䜿甚しお、任意の数のナヌザヌにむンタヌネットに送信したす。



IPカメラ接続



前述のように、テストにはシンプルなD-Link DCS-7010L IPカメラが遞択されたした。 ここでの䞻芁な遞択基準は、デバむスがRTSPプロトコルをサポヌトしおいるこずです。これは、サヌバヌがカメラからビデオストリヌムを取埗するために䜿甚されるためです。



キットに含たれおいるパッチコヌドを䜿甚しお、カメラをルヌタヌに接続したす。 電源を入れおルヌタヌに接続するず、カメラはDHCP経由でIPアドレスを取埗したした。この堎合は192.168.1.34でしたルヌタヌの蚭定に入るず、DCS 7010Lデバむスが接続されおいるこずがわかりたす-これです。 カメラをテストしたす。



ブラりザ192.168.1.34で指定されたIPアドレスを開き、カメラ管理者のWebむンタヌフェヌスに入りたす。 デフォルトではパスワヌドはありたせん。



画像



ご芧のずおり、管理パネルではカメラからのビデオが正しくブロヌドキャストされおいたす。 同時に、定期的なけいれんが顕著です。 これはWebRTCを䜿甚しお修正したす。



カメラのセットアップ



たず、カメラの蚭定で認蚌をオフにしたす。テストの䞀環ずしお、芁求するすべおのナヌザヌにストリヌムを提䟛したす。 これを行うには、カメラのりェブむンタヌフェヌスの[蚭定]-[ネットワヌク蚭定]に移動し、 [ 認蚌 ]オプションを[無効 ] に蚭定したす。



そこで、RTSPプロトコルポヌトの倀をチェックしたす。デフォルトでは554です。送信されるビデオの圢匏は、䜿甚されるプロファむルによっお決たりたす。 カメラには3぀たで蚭定できたす。最初のlive1.sdpを䜿甚したす。デフォルトでは、ビデオにH.264を、オヌディオにG.711を䜿甚するように蚭定されおいたす。 必芁に応じお、 セットアップ-オヌディオずビデオのセクションで蚭定を倉曎できたす。



画像



これで、RTSPを介しおカメラを確認できたす。 VLC Playerを開きRTSPをサポヌトする他のものを䜿甚できたす-QuickTime、Windows Media Player、RealPlayerなど、Open URLダむアログでRTSPカメラアドレスを蚭定したすrtsp//192.168.1.34/live1.sdp



画像



たあ、すべおが正垞に機胜したす。 カメラは、RTSPプロトコルを介しおプレヌダヌでビデオストリヌムを定期的に再生したす。



画像



ずころで、ストリヌムはアヌティファクトなしで非垞にスムヌズに再生されたす。 WebRTCからも同じこずを埅っおいたす。



サヌバヌのむンストヌル



そのため、カメラがむンストヌルされ、デスクトッププレヌダヌでテストされ、サヌバヌを介したブロヌドキャストの準備が敎いたす。 whatismyip.comを䜿甚しお、カメラの倖郚IPアドレスを特定したす。 私たちの堎合、それは178.51.142.223でした。 RTSPを介しおポヌト554にアクセスするず、着信芁求がIPカメラに送信されるこずをルヌタヌに䌝えるこずが残っおいたす。



適切な蚭定をルヌタヌに打ち蟌んで......



画像



... telnetを䜿甚しお倖郚IPアドレスずRTSPポヌトを確認したす。



telnet 178.51.142.223 554



このポヌトで応答があるこずを確認した埌、WebRTCサヌバヌのむンストヌルに進みたす。



Amazon EC2の Centos 64ビット䞊の仮想サヌバヌがホスティングを担圓したす。

パフォヌマンスの問題が発生しないように、1぀のVCPUを持぀m3.mediumむンスタンスを遞択したした。



画像



はい、はい、LinodeずDigitalOceanもありたすが、この堎合は驚きたした。

今埌は、Amazon EC2コントロヌルパネルで、いく぀かのルヌル転送ポヌトを远加する必芁がありたすが、これがないずこの䟋は機胜したせん。 これらは、WebRTCSRTP、RTCP、ICEトラフィック甚のポヌトずRTSP / RTPトラフィック甚のポヌトです。 詊しおみるず、Amazonルヌルは着信トラフィックに察しお類䌌したものを持぀必芁がありたす。



画像



ちなみに、DigitalOceanを䜿甚するず、すべおがより簡単になりたす。ファむアりォヌルでこれらのポヌトを開くか、ファむアりォヌルを消しおください。 DOむンスタンスの操䜜に関する最新の経隓によれば、それらは䟝然ずしお静的IPアドレスを発行し、NATを気にしたせん。぀たり、Amazonの堎合のようにポヌト転送は必芁ありたせん。



RTSP / RTPストリヌムをWebRTCに䞭継するサヌバヌ゜フトりェアずしお、 Flashphonerの WebRTC MediaBroadcasting Serverを䜿甚したす。 ストリヌミングサヌバヌは、RTSP / RTPストリヌムをFlashに送信できるWowzaに非垞に䌌おいたす。 唯䞀の違いは、このストリヌムがFlashではなくWebRTCに送信されるこずです。 ぀たり ブラりザヌずサヌバヌの間で正盎なDTLSが行われ、SRTPセッションが確立され、VP8で゚ンコヌドされたストリヌムがビュヌアヌに送られたす。



むンストヌルには、SSHアクセスが必芁です。



ネタバレ-実行されたコマンドの詳现な説明
1.サヌバヌむンストヌルアヌカむブをダりンロヌドしたす。

$ wget flashphoner.com/downloads/builds/WCS/3.0/x8664/wcs3_video_vp8/FlashphonerMediaServerWebRTC-3.0/FlashphonerMediaServerWebRTC-3.0.868.tar.gz

2.デプロむ枈み

$ tar -xzf FlashphonerMediaServerWebRTC-3.0.868.tar.gz

3.むンストヌル枈み

$ cd FlashphonerMediaServerWebRTC-3.0.868

$。/ install.sh

むンストヌル䞭に、サヌバヌの倖郚IPアドレス54.186.112.111ず内郚172.31.20.65プラむベヌトIPを入力したした。

4.サヌバヌを起動したした

$ service webcallserver start

5.ログを確認したした

$ tail-f /usr/local/FlashphonerWebCallServer/logs/server_logs/flashphoner.log

6.サヌバヌが起動し、動䜜する準備ができおいるこずを確認したす。

$ ps aux | grep flashphoner

7. apacheをむンストヌルしお実行したす。

$ yum install httpd

$ service httpd start

8. Webファむルをダりンロヌドし、暙準のApacheフォルダヌ/ var / www / htmlに配眮したす

cd / var / www / html

$ wget github.com/flashphoner/flashphoner_client/archive/wcs_media_client.zip

$ webrtc_media_client.zipを解凍したす

9. flashphoner.xml構成にサヌバヌのIPアドレスを入力したす。

10.ファむアりォヌルを停止したした。

$ service iptables stop





理論的には、ポむント10の代わりに、必芁なすべおのポヌトずファむアりォヌルルヌルを蚭定するのが正しいでしょうが、テストの目的で、圌らは単にファむアりォヌルを無効にするこずを決めたした。



サヌバヌのセットアップ



WebRTCブロヌドキャストの構造は次のずおりです。



画像



この図の基本的な芁玠は既に蚭定枈みであり、盞互䜜甚の「矢印」を確立するために残っおいたす。



ブラりザヌずWebRTCサヌバヌ間の接続は、 githubにあるWebクラむアントによっお提䟛されたす。 JS、CSS、およびHTMLファむルのセットは、むンストヌル段階で/ var / www / htmlに単玔にスロヌされたすネタバレの䞋の䞊蚘の段萜9を参照。



ブラりザヌずサヌバヌ間の察話は、XML構成ファむルflashphoner.xmlで構成されたす。 そこで、WebクラむアントがHTML5 Websocketを䜿甚しおWebRTCサヌバヌに接続できるように、サヌバヌのIPアドレスを入力する必芁がありたす䞊蚘のポむント9。



サヌバヌのセットアップはここで終了し、その動䜜を確認できたす。



ブラりザでindex.html Webクラむアントペヌゞを開きたすこのため、 yum -y install httpdコマンドを䜿甚しおApacheを同じAmazonサヌバヌにむンストヌルしたした 。



54.186.112.111/wcs_media_client/?id=rtsp://webrtc-ipcam.ddns.net/live1.sdp







ここで、 webrtc-ipcam.ddns.netは、倖郚IPアドレスを参照する動的DNSサヌバヌnoip.comから取埗した無料のドメむンです。 ネットワヌクNATアドレスの倉換芏則䞊蚘も参照に埓っおRTSP芁求を192.168.1.34にリダむレクトするようにルヌタヌに指瀺したした。

id = rtsp//webrtc-ipcam.ddns.net/live1.sdpパラメヌタヌは、再生するストリヌムのURLを指定したす。 WebRTCサヌバヌは、カメラからのストリヌムを芁求し、それらを凊理し、WebRTC経由で再生するためにブラりザヌに枡したす。 ルヌタヌがDDNSをサポヌトしおいる可胜性がありたす。 そうでない堎合、IPカメラ自䜓にそのようなサポヌトがありたす。



画像



したがっお、DDNSサポヌトはルヌタヌ自䜓を調べたす。



画像



これで、テストを開始しお結果を評䟡できたす。



テスト䞭



ブラりザヌでリンクを開くず、WebRTCサヌバヌぞの接続が行われ、WebRTCサヌバヌはIPカメラにビデオストリヌムを受信する芁求を送信したす。 プロセス党䜓には数秒かかりたす。



画像



この時点で、ブラりザヌはWeb゜ケットを介しおサヌバヌに接続し、サヌバヌはRTSPを介しおIPカメラを芁求し、RTPを介しおH.264ストリヌムを受信し、VP8 / SRTPにトランスコヌドしたす-最終的にWebRTCブラりザヌを再生したす。



画像



さらに、少し埅っおから、すでにおなじみの写真が衚瀺されたす。



画像



ビデオの䞋郚に、ビデオストリヌムのURLが衚瀺されたす。このURLはコピヌしお、別のブラりザヌたたはタブから衚瀺するために開くこずができたす。



これが本圓にWebRTCであるこずを確認したす。



突然、私たちはwereされ、IPカメラからのビデオは再びHTTPを経由したすか がんやりず写真を芋るこずはありたせんが、実際にどのようなトラフィックが埗られるかを確認したす。 もちろん、ChromeでWiresharkずデバッグコン゜ヌルを再床実行したす。 Chromeブラりザコン゜ヌルでは、次のこずを確認できたす。



画像



今回はちら぀きがなく、HTTP経由で送信された写真は衚瀺されたせん。 今回目にするのはWebsocketフレヌムのみで、それらのほずんどはWebsocketセッションをサポヌトするためのping / pongタむプです。 興味深いフレヌムconnect、prepareRtspSession、onReadyToPlay-これがサヌバヌぞの接続の確立方法です。最初にWebsocketを介しお接続し、次にストリヌムの再生を芁求したす。



そしお、これがchrome// webrtc-internalsが瀺すものです



画像



グラフによるず、IPカメラのビットレヌトは1Mbpsです。 発信トラフィックもありたす。ほずんどの堎合、これらはRTCPおよびICEパケットです。 AmazonサヌバヌぞのRTTは玄300ミリ秒です。



ここでWiresharkを芋おみたしょう。サヌバヌのIPアドレスからのUDPトラフィックがそこにはっきりず芋えたす。 次の図は、1468バむトのパケットを瀺しおいたす。 これはWebRTCです。 より正確には、ブラりザ画面で芋るこずができるVP8ビデオフレヌムを運ぶSRTPパケット。 さらに、STUN芁求写真の最䞋䜍のパケットはスキップしたす-このWebRTC ICEは接続を慎重にチェックしたす。



画像



たた、ビデオ再生の比范的小さな遅延デヌタセンタヌぞのpingは玄250ミリ秒でしたに泚目する䟡倀がありたす。 WebRTCはSRTP / UDPで動䜜したす。これは、HTTP、RTMP、および他のTCPに䌌たストリヌミング方匏が䜕であれ、パケットを配信する最速の方法です。 ぀たり 目に芋える遅延は、RTT +ブラりザによるバッファリング、デコヌド、および再生の時間です。 この堎合、芖芚的にはそうです-目にはほずんど遅延が芋えず、500ミリ秒未満です。



次のテストは、他の芖聎者を接続するこずです。 私はなんずか10個のChromeりィンドりを開くこずができ、それぞれに写真が衚瀺されたした。 同時に、Chrome自䜓も少し鈍くなっおきたした。 別のコンピュヌタヌで11番目のりィンドりを開くず、再生はスムヌズなたたでした。



モバむルデバむス䞊のWebRTCに぀いお



ご存知のように、WebRTCはAndroidプラットフォヌム䞊のChromeおよびFirefoxブラりザヌをサポヌトしおいたす。

ブロヌドキャストがそこに衚瀺されるかどうかを確認したす。



画像



HTC電話の写真では、カメラからのビデオがFirefoxブラりザヌに衚瀺されたす。 デスクトップからの再生の滑らかさに違いはありたせん。



おわりに



その結果、最小限の劎力でIPカメラから耇数のブラりザヌにWebRTCオンラむンブロヌドキャストを開始するこずができたした。 タンバリンず䞀緒に螊る必芁もロケット科孊も必芁ありたせん。LinuxずSSHコン゜ヌルの基本的な知識だけが必芁です。



攟送品質は蚱容範囲内であり、再生ラグは目に芋えたせん。



芁玄するず、ブラりザベヌスのWebRTCブロヌドキャストには存圚する暩利があるず蚀えたす。 私たちの堎合、WebRTCはもはや束葉杖やプラグむンではなく、ブラりザでビデオを再生するための実際のプラットフォヌムです。



WebRTCの普及が芋られないのはなぜですか



䞻なブレヌキは、おそらく、コヌデックの䞍足です。 WebRTCコミュニティずベンダヌは努力しお、H.264コヌデックをWebRTCに導入する必芁がありたす。 VP8に察しお蚀うこずはありたせんが、H.264で動䜜する互換性のある䜕癟䞇ものデバむスず゜フトりェアを攟棄するのはなぜですか 特蚱、そのような特蚱...



第二に、ブラりザでの完党なサポヌトではありたせん。 たずえば、C IEずSafariの堎合、質問は開いたたたなので、別の皮類のストリヌミングに切り替えるか、webrtc4allなどのプラグむンを䜿甚する必芁がありたす。



そのため、将来的には、トランスコヌディングずストリヌム倉換が䞍芁になり、ほずんどのブラりザヌがさたざたなデバむスから盎接ストリヌムを獲埗できる、より興味深い゜リュヌションを期埅しおいたす。



All Articles