
ãã®èšäºã§ã¯ããã©ãŠã¶ãŒãããªããŒã¿ãŒãµãŒããŒãä»ããŠãã«ããŠãŒã¶ãŒWebRTCãããªãããŒããã£ã¹ããéçºããæ¹æ³ã«ã€ããŠèª¬æããŸãã ãããŒããã£ã¹ãã¯ãGoogle Chromeãã©ãŠã¶ãŒãšéåžžã®USB Webã«ã¡ã©ããéä¿¡ãããŸãã ãããªããããŒããã£ã¹ãããããã«ãå¥åã®HTMLããŒãž
Streamerãäœæããããã¬ãŒã€ãŒã®HTMLããŒãžãåçãããŸãã
æŸéã¹ããŒã
Browser1-ãããŒããã£ã¹ãã ãµãŒããŒã«æ¥ç¶ããWebã«ã¡ã©ãããããªããããŒããã£ã¹ãããŸãã
Browser2 ã
Browser3 ã
Browser4-ãã¥ãŒã¢ãŒã åççšã®ãããªãæ¥ç¶ããŠåä¿¡ããŸãã WebRTCã¯
Web Call Serverã䜿çšããŠãWebRTCãä»ããŠãããªã¹ããªãŒã ãã¹ããªãŒãã³ã°ããŸãã

