使用WebRTC实现远程屏幕共享

   正如我们上周报道的一样,最近有很多事情发生在我们熟知的WebRTC上。

        其中一个是:基于WebRTC的屏幕共享。


        这是屏幕录像:youtube.com/watch?v=tD0QtBUZsF4

        这是代码:github.com/samdutton/rtcshare

        从本质上讲,我们使用RTCPeerConnectionchrome.tabCapture构建了一个实验性的Chrome扩展,以此通过浏览器标签来分享实时视频。如果你想尝试一下,你需要使用ChromeCanary版本 ,并且在about:flags页面开启实验性扩展(Experimental Extension)的API

        我们的原型很大程度上依赖于强大的apprtc.appspot.com演示,坦率地说,这有点像黑客行为。但是,这是一个概念的证明,并且我们做到了。

        下面是我们的实现方法:

        1.    当用户点击扩展程序图标(地址栏旁的录制按钮),扩展的后台脚本background.js为它自身添加了一个iframesrc指向rtcshare.appspot.com。在background.js中它仅用于获取tokenroom_key这样的参数值。

[html]  view plain copy
  1. chrome.browserAction.onClicked.addListener(function(tab) {  
  2.     var currentMode = localStorage["capturing"];  
  3.     var newMode = currentMode === "on" ? "off" : "on";  
  4.   
  5.     if (newMode === "on"){ // start capture  
  6.         appendIframe();  
  7.     } else { // stop capture  
  8.         chrome.tabs.getSelected(null, function(tab){  
  9.             localStream.stop();  
  10.             onRemoteHangup();  
  11.         });  
  12.         // set icon, localStorage, etc.  
  13.     }  
  14. }  

        2.     iframe加载后background.jsiframe获取参数值(由rtcshare.appspot.com应用生成)并调用chrome.tabCapture.capture()开始摄制当前标签的实时视频流。

[html]  view plain copy
  1. function appendIframe(){  
  2.     iframe = document.createElement("iframe");  
  3.     iframe.src="https://rtcshare.appspot.com";  
  4.     document.body.appendChild(iframe);  
  5.     iframe.onload = function(){  
  6.         iframe.contentWindow.postMessage("sendConfig", "*");  
  7.     };  
  8. }  
  9.   
  10. // serialised config object messaged by iframe when it loads  
  11.   
  12. window.addEventListener("message", function(event) {  
  13.     if (event.origin !== "https://rtcshare.appspot.com"){  
  14.         return;  
  15.     }  
  16.     var config = JSON.parse(event.data);  
  17.     room_link = config.room_link; // the remote peer URL  
  18.     token = config.token; // for messaging via Channel API  
  19.     // more parameter set from config  
  20. );  
  21.   
  22. function startCapture(){  
  23.     chrome.tabs.getSelected(null, function(tab) {  
  24.         var selectedTabId = tab.id;  
  25.         chrome.tabCapture.capture({audio:true, video:true}, handleCapture); // bingo!  
  26.     });  
  27. }  

        3.     一旦实时数据流可用(换句话说,即当前标签的实时视频),background.js便启动点对点连接的进程,信号通过rtcshare.appspot.com使用XHRGoogleChannel API进行传输。所有一切的工作原理就像apprtc的示例一样,除了视频流到远程的传送是通过chrome.tabCapture()而不是getUserMedia()

[html]  view plain copy
  1. function handleCapture(stream){  
  2.     localStream = stream; // used by RTCPeerConnection addStream();  
  3.     initialize(); // start signalling and peer connection process  
  4. }  

        4.     为了演示考虑,这个扩展会在新标签打开一个rtcshare.appspot.com提供的url,其中包含一个房间号的参数。当然,这个URL可以在另一台计算机上或者任何地方打开,这可能是最有价值的事情。me.t

[html]  view plain copy
  1. chrome.tabs.create({url: room_link});abs.create({URL:room_link});  

        我们为屏幕共享设想了很多有趣的用例,即使在这个早期的发展阶段,基于插件的标签录制和分享有多快和多稳定也给我们留下了深刻的印象。

        如果你想了解更多关于WebRTC的内容,请查阅HTML5 Rocks的文章或我们的快速入门指南 

        祝大家2013年快乐!

        相关文章:《Chrome引入WebRTC支持视频聊天App

        《如何使用HTML5实现拍照上传应用

        《对HTML5 Device API相关规范的解惑

         译自:http://updates.html5rocks.com/2012/12/Screensharing-with-WebRTC

         转载请注明:来自蒋宇捷的博客-http://blog.csdn.net/hfahe

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
WebRTC是一种用于实时通信的开放标准。它可以在Web浏览器之间建立点对点的连接,实现音频、视频和数据的传输。利用WebRTC技术,我们可以实现远程控制。 在远程控制中,一台设备可以控制另一台设备,这两台设备可以是手机、电脑或其他互联网连接的设备。通过WebRTC远程设备可以在另一台设备上显示自己的屏幕,同时还可以控制另一台设备的输入设备,例如鼠标和键盘。 实现远程控制的过程如下:首先,需要建立两台设备之间的WebRTC连接。设备之间会进行信令交换,以建立连接。一旦连接建立成功,远程设备可以共享自己的屏幕内容,通常是通过捕捉并传输屏幕的图像。另一台设备接收到远程设备传输的图像后,将其显示在屏幕上。 同时,远程设备还可以传输鼠标和键盘的输入事件。这些事件通过WebRTC连接发送到另一台设备,并在那里被解析和执行。这样,远程设备就可以通过发送鼠标移动、点击和键盘输入等事件来实现对另一台设备的控制。 WebRTC实现远程控制功能有很多优势。首先,它是基于Web技术的开放标准,可以在不同的平台上使用,例如Windows、Mac、Android等。其次,WebRTC提供了高质量的音视频传输,使远程通信更加流畅和真实。此外,WebRTC还具有实时性和低延迟的特点,可以实现快速响应的远程控制体验。 综上所述,通过WebRTC实现远程控制可以使设备之间实现高质量、实时、低延迟的通信,使得远程控制更加便捷和可靠。这种技术在远程办公、远程教育、技术支持等领域都有广泛的应用前景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值