Chromeã§ã®ã¹ã¯ãªãŒã³ãã£ã¹ã
ã¹ã¯ãªãŒã³ãã£ã¹ãïŒç»é¢å
±æãã¹ã¯ãªãŒã³ã·ã§ããïŒã¯ãGoogle Chromeãã©ãŠã¶ãŒã§æ¢ã«æ©èœããŠããããã©ãŠã¶ãŒãŠã£ã³ããŠèªäœãšä»ã®ã¢ããªã±ãŒã·ã§ã³ãŠã£ã³ããŠã®äž¡æ¹ããã£ããã£ã§ããŸãã ããšãã°ã飿¥ãããŠã£ã³ããŠã§å®è¡ãããŠããFirefoxããã£ããã£ã§ããŸãã
ãã¹ãŠãçŽ æŽãããã§ãããããã»ãã¥ãªãã£äžã®åé¡ããããŸãã Chromeã§ã¯ãã¹ã¯ãªãŒã³ãã£ã¹ãã¯ãªãã«ãªã£ãŠããŸãã
æå¹ã«ããã«ã¯ã
Chrome Desktop Capture APIã䜿çšããå¿
èŠããããŸãããã®èšäºã§ã¯ããããè¡ãæ¹æ³ã瀺ããŸãã
ã¹ã¯ãªãŒã³ãã£ã¹ãæ¡åŒµæ©èœ
ã¹ã¯ãªãŒã³ãã£ã¹ããæ©èœãããã«ã¯ããŠãŒã¶ãŒããµã€ãïŒãã¡ã€ã³ïŒå°çšã«äœæãããæ¡åŒµæ©èœïŒChromeæ¡åŒµæ©èœïŒãã€ã³ã¹ããŒã«ããå¿
èŠããããŸãã
ã¹ã¯ãªãŒã³ãã£ã¹ãã®æåã®èµ·åã«ã¯ããŠãŒã¶ãŒã«ããããã€ãã®ã¢ã¯ã·ã§ã³ãå¿
èŠã§ãã
- ãŠãŒã¶ãŒã¯ãµã€ãã«ã¢ã¯ã»ã¹ãã [ç»é¢å
±æã®éå§ ]ãã¿ã³ãã¯ãªãã¯ããŸãã
- ãŠãŒã¶ãŒã¯ããã®ã¢ã¯ã·ã§ã³ã®æ¡åŒµæ©èœã远å ããããã«æåŸ
ãããŠããŸãã
æ¡åŒµæ©èœã®è¿œå ã¯ãChromeãã©ãŠã¶ãŒèªäœã«ãã£ãŠè¡šç€ºããããã¡ããšãããããã¯ã§è¡ããã1ã¯ãªãã¯ã§æ¡åŒµæ©èœã远å ã§ããŸãã ãããã¯ã¯ãæ¡åŒµæ©èœãç»é¢ããã£ããã£ã§ããããšã瀺ããŸãã
ç¬èªã®æ¡åŒµæ©èœ
次ã®ã¹ãããã¯ããã¡ã€ã³ã®æ¡åŒµæ©èœãäœæããããšã§ãã ããšãã°ããã¹ããã¡ã€ã³ã¯
mysupercat.comã§ãã ãã®å Žåãæ¡åŒµæ©èœãäœæãããšãã«ãæ¡åŒµæ©èœã³ãŒãã§ãã¡ã€ã³ãç»é²ããå¿
èŠããããŸãã
ããã«ããã¡ã€ã³ïŒãã®ãã¡ã€ã³ã®ãµã€ãïŒã¯HTTPSã§åäœããå¿
èŠããããŸãã ãããã£ãŠãã¹ã¯ãªãŒã³ãã£ã¹ãããŒãžã¯æ¬¡ã®ããã«éããŸãïŒ mysupercat.com/screen-sharing.php
ãã¡ã€ã³ãšHTTPS-ããã§ãã¹ã¯ãªãŒã³ãã£ã¹ãçšã®ç¬èªã®æ¡åŒµæ©èœãäœæããã®ã«å¿
èŠãªãã®ã¯ããããããã ãã§ãã åæã«ãSSLèšŒææžã賌å
¥ããå¿
èŠã¯ãããŸããã èªå·±çœ²åèšŒææžãé©ããŠããŸãã äž»ãªããšã¯ãèµ€ãç·ãä»ããŠããŠãHTTPSã§ããŒãžãéãããšã§ãïŒ
ããããäœãä»ã®ãã®ãå¿
èŠã§ã-5ã¢ã¡ãªã«ãã«ã Chrome Developer Clubã®ã¡ã³ããŒã·ããã«æ¯æãæ£ç¢ºãªé¡ã
ãŸãšãããšã ç¬èªã®æ¡åŒµæ©èœã®äœæãšãã¹ããéå§ããã«ã¯ã次ã®ãã®ãå¿
èŠã§ãã
- ãã¡ã€ã³å
- httpsã§ãã¹ãã£ã³ã°
- ã«ãŒãã«5ãã«
æ¡åŒµæ©èœãå
Ž
- ChromeããããããŒããã·ã¥ããŒãã«ã¢ã¯ã»ã¹ããæºåãã5ãã«ãæ¯æããŸãã
- æ¡åŒµãã¡ã€ã«ãå«ãZIPã¢ãŒã«ã€ããæºåããŠããŸãã
ãããè¡ãã«ã¯ã ãããã 2ã€ã®ãã¡ã€ã«ãããŠã³ããŒãããŸãã
manifest.jsonãã¡ã€ã«ã倿ŽããŠãç¬èªã®ãã¡ã€ã«ãé
眮ããŸãã
- ãåå
- äœè
- 説æ
- homepage_url
äŸãã°
"Name" : "My cool screen sharing extension", "Author" : "I am", "Description" : "The extensions shares screens from my website", "Homepage_url" : "https://mysupercat.com",
{ "name" : "Flashphoner Screen Sharing", "author": "Flashphoner", "version" : "1.4", "manifest_version" : 2, "minimum_chrome_version": "34", "description" : "This Chrome extension is developed for http://flashphoner.com WCS Api to enable screen capture.", "homepage_url": "http://flashphoner.com", "background": { "scripts": ["background-script.js"], "persistent": false }, "externally_connectable": { "matches": [ "https://flashphoner.com/*", "https://*.flashphoner.com/*", "*://localhost/*", "*://127.0.0.1/*" ] }, "icons": { "16": "logo16.png", "48": "logo48.png", "128": "logo128.png" }, "permissions": [ "desktopCapture" ], "web_accessible_resources": [ "logo48.png" ] }
ããã«ãã¢ã€ã³ã³ã倿Žããã³ãŒãã®ãã¡ã€ã³ãexternally_connectableã«çœ®ãæããŸã
"externally_connectable": { "matches": [ "https://mysupercat.com/*", "https://*.mysupercat.com/*", "*://localhost/*", "*://127.0.0.1/*" ] }
çµæã¯ãã®ãããªmanifest.jsonã§ãïŒ
{ "name" : "My cool screen sharing extension", "author": "I am", "version" : "1.0", "manifest_version" : 2, "minimum_chrome_version": "34", "description" : "The extensions shares screens from my website", "homepage_url": "https://mysupercat.com", "background": { "scripts": ["background-script.js"], "persistent": false }, "externally_connectable": { "matches": [ "https://mysupercat.com/*", "https://*.mysupercat.com/*", "*://localhost/*", "*://127.0.0.1/*" ] }, "icons": { "16": "logo16.png", "48": "logo48.png", "128": "logo128.png" }, "permissions": [ "desktopCapture" ], "web_accessible_resources": [ "logo48.png" ] }
ãããã®ãã¡ã€ã«ã¯ããã¹ãŠã®ã¢ã€ã³ã³ãšä»ã®åçãšãšãã«ZIPã¢ãŒã«ã€ãã«ããã¯ããŸãã ããã§ã¢ã€ã³ã³ã«ã€ããŠèªãããšãã§ããŸã ã ãããŠã ããã§è¿œå ã®åçã«ã€ããŠã
次ã«ã[ æ°ããã¢ã€ãã ã远å ] ãã¯ãªãã¯ããŸãã
次ã«ãå¥çŽã確èªããåŸãZIPã¢ãŒã«ã€ãã«èšå
¥ããŸã
ã¢ãŒã«ã€ããããŠã³ããŒãããåŸããã¹ãŠãæ
éã«ç¢ºèªããŠä¿åããå¿
èŠããããŸã
[ å
¬é ]ãã¿ã³ãã¯ãªãã¯ããŠãããã·ã¥ããŒãããæ¡åŒµæ©èœãå
¬éããŸãã
ããã·ã¥ããŒãã§å
¬éãããæ¡åŒµæ©èœã¯æ¬¡ã®ããã«ãªããŸãã
ã§ãã æ¡åŒµæ©èœã¯ããã±ãŒãžåãããå
¬éããããã©ãŠã¶ã«ã€ã³ã¹ããŒã«ã§ããŸãã
ã€ã³ã©ã€ã³ã€ã³ã¹ããŒã«
ã€ã³ã©ã€ã³ã€ã³ã¹ããŒã«ããªããã°ããŠãŒã¶ãŒã¯Chromeã¹ãã¢Webãµã€ãã«ã¢ã¯ã»ã¹ããŠãããã«æ¡åŒµæ©èœãã€ã³ã¹ããŒã«ããå¿
èŠããããŸãã ããã¯ç¢ºãã«èŽåœçã§ã¯ãããŸããããæ¬¡ã®ãšããã§ãã
- ãŠãŒã¶ãŒã«ãšã£ãŠã¯ããŸã䟿å©ã§ã¯ãããŸããã
- ãŠãŒã¶ãŒã¯ãæ¡åŒµæ©èœã®ã€ã³ã¹ããŒã«ããŒãžã§æ··ä¹±ããæ»ã£ãŠããªãå ŽåããããŸãã
æ¡åŒµæ©èœã®ã€ã³ã©ã€ã³ã€ã³ã¹ããŒã«ã¯ããã®ãã¡ããšãããŠã£ã³ããŠãšåŒã°ãããŠãŒã¶ãŒãChromeã¹ãã¢ã«åŒ·å¶çã«åãæ¿ããããããšã¯ãããŸããã
ã€ã³ã©ã€ã³ã€ã³ã¹ããŒã«ãæ§æããã«ã¯ããããã§ã¹ãïŒ manifest.jsonãã¡ã€ã« ïŒã§èª¬æãããã¡ã€ã³ãšãã¹ãã£ã³ã°ãå¶åŸ¡ããå¿
èŠããããŸã ã
ããšãã°ããã¡ã€ã³ãmysupercat.comã®å Žåãæšæºã®ç¢ºèªæé ãå®è¡ããŠããã®ãã¡ã€ã³ã®æææš©ã確èªããå¿
èŠããããŸãã
ã€ã³ã©ã€ã³ã€ã³ã¹ããŒã«ãæå¹ã«ããã«ã¯ãæ¡åŒµæ©èœç·šéããŒãžã§[ ãã®ã¢ã€ãã ã¯ã€ã³ã©ã€ã³ã€ã³ã¹ããŒã«ã䜿çš]ãã©ã°ãèšå®ããŸãã
次ã«ãWebãµã€ãã远å ããŸãã
æ°ãããŠã£ã³ããŠã§Search Consoleãéããç¢ºèªæé ãå®è¡ã§ããŸãã
次ã®ã¹ãããã¯ãèå¥åãã¡ã€ã«ããã¹ãã£ã³ã°ã«ã¢ããããŒãããŠããã¡ã€ã³/ãµã€ãã®æææš©ã確èªããããšã§ã
æ€èšŒæé ãæ£åžžã«å®äºããŸããã
æ€èšŒããããµã€ãã¯ããã®æ¡åŒµæ©èœã®ãªã¹ãã§å©çšå¯èœã«ãªããã€ã³ã©ã€ã³ã€ã³ã¹ããŒã«ã䜿çšã§ããããã«ãªããŸãã
ã¹ã¯ãªãŒã³ãã£ã¹ãã®WebããŒãžãžã®çµ±å
æ¡åŒµæ©èœã®æºåãæŽããã€ã³ã©ã€ã³ã€ã³ã¹ããŒã«çšã«æ§æãããŠããŸãã HTMLããŒãžã«æ¡åŒµæ©èœã®åŒã³åºãã³ãŒããåã蟌ã¿ããã¹ãããŸãã
Google Chromeã®ã¹ã¯ãªãŒã³ãã£ã¹ãã¯WebRTC APIã䜿çšããŸã ã ãããã£ãŠããã®ãã¹ããå®äºããã«ã¯ãWebRTCãã©ãããã©ãŒã ãå¿
èŠã§ãã
ãµãŒããŒWebRTCãã©ãããã©ãŒã ãšããŠã Web Call ServerãšWeb SDKã䜿çšããŸããããã¯ããã®ãµãŒããŒã®APIã¹ã¯ãªããã®ã»ããã§ãã
1.ã¹ã¯ãªãŒã³ãã£ã¹ãçšã®HTMLããŒãžãäœæããŸãscreen-sharing.html
ããŒãžã¯20è¡ã®ã³ãŒãã§æ§æãããæ¬¡ã®ããã«ãªããŸãã
<!DOCTYPE html> <html lang="en"> <head> <title>Screen Sharing</title> <script type="text/javascript" src="../../../../flashphoner.js"></script> <script type="text/javascript" src="screen-sharing.js"></script> <link rel="chrome-webstore-item" href="https://chrome.google.com/webstore/detail/nlbaajplpmleofphigmgaifhoikjmbkg"> </head> <body onload="init_page()"> <h1>Screen Sharing</h1> <button type="button" id="installExtensionButton" onclick="installExtension()">Install Now </button> <h2>Capture</h2> <div id="localVideo" style="width:320px;height:240px; border: 1px solid"></div> <h2>Preview</h2> <div id="remoteVideo" style="width:320px;height:240px; border: 1px solid"></div> <button id="publishBtn" type="button" onclick="connectAndShareScreen()">Connect and share screen</button> <p id="status"></p> </body> </html>
ãããåè§£ããŠã¿ãŸãããã
1ïŒflashphoner.js APIãã¡ã€ã«ãã¢ããããŒãããŸã
<script type="text/javascript" src="../../../../flashphoner.js"></script>
2ïŒscreen-sharing.jsã¹ã¯ãªãããããŒãããŸã-å°ãåŸã§åæããŸãã
<script type="text/javascript" src="screen-sharing.js"></script>
3ïŒã¹ã¯ãªãŒã³ãã£ã¹ãã®æ¡åŒµæ©èœãæ¢ãå Žæã瀺ããŸãã
<link rel="chrome-webstore-item" href="https://chrome.google.com/webstore/detail/nlbaajplpmleofphigmgaifhoikjmbkg">
4ïŒæ¡åŒµæ©èœãã€ã³ã¹ããŒã«ãããã¿ã³ãã¯ãªãã¯ããŠããã¿ã³ã远å ããŸãã
<button type="button" id="installExtensionButton" onclick="installExtension()">Install Now </button>
5ïŒdiv-localVideoèŠçŽ ã远å ããŸãããã®èŠçŽ ã§ã¯ããã£ããã£ãããç»é¢ãããŒã«ã«ã«è¡šç€ºãããŸã
<div id="localVideo" style="width:320px;height:240px; border: 1px solid"></div>
6ïŒdiv-remoteVideoèŠçŽ ã远å ããŸããããã¯ããµãŒããŒããéä¿¡ããããã®ã衚瀺ãããã¬ãŒã€ãŒã«ãªããŸãã localVideoã§ãã£ããã£ããããµãŒããŒã«éä¿¡ããããããªã¹ããªãŒã ãåçããŸãã
<div id="remoteVideo" style="width:320px;height:240px; border: 1px solid"></div>
7ïŒã¹ããªãŒã ã®ã¹ã¯ãªãŒã³ãã£ã¹ããšã¹ããŒã¿ã¹ã®è¡šç€ºãéå§ãããã¿ã³
<button id="publishBtn" type="button" onclick="connectAndShareScreen()">Connect and share screen</button> <p id="status"></p>
ããã¶ã€ã³ãã§ã¯ãããŒãžã¯æ¬¡ã®ããã«ãªããŸãã
2. screen-sharing.jsãã¹ã¯ãªãŒã³ãã£ã¹ãããããã®JavaScriptã³ãŒããäœæããŸã
ãã¹ãŠã®ã³ãŒãã¯ããããããŠã³ããŒãã§ããŸã ã ãã®ã³ãŒãã¯æ°ããŒãžãããã5ã€ã®äž»èŠãªæ©èœãå«ãŸããŠããŸãã
var SESSION_STATUS = Flashphoner.constants.SESSION_STATUS; var STREAM_STATUS = Flashphoner.constants.STREAM_STATUS; var localVideo; var remoteVideo; var extensionId = "nlbaajplpmleofphigmgaifhoikjmbkg"; function init_page() {
ãã®ã³ãŒãã詳现ã«åæããŸãã
1ïŒæåã«ãããã€ãã®å€æ°ã宣èšãããŸãïŒstatusãlocalVideoããã³remoteVideoèŠçŽ ãããã³ã¹ã¯ãªãŒã³ãã£ã¹ãçšã®äžæã®æ¡åŒµèå¥åãå«ãextensionIdã
var SESSION_STATUS = Flashphoner.constants.SESSION_STATUS; var STREAM_STATUS = Flashphoner.constants.STREAM_STATUS; var localVideo; var remoteVideo; var extensionId = "nlbaajplpmleofphigmgaifhoikjmbkg";
2ïŒæ¬¡ã«ãextensionIdãFlashphoner APIã«æž¡ããããã®çµæãAPIã¯ã©ã®æ¡åŒµæ©èœãã¹ã¯ãªãŒã³ãã£ã¹ãã«äœ¿çšãããããèªèããŸãã
Flashphoner.init({screenSharingExtensionId: extensionId});
3ïŒå®æçã«Chromeã«åãæ¿ããæ¡åŒµæ©èœãã€ã³ã¹ããŒã«ãããŠãããã©ããã確èªããŸãã æ¡åŒµæ©èœãã€ã³ã¹ããŒã«ãããŠããå Žåã [æ¡åŒµæ©èœã®ã€ã³ã¹ããŒã« ]ãã¿ã³ã¯äžèŠã«ãªããé衚瀺ã«ã§ããŸãã
chrome.runtime.sendMessage(extensionId, {type: "isInstalled"}, function (response) {...}
4ïŒconnectAndShareScreen颿°ã¯ããµãŒããŒãžã®æ¥ç¶ã確ç«ããæ¥ç¶ã確ç«ããããšïŒESTABLISHEDïŒããããªã¹ããªãŒã ã®ãã£ããã£ãšéä¿¡ãéå§ããstartStreaming颿°ã«å¶åŸ¡ãæž¡ããŸãã
function connectAndShareScreen() { var url = "wss://wcs5-eu.flashphoner.com:8443"; console.log("Create new session with url " + url); Flashphoner.createSession({urlServer: url}).on(SESSION_STATUS.ESTABLISHED, function (session) {
5ïŒã¹ã¯ãªãŒã³ãã£ã¹ããéå§ããåã«ããããªè§£å床ãFPSãªã©ã®ã¹ããªãŒã ãã©ã¡ãŒã¿ãŒãèšå®ãããŸãã
var constraints = { video: { width: 320, height: 240, frameRate: 10, type: "screen" } };
6ïŒæ¬¡ã«ãã¹ããªãŒã èªäœãäœæãããpublishïŒïŒã¡ãœãããåŒã³åºãããŸãã ã¹ã¬ããã«ã¯test123ãšããååãä»ããããŠããããšã«æ³šæããŠãã ãã
session.createStream({ name: streamName, display: localVideo, constraints: constraints }).publish();
7ïŒtest123ã¹ããªãŒã ããµãŒããŒã«æ£åžžã«éä¿¡ããåŸãã³ãŒãã¯PUBLISHINGã€ãã³ããã³ãã©ãŒã«å
¥ããŸãã
on(STREAM_STATUS.PUBLISHING, function (publishStream) {...}
8ïŒé£æ¥ããremoteVideo divãããã¯ã§ã¹ããªãŒã ãåçããã ãã§ãã ãããè¡ãã«ã¯ã playïŒïŒé¢æ°ãåŒã³åºããŸãã
session.createStream({ name: streamName, display: remoteVideo }).play();
ããŒãžãšã¹ã¯ãªããã®æºåãæŽãããã¹ããéå§ã§ããŸãã
è©Šéšæºå
ãã®çµæã次ã®ãã¡ã€ã«ããããŸãã
- screen-sharing.html
- screen-sharing.js
- flashphoner.js
flashphoner.jsã¯ãWeb SDKã¢ã»ã³ããªã®äžéšã§ãã ææ°ã®ãã«ãã¯ãã®ããŒãžããããŠã³ããŒãã§ããŸã ã
htmlãã¡ã€ã«ãšjsãã¡ã€ã«ã«å ããŠããããªã¹ããªãŒã ãåä¿¡ããå¥ã®ïŒãã®å ŽåãåãããŒãžã«æ»ãïŒã«ãªã¬ãŒãããªã¬ãŒãµãŒããŒãå¿
èŠã«ãªããŸãã
ãã¹ãã«ã¯Web Call Server 5ã䜿çšããŸãã ãããã£ãŠãããã€ãã®ãªãã·ã§ã³ããããŸãã
ã¹ã¯ãªãŒã³ãã£ã¹ããã¹ãã®ã¹ããŒã ã¯æ¬¡ã®ãšããã§ãã
åãæåãåããŠãå€ãã®æ¥ç¶ãŠãŒã¶ãŒã«ã¹ã¯ãªãŒã³ãã£ã¹ãã¹ããªãŒã ãé
ä¿¡ã§ããŸã
Chromeã§ã®ã¹ã¯ãªãŒã³ãã£ã¹ãã®ãã¹ã
- Google Chromeã§screen-sharing.html HTTPSããŒãžãéããŸã
- [ä»ããã€ã³ã¹ããŒã«]ãã¿ã³ãã¯ãªãã¯ããŠã ã€ã³ã©ã€ã³ã€ã³ã¹ããŒã«æ¹æ³ã䜿çšããŠæ¡åŒµæ©èœã远å ããŸã ã
- [ æ¡åŒµæ©èœã远å ]ãã¯ãªãã¯ãããšã[ ç»é¢ã®æ¥ç¶ãšå
±æ ]ãã¿ã³ã§ããã«ã¹ã¯ãªãŒã³ãã£ã¹ããéå§ã§ããŸãã Chromeã§ã¯ããã£ããã£ãããã®ãæ£ç¢ºã«éžæããããã«æ±ããããŸãã ã¿ããChromeãŠã£ã³ããŠããŸãã¯å¥ã®ã¢ããªã±ãŒã·ã§ã³ãæå®ã§ããŸãã
- [ å
±æ ]ãã¿ã³ãã¯ãªãã¯ãããšãæçµçµæã衚瀺ãããŸãã ç»é¢ããã£ããã£ãããWebRTCãä»ããŠãµãŒããŒã«éä¿¡ããã ãã¬ãã¥ãŒãããã¯ã«è¡šç€ºãããŸãã
ãŸãšãããš
ãããã£ãŠã Google Chromeãã©ãŠã¶ãŒã§ç°¡åãªãã¹ãããŒãžscreen- sharing.htmlã䜿çšããŠã¹ã¯ãªãŒã³ãã£ã¹ãããã¹ãããŸããã ãã¹ãããŒãžã«ã¯ã Chromeã¹ãã¢ã§å
¬éãã ã¹ãã¢ã«åãæ¿ããã«ã¯ã³ã¯ãªãã¯ã§ã€ã³ã¹ããŒã«ãããã¹ã¯ãªãŒã³ãã£ã¹ãçšã®æ¡åŒµæ©èœãå«ãŸããŠããŸãã
ãã¹ãäžãããŒãžã¯HTTPSçµç±ã§æ©èœãã Webã³ãŒã«ãµãŒããŒïŒã¹ããªãŒãã³ã°ãããªãããŒããã£ã¹ãçšã®WebRTCã¡ãã£ã¢ãµãŒããŒïŒãä»ããŠãããªãéåä¿¡ããŸããã
ã¹ã¯ãªãŒã³ãã£ã¹ããHTMLããŒãžã«çµ±åããããã«ãWCSãµãŒããŒçšã®Web SDKã¢ã»ã³ããªã®äžéšã§ããflashphoner.jsã¹ã¯ãªããã䜿çšãããŸããã
åç
§è³æ
ãã¹ã¯ããããããªããã£ããã£ããããã®Chrome API
Chromeéçºè
åãã®ããã·ã¥ããŒã
ã¹ã¯ãªãŒã³ãã£ã¹ããæ¡åŒµããæå°éã®ã³ãŒã
æ¡åŒµæ©èœã§ã®ã¢ã€ã³ã³ã®ãããã³ã°
æ¡åŒµæ©èœã§è¿œå ã®ç»åãããã¯ãã
ã¹ã¯ãªãŒã³ãã£ã¹ãã®ãµã³ãã«ã³ãŒããããŠã³ããŒããã
ãã¹ãã«Web Call Serverãã€ã³ã¹ããŒã«ããŸã
Amazon EC2ã§Web Call Serverãå®è¡ãã
Web Call Server 5ãã¢ãµãŒããŒ
Webã³ãŒã«ãµãŒããŒ
Web SDK