ååã¯æ確ã§ãããã³ãŒãã®èšè¿°ã«é²ãããšãã§ããŸãã 2ã€ã®HTMLããŒãžãäœæããŸãã æåã®ãã®ã¯
streamer.htmlãšåŒã°ãããããªã¹ããªãŒã ããµãŒããŒã«éä¿¡ããŸãã 2çªç®ã¯
player.htmlãšåŒã°ãããµãŒããŒããã®ãããªã¹ããªãŒã ãåçããŸãã
ã¹ããªãŒããŒ-HTML
<html> <head> <script language="javascript" src="flashphoner.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 HTMLããŒãžã§ã¯ã次ã®ãã®ã䜿çšããŸããã
1ïŒ
flashphoner.jsã¹ã¯ãªãã
ãã®ã¹ã¯ãªããã¯ã¡ã€ã³ã®JavaScript APIã¹ã¯ãªããã§ãããææ°ã®
Web SDKã¢ã»ã³ããªã«å«ãŸããŠããŸãã
<script language="javascript" src="flashphoner.js"></script>
2ïŒ
localVideoã®divèŠçŽ ã¯ãWebã«ã¡ã©ãããã£ããã£ããããããªãé
眮ããããããã¯ã§ãã
<div id="localVideo" style="width:320px;height:240px;border: 1px solid"></div>
3ïŒéå§ïŒïŒé¢æ°ãåŒã³åºããããããŒããã£ã¹ããéå§ãã[éå§]ãã¿ã³ã
<input type="button" value="start" onClick="start()"/>
4ïŒæ¬äœã«ã¯ãåæåé¢æ°åŒã³åºãã§
onLoadã€ãã³ãã®åŠçãè¿œå ãããŠããããšã«æ³šæããŠãã ããã
<body onLoad="init()">
5ïŒid = statusã®èŠçŽ ãã¹ããŒã¿ã¹ã®è¡šç€ºã«äœ¿çšãããŸãã
<p id="status"></p>
ã¹ããªãŒããŒ-JavaScript
JavaScriptã³ãŒãã®èšè¿°ã«ç§»ããŸãããã ã³ãŒããæå°éã«æããããã«ãjQueryãBootstrapããŸãã¯ãã®ä»ã®ãã¬ãŒã ã¯ãŒã¯ãæå³çã«äœ¿çšããŸããã
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) {
ãã®äŸã«ã¯4ã€ã®é¢æ°ããããŸãã
1ïŒ
åæåJavaScript APIã®åæåãæ
åœããdiv-
localVideoèŠçŽ ãžã®åç
§ã
ååŸããŸãã
2ïŒ
éå§ãã®é¢æ°ã¯ãwebsocketsãããã³ã«ã䜿çšããŠãµãŒããŒãžã®æ¥ç¶ãäœæããŸãã æ¥ç¶ã¢ãã¬ã¹ïŒ
wssïŒ//ãã¡ã€ã³ïŒ8443 ãã¡ã€ã³ã¯ãWCSãµãŒããŒã®
ãã¡ã€ã³ã§ããå¿
èŠããããŸãïŒãµãŒããŒã¯æ¢ã«ã€ã³ã¹ããŒã«ãããæ§æãããŠãããããšãã°webrtc.mycompany.comãªã©ã®å°çšãã¡ã€ã³ããããšæ³å®ããŠããŸã
ãTCPããŒã
8443ã¯çä¿¡æ¥ç¶çšã«éããŠããå¿
èŠããããŸãïŒã
ãã®é¢æ°ã®ã³ãŒãããã
ESTABLISHEDã¹ããŒã¿ã¹ãååŸããåŸã®æ¬¡ã®ã¢ã¯ã·ã§ã³ã¯ã
startStreamingé¢æ°ãåŒã³åºããŠã¹ããªãŒã ããµãŒããŒã«éä¿¡ããããšã§ããããšã¯æããã§ãã
3ïŒ
startStreamingããã§ã¯ãAPIé¢æ°ã䜿çšããŠæ°ããStreamãªããžã§ã¯ããäœæããŸã
ãsession.createStreamïŒïŒ; ã ã¹ããªãŒã ãäœæãããšã次ã®ãã©ã¡ãŒã¿ãŒãã¡ã€ã³ãã©ã¡ãŒã¿ãŒãšããŠè»¢éãããŸãã
âstreamName-ãããªã¹ããªãŒã ã®åå
âdisplayã¯ãç¹å®ã®ãããªã¹ããªãŒã çšã«ãã£ããã£ãããWebã«ã¡ã©ããã®ãããªã衚瀺ãããdivèŠçŽ ã§ã
äžæã®ã¹ããªãŒã åãçæããããšãæãŸããã§ããããã¹ãã«ã¯
stream222ã䜿çšããŸãã
4ïŒ
setStatusãã®é¢æ°ã¯ãã»ãã·ã§ã³ãŸãã¯ã¹ããªãŒã ã®ã¹ããŒã¿ã¹ãHTMLããŒãžã«è¡šç€ºããŸãã
å¥ã®
streamer.jsãã¡ã€ã«ã§ã¹ã¯ãªãããåãåºããŸãã
streamer.htmlããŒãžã®ã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
<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>
ã¹ããªãŒããŒ-ãã¹ã
ãã®çµæã3ã€ã®ã¹ã¯ãªããã§æ§æãããããã¹ããªãŒãã³ã°ã¢ããªã±ãŒã·ã§ã³ãåŸãããŸããã
âstreaming.html
âstreaming.js
âflashphoner.js
ã¹ã¯ãªãããWebãµãŒããŒã«ã³ããŒããŠããã¹ããéå§ããŸãã WebãµãŒããŒãšããŠã
Apache 2ãæšæº
/ var / www / htmlãšãšãã«äœ¿çšããŸã
ãã®çµæãåäœäžã®ã¹ããªãŒããŒã¯ã次ã®ã¹ã¯ãªãŒã³ã·ã§ããã«ç€ºãããã«ãªããŸãã [ã¹ã¿ãŒã]ãã¿ã³ãã¯ãªãã¯ãããšããµãŒããŒãšã®æ¥ç¶ã確ç«ãããWebRTCãããªã¹ããªãŒã ããµãŒããŒã«éä¿¡ãããŸãã

ã¹ããªãŒã ãå®éã«éä¿¡ãããããšã確èªããã«ã¯ã
chromeïŒ// webrtc-internalsã¿ãã«ç§»åããŸãã ããã§ã¯ããããªã¹ããªãŒã ã§äœãèµ·ãã£ãŠãããããªã¢ã«ã¿ã€ã ã§èŠ³å¯ãããããã¬ãŒãã解å床ããã¬ãŒã ã¬ãŒããéä¿¡ãã±ããæ°ãRTTãªã©ã®ãã©ã¡ãŒã¿ãç£èŠã§ããŸãã

ãã®ããã«ããŠãã¹ããªãŒããŒãç²åŸããWebRTCãããªã¹ããªãŒã ããµãŒããŒã«æ£ããéä¿¡ãããããã§ãµãŒããŒã¯ãããããã¯ã¢ããããŸãã ã¹ããªãŒã ã
ååŸããŠåçããã«ã¯ãæ°ãã
player.htmlããŒãžãäœæããŸã
ãã¬ãŒã€ãŒ-HTML
ã¹ããªãŒããŒãããã¬ãŒã€ãŒã®ããŒãžãã³ããŒããŸããå¯äžã®éãã¯ã
streamer.jsã®ä»£ããã«
player.jsã䜿çšãã
localVideoã®ä»£ããã«divèŠçŽ ã«
id = remoteVideoãèšå®ããããšã§ãã
<html> <head> <script language="javascript" src="flashphoner.js"></script> <script language="javascript" src="player.js"></script> </head> <body onLoad="init()"> <h1>The player</h1> <div id="remoteVideo" style="width:320px;height:240px;border: 1px solid"></div> <input type="button" value="start" onClick="start()"/> <p id="status"></p> </body> </html>
ãã¬ãŒã€ãŒ-JavaScript
ãã¬ãŒã€ãŒã®ã¹ã¯ãªããã«ã¯ããã€ãã®éãããããŸãããã¢ãããŒãã¯åããŸãŸã§ããFlashphonerAPIã¯åæåãããã¹ã¿ãŒããã¿ã³ã¯websocketãä»ããŠãµãŒããŒãžã®æ¥ç¶ãéãã
ESTABLISHEDã€ãã³ããåŸ
æ©ããŠãã¹ããªãŒã ã®åçãéå§ããŸãã
player.jsã¹ã¯ãªãããš
streamer.jsã¹ã¯ãªããã®éãã®ãªã¹ãïŒ
âlocalVideoã®ä»£ããã«remoteVideoã«ãã£ãŠäœ¿çšãããŸã
âæ¥ç¶ã確ç«ãããããstartStreamingã®ä»£ããã«startPlaybackãåŒã³åºããŸã
âcreateStreamïŒïŒã¡ãœããã䜿çšããŠã¹ããªãŒã ãäœæããå Žåããã©ã¡ãŒã¿
receiveAudio = trueããã³
receiveVideo = trueãæž¡ãããŸã
âpublishïŒïŒã®ä»£ããã«playïŒïŒã¡ãœãããåŒã³åºãããŸã
var remoteVideo; function init(){ Flashphoner.init(); remoteVideo = document.getElementById("remoteVideo"); } function start() { Flashphoner.createSession({urlServer: "wss://wcs5-eu.flashphoner.com:8443"}).on(Flashphoner.constants.SESSION_STATUS.ESTABLISHED, function (session) {
ãã®çµæã2ã€ã®ã¹ã¯ãªããã§æ§æãããWebRTCãã¬ãŒã€ãŒãåŸãããŸãã
âplayer.html
âplayer.js
ãã¬ãŒã€ãŒãåäœããã«ã¯
flashphoner.js APIãã¡ã€ã«ãå¿
èŠã§ããããšãå¿ããªãã§ãã ããããã®ããããã¬ãŒã€ãŒã®ãã¡ã€ã«ãWebãµãŒããŒäžã®åããã©ã«ããŒã«ã³ããŒããŸãã
ãã®çµæãWebRTCãªã³ã©ã€ã³ãããŒããã£ã¹ãã®æçµã¢ããªã±ãŒã·ã§ã³ã¯5ã€ã®ãã¡ã€ã«ã§æ§æãããŸãã
âstreamer.html
âstreamer.js
âplayer.html
âplayer.js
âflashphoner.js
ãã¹ããéå§ãã
streamer.htmlãä»ããŠãããªã¹ããªãŒã ãå床éä¿¡ããŸãããã ãã®åŸã
player.htmlã§æ°ãããã©ãŠã¶ã¿ãã
éã ã[éå§]ãã¯ãªãã¯ããŸãã

ãã®çµæããããŒããã£ã¹ããè¡ããããã¬ãŒã€ãŒãžã®ãããªã¹ããªãŒã ã§ããWebRTCãååŸãããŸããã ããã§ãä»ã®ããã€ã¹ããåããããªã¹ããªãŒã ã«æ¥ç¶ããããè€æ°ã®ãã©ãŠã¶ã¿ããéãããããããšãã§ããŸããåã¿ãã¯åããããªã¹ããªãŒã ãååŸããŸãã

ãããã£ãŠããããªã¹ããªãŒã ããµãŒããŒã«éä¿¡ãã1察å€ã¢ãŒãã§é
ä¿¡ããŸãããããã«ãããè€æ°ã®æ¥ç¶ã§ã®ç°¡åãªãããªãããŒããã£ã¹ããå®çŸããŸããã
3å
次ã®æ¡ä»¶ãèæ
®ããŠã3åã§ãããŒããã£ã¹ããå±éããŠã¿ãŸãããã
1ïŒãããªã¹ããªãŒã ãäžç¶ããããã«Web Call Server 5ãæ¢ã«ã€ã³ã¹ããŒã«ãããŠããã
SSLãæ§æãããŠããŸã ã
SSL / HTTPSãªãã§ã¯ãGoogle Chromeã§ã®ãããŒããã£ã¹ãã¯æ©èœããŸããããŠã§ãã«ã¡ã©ãšãã€ã¯ã«ã¢ã¯ã»ã¹ããã«ã¯ãæ¥ç¶ãå®å
šã§ããããããŒããã£ã¹ãããã¹ãããŠããããŒãžãHTTPSçµç±ã§éãããŠããå¿
èŠãããããã§ãã
TCPããŒã
8443ãéããŠããã
wssãåãå
¥ããæºåãã§ããŠããŸã
ïŒ//æ¥ç¶
2ïŒ
Apacheãªã©ã®HTTPãµãŒããŒããã§ã«ã€ã³ã¹ããŒã«ããã³æ§æãããŠããŸãã WebãµãŒããŒã¯
HTTPSçµç±ã§åäœããããã«æ§æãããŠããããã¹ãã¹ã¯ãªãããã¢ããããŒã/ããŠã³ããŒãã§ããFTP / SFTP / SSHã¢ã¯ã»ã¹ãåããŠããŸãã
WCS5ãš
Apacheã¯ãåãã·ã¹ãã ã«ã€ã³ã¹ããŒã«ããããšããç°ãªããµãŒããŒã«é
åžããããšãã§ããŸãã ãã®å ŽåãApacheã¯åã«HTMLããŒãžãšã¹ã¯ãªããã®åœ¢åŒã§ã³ã³ãã³ããæäŸããWCS5ã¯ãããªãšã®æ¥ç¶ãæäŸããŸãã
ã€ã³ã¹ããŒã«ããã«ãã¹ããå®è¡ããã«ã¯ããã¢ãµãŒããŒ
wssïŒ//wcs5-eu.flashphoner.comïŒ8443ã䜿çšã§ããŸã-æ¥ç¶ããã³ãã¹ãçšã«éããŠããŸãã
å1
ãã¹ãã¹ã¯ãªãããããŒãããWebãµãŒããŒã®
/ var / www / htmlãã©ã«ããŒã«è§£åããŸãã
wget --no-check-certificate https://flashphoner.com//downloads/examples/webrtc-broadcasting-example-0.5.15.1977.2088.tar.gz tar -xzf webrtc-broadcasting-example-0.5.15.1977.2088.tar.gz
å2
ç·šéãæ€çŽ¢ãå€æŽã®ããã«
streamer.jsããã³
player.jsã¹ã¯ãªãããéããŸãã
wssïŒ//wcs5-eu.flashphoner.comïŒ8443ã«
wssïŒ//domain.comïŒ8443ããã§
domain.comã¯ãWCS5ãã€ã³ã¹ããŒã«ãããŠãããµãŒããŒã®ãã¡ã€ã³åã§ã
å3
httpsïŒ//ã®ãã©ãŠã¶ã§
streamer.htmlãéãã[éå§]ãã¯ãªãã¯ããŸãã æ°ããã¿ãã§
player.htmlãéãã[éå§]ãã¯ãªãã¯ããŸãã
ãŠã§ãã«ã¡ã©ãããŒããã£ã¹ãã®æºåãã§ããŸããã ãã®åŸãçŸåšã®äŸãä¿®æ£ããã¹ããªãŒããŒããã®ããã€ãã®ã¹ããªãŒã ã®å
¬éãšãã¬ãŒã€ãŒãžã®ãããªãé
ä¿¡ã䜿çšããŠãäŸãã°å€å¯Ÿå€ã®ãããŒããã£ã¹ãããã¹ãã§ããŸãã
åç
§è³æ
1.
Web Call Server 5ã®åæ
ã€ã³ã¹ããŒã«ãšæ§æ2. WCS5ã®
Web SDK3.
ãããŒããã£ã¹ããœãŒã¹ã³ãŒããããŠã³ããŒããã
4.
chromeã® WebRTCçµ±èš
ïŒ// webrtc-internalsWeb Call Server 5ã¯ãWebRTCãRTMPãããã³ãããªã¬ã€ãã³ã·ã®äœãã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ãéçºããããã®ãã®ä»ã®ãããã³ã«ããµããŒãããã¹ããªãŒãã³ã°ã¡ãã£ã¢ãµãŒããŒã§ãã ãµãŒããŒã«ã¯ãã¯ãã¹ãã©ãããã©ãŒã ãããªãã£ããããªã³ã©ã€ã³ãããªãããŒããã£ã¹ããIPã«ã¡ã©ããã®ãããŒããã£ã¹ããããã³ãã©ãŠã¶ãŒãšã¢ãã€ã«ããã€ã¹çšã®ãã®ä»ã®ã¹ããªãŒãã³ã°ãããªã¢ããªã±ãŒã·ã§ã³ãéçºããããã®Web SDKãAndroid SDKãããã³iOS SDKãå«ãŸããŠããŸãã