*原文:Paul Kinlan

翻译:Agora.io*

长久以来,我一直希望能够直接从Android屏幕上进行录制并将其编码为多种格式,以便将录制内容嵌入在任意位置,而不需要安装任何软件。

如今,我们已经接近这个目标。Chrome团队正在添加一种功能,可以通过getUserMedia从Android设备上共享屏幕。我创建了一个原型来录制屏幕并将录制内容流式传输到其他设备,以便将其录制到文件并为其添加设备帧。

虽然WebRTC有很多复杂的细节,但总体而言,该基础架构并没有那么复杂。

录制过程分为两个阶段:

1.在本地捕获(并可选择在本地录制);

2.传输到远程桌面。

捕获屏幕

getUserMedia是一个十分有用的API。通过它可直接在网页中以内联方式实时访问任何摄像头或麦克风。getUserMediaAPI可用于请求仅连接到某些类型的设备。例如,通过设置参数{audio: true},可请求仅连接至支持音频的设备,而通过设置{video:{'mandatory': {width:1920, height:1080}}},可指示仅连接至高清摄像头。

Chrome即将推出一个新的参数{'chromeMediaSource':'screen'},该参数制定Chrome应使用屏幕作为流媒体源。

它当前位于标记之后,完全是实验性质。在Android上,需要开启chrome://flags#enable-usermedia-screen-capturing来启用它。您也可以跟踪Chrome错误487935的实现情况。

const constraints = {

audio: false, // mandatory.

video: {'mandatory': {'chromeMediaSource':'screen'}}

};

const successCallback = (stream) => {

// Do something with the stream.

//Attach to WebRTC connections

//Record via MediaRecorder

};

consterrorCallback = () => {

//We don't have access to the API

};

navigator.getUserMedia(constraints,successCallback, errorCallback);

这就是全部代码。

当然,这是从技术上而言。在实际中,您不会直接获得访问权限。用户需要向getUserMedia的媒体流授予访问权限(与往常一样),由于此API的这项功能十分强大,用户必须明确选择使用它才能共享自己的屏幕。一旦用户明确选择使用此功能,系统就会明确指示他们在共享屏幕。

现在,您已经有了可存储在本地的屏幕流,您也可以通过WebRTC将它传输到外部位置。

通过MediaRecorder可在本地录制屏幕,正如我在WebGL录制代码段中所做的那样。我还创建了一个简单的演示,可对屏幕录制10秒,再将录制的内容下载到您的设备上。

(function(){

//Download locally

functiondownload(blob) {

varurl = window.URL.createObjectURL(blob);

vara = document.createElement('a');

a.style.display= 'none';

a.href= url;

a.download= 'test.webm';

document.body.appendChild(a);

a.click();

setTimeout(function(){

document.body.removeChild(a);

window.URL.revokeObjectURL(url);

},100);

}

constsuccessCallback = (stream) => {

//Set up the recorder

letblobs = [];

letrecorder = new MediaRecorder(stream, {mimeType: 'video/webm; codecs=vp9'});

recorder.ondataavailable= e => { if (e.data && e.data.size > 0) blobs.push(e.data)};

recorder.onstop= (e) => download(new Blob(blobs, {type: 'video/webm'}));

//Record for 10 seconds.

setTimeout(()=>recorder.stop(), 10000);

//Start recording.

recorder.start(10);// collect 10ms chunks of data

};

consterrorCallback = (err) => {

//We don't have access to the API

console.log(err)

};

navigator.getUserMedia({

audio:false,

video:{'mandatory': {'chromeMediaSource':'screen'}}

},successCallback, errorCallback);

})();

