Android 录制屏幕的实现方法

Chrome   2017-02-15 15:32:01 发布
您的评价:
     
5.0  
收藏     0收藏

长久以来,我一直希望能够直接从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);

})();

来自:http://www.jianshu.com/p/5055c29173df

Android 录制屏幕的实现方法的更多相关文章

  1. Android自适应屏幕的实现方法

    首先我们先了解下手机分辨率 分辨率是指屏幕上有横竖各有多少个像素目前手机分辨率大概情况如下: QVGA 分辨率:320×240 简    介:QVGA即"Quarter VGA". ...

  2. 【Android Studio安装部署系列】二十六、Android studio录制屏幕并生成gif文件

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 Android Studio自带录制屏幕功能,那么就可以很方便地将手机上的屏幕操作录制成视频.然后借助一些软件或者网站转换成gif文 ...

  3. Android || IOS录制mp3语音文件方法

    Android Android Supported Media Formats : http://developer.android.com/guide/appendix/media-formats. ...

  4. Android自适应不同屏幕几种方法

        因为Android设备的屏幕尺寸.分辨率区别很大.假设希望我们的应用可以在不同屏幕尺寸或分辨率的Android设备上执行,即更换Android设备后界面和字体不会因此变得混乱.则须要考虑屏幕的 ...

  5. Android各种屏幕适配原理

    dip(dp): device independent pixels(设备独立像素) dip,就是把屏幕的高分成480分,宽分成320分.比如你做一条160dip的横线,无论你在320还480的模拟器 ...

  6. Android获取屏幕宽和高

    android获取屏幕的高度和宽度用到WindowManager这个类,两种方法:   1.WindowManager wm = (WindowManager) getContext()        ...

  7. C#实现录制屏幕

    以前写过两篇录制麦克风语音和摄像头视频的文章(实现语音视频录制.在服务器端录制语音视频),最近有朋友问,如果要实现屏幕录制这样的功能,该怎么做了?实际上原理是差不多的,如果了解了我前面两篇文章中介绍的 ...

  8. android自适应屏幕方向和大小

    一:不同的layout Android手机 屏幕 大小不一,有480x320, 640x360, 800x480.怎样才能让App自动 适应不同的屏幕 呢?      其实很简单,只需要在res目录下 ...

  9. android 多屏幕适配 : 第一部分

    1.在xml布局文件中,控件的宽度和高度用  dp ;   字体大小用 sp 2.根据屏幕的宽高来动态的适配 , 获取屏幕的宽高的两种方法: 第一种方法: /** * 屏幕的宽度 * 屏幕的高度 * ...

随机推荐

  1. 自定义 Java Annotation ,读取注解值

    1. 首先是自定义注解: package cn.veji.hibernate.po; import java.lang.annotation.ElementType; import java.lang ...

  2. C++为什么抓不到除0错“异常”?

    http://blog.csdn.net/nanyu/article/details/6475555 有人问这个问题: try { std::cout << 10/0 << s ...

  3. Application crashes -程序崩溃原因

    Typical errors that result in application crashes include: attempting to read or write memory that i ...

  4. c++通过CMake实现debug开关

    刚学cmake,很多东西还不是很懂,不过今天刚刚实现了通过CMake控制debug的开关,兴奋之余记录一下. 背景介绍: 最近参与到了一个大的C++项目,很多代码已经非常成熟,我来添加一些辅助功能,但 ...

  5. freopen的各种错误姿势

    本弱鸡已经触发的错误姿势: freoprn("railway.in","r",stdin); freopen("railway.cpp",& ...

  6. ubuntu 14.04 挂载window共享目录

    (1) 先在ubuntu系统里,新建一个目录用于挂载,目录假设为 /mnt/win: sudo mkdir /mnt/win (2)在windows系统,共享出一个文件夹,共享名称假设为www sud ...

  7. Error:Cannot find bean: "org.apache.struts.taglib.html.BEAN" in any scope

    原因:html标签和struts标签混用,或者表单元素外面没有<html:form>标签包裹. 解决:统一标签 <html:form action="/login.do&q ...

  8. Java第九周总结

  9. [bzoj2242][SDOI2011][计算器] (Baby-Step-Giant-Step+快速幂+exgcd)

    Description 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p,计算满足xy≡ Z ( mod P )的最小非负整数: 3.给 ...

  10. vue 安装+下载

    1. npm init -y [生成package.json文件] 2. 增加 "private": true, 3.npm install 4. npm install vue ...