Android屏幕录制并传输,Android录制屏幕的实现方法相关推荐

  1. android soap webservice 数据流传输,Android利用Soap读取WebService并且解析XML的DataSet数据...

    一.Soap的结构 调用webService需要以下几个参数:命名空间.Soap Action.WSDL的URL.方法名.接下来以调用火车列车信息数据为例,webService地址为:webservi ...

  2. 【Android应用开发】分享一个录制 Android 屏幕 gif 格式的小技巧

    因为写博客总是需要录制 Android 软件的演示效果, 研究了将近一小时找到了合适的工具; 录制流程 : -- 1. 录制 Android 手机屏幕内容 : 使用 拍大师 软件录制 Android ...

  3. android 录制mp4格式,Android系统如何录制屏幕(录制成mp4格式)

    不管是教学,还是为了演示,如果能将Android手机(或平板)的屏幕录制成视频文件,那是一件非常酷的事(iOS8已经提供了这一功能,能通过OS X直接在Mac上录制iPad.iPhone的屏幕,win ...

  4. android手机录屏多少fps,如何在Android上以90fps或120fps的屏幕录制?

    [5G资讯网]Android智能手机每天都在开拓新的领域,应用程序也在以相同的速度发展.最近增加的90赫兹显示屏为智能手机上的更好游戏铺平了道路.在OnePlus 7T推出之前,90Hz显示屏仅限于游 ...

  5. Android11灵敏度,Android 11即将上线!推出原生屏幕录制、触摸灵敏度等功能

    对于喜欢国产手机的用户而言,最期待的莫过于Android 11上线了.大家通过外媒已经了解到Android 11的消息了,Android 11被传的神乎其神,Android 11真的有那么厉害吗? A ...

  6. android Q屏幕录制,设备音频录制无声

    Android q 之后google添加了音频录制的api 在状态栏中可以开启录制功能. 使用中发现,选择音源为设备内部音频的时候,录制的视频无声. 内部音乐录制时android Q版本之后googl ...

  7. android屏幕录制 sd卡,Android屏幕录制并转换gif

    原文发布于 我的博客Android猿 最近需要手机录制gif图片,找了好多软件也没理想的,最后确定了先通过命令screenrecord 录制MP4视频再转gif的方案.分享出来和大家交流,谁有更好的方 ...

  8. android放微信@功能,Android仿微信语音消息的录制和播放功能

    一.简述 效果: 实现功能: 长按Button时改变Button显示文字,弹出Dialog(动态更新音量),动态生成录音文件,开始录音: 监听手指动作,规定区域.录音状态下手指划出规定区域取消录音,删 ...

  9. Android音视频开发:MediaRecorder录制视频

    简介 安卓api提供了Camera类控制相机捕获图像,在api21以后,安卓也提供了Camera2,Camera变得过时了,但为了兼容性,这里还是使用Camera. 对于录制视频,可以使用MediaR ...

最新文章

  1. idea 弹出框中有乱码_IDEA如何自定义快捷键
  2. 上传附件每次都是上传中。_起标题头疼?每次卡在标题上 我都回顾这7种方法 创作灵感就来了...
  3. [poj] 2318 TOYS || 判断点在多边形内
  4. adguard拦截规则存在哪里_AdGuard 过滤规则分享
  5. docker-compose单机容器编排工具
  6. python代码覆盖率测试_unittest+coverage单元测试代码覆盖操作实例详解_python
  7. php字符串副职_PHP explode()函数
  8. 支持lodop的服务器,clodop云打印服务器未响应(lodop打印)
  9. vs2010开发activex(MFC)控件/ie插件(二)
  10. 这个 bug,硬是让我折腾了一周
  11. ajax回调函数的各个参数的理解
  12. 拿下多家主机厂数百万前装定点,禾赛科技激光雷达量产进程加速
  13. php 获取 星期几,php怎么获得星期几
  14. 关于java中的连等赋值问题(雷惊风)
  15. python re库,Python中的Re库简要总结
  16. c++生成随机数详解(包含可执行代码)
  17. 【0429】散列函数和消息鉴别
  18. Docker 搭建FastDFS文件系统
  19. 日常工作笔记0807
  20. 云虚拟主机连接mysql_云虚拟主机数据库使用

热门文章

  1. 谷歌 不支持 activeX插件
  2. 通过拖坠自动生成html页面,网页制造开端—html.ppt
  3. 走近历史,伦敦卫兵博物馆游玩攻略
  4. 做XRD有什么用途?
  5. php小程序 100行左右,微信小程序 左右分类滚动列表
  6. 用Javascript开发《三国志曹操传》-开源讲座(三)-情景对话中,仿打字机输出文字
  7. SpringMVC-CRUD与文件上传、文件下载
  8. My personal website:http://47.94.240.229:8080/yjh/project/
  9. Google浏览器自动翻译页面怎么设置?
  10. 414:request-urltoolong