屏幕录制源码
⑴ Android实现录屏MediaProjection以及相关异常解决
需要实现一个手机的录屏功能,于是从网上找了些相关资料和源码,发现跑不起来,于是开始bug,发现坑还是很多的,这里记录一下实现过程和一些些遇到的异常以及一个我调整完可以跑的Demo。
首先在AndroidManifest中静态配置权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
然后在Activity中动态申请
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE}, STORAGE_REQUEST_CODE);
}
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.RECORD_AUDIO)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[] {Manifest.permission.RECORD_AUDIO}, AUDIO_REQUEST_CODE);
}
因为项目中需要用到一个自定义的Application,所以要需要配置一个全局的Application,同样在AndroidManiest中在application添加自定义的类名,如果在里面启动服务了也要一并配置。
<application
android:name=".RecordApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</application>
然后可以使用封装好的实现其录屏功能的service,这个封装类是网上找的,看很多人在用,我解决了一些异常,并根据自己需求修改了一下。
其中主要异常有:
1.mediaRecorder报空指针,解决方案,在声明的时候声明为静态
private static MediaRecorder mediaRecorder;
2.mediaRecorder.start()方法异常,在每次调用stop时要先调用
mediaRecorder.stop();
mediaRecorder.release();
两个方法,并将
mediaRecorder = null。
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC)异常,这里是设置音频源,可尝试将参数改为
MediaRecorder.AudioSource.DEFAULT
4.stop方法异常,如果是running状态不正常,可能是其状态丢失,需要将声明的running也改为静态的
0.增加需求,在生成视频时大部分人都会根据mediaRecorder.setVideoSize(width, height);方法来定死视频大小,导致一些手机会解析不了,或者是视频比屏幕小,这里提供一种根据屏幕大小动态设置视频大小的方法。
这里就要用到我们之前定义的全局的Application,然后调用getInstance()获取其实例,
然后通过
DisplayMetrics dm = RecordApplication.getInstance().getResources().getDisplayMetrics();
private int width = dm.widthPixels;
private int height = dm.heightPixels;
private int dpi = dm.densityDpi;
来获取屏幕的长、宽和dpi的值,这里不用WindowsManager方法是因为我是在非Activity去获取屏幕长宽的,所以用了getDisplayMetrics();
这样这个功能基本就是实现了。
Demo地址: https://github.com/han103070/Screencap
⑵ 如何用易语言编写出屏幕录像软件
上面的代码我也没测试了,应该是不行的,西西。
害我还注册个用户,第一次写ftp更新,哈。测试成功~
——————————————————————————————
连接FTP服务器 (“204.45.67.202”, “59354”, “123456”, 21, )
FTP文件下载 (“/数据库.edb”, 取特定目录 (3) + “\数据库.edb”, )
——————————————————————————————
你把上面的代码添加到更新按钮,看你是怎么想的,呵呵,加进去就对了。
还有,取特定目录 (3) + “\数据库.edb” 这个,看你要不要改为 取运行目录() + “\数据库.edb”
因为你的数据库和程序放在一起,不下载到运行目录,还要改代码。
注意我写的和你贴出来的代码的不同之处、
拜拜~
⑶ 源码录制最清晰吗
会清晰一点。
有一个极限。就是说不能大于屏幕录象区域本身的分辨率,一般情况下分辨率还是描述了大小,至于清晰度要看压缩算法。就是说要看生成的片子的码率,流畅度看桢率。
⑷ Android 5.0+ 屏幕录制实现
Android 从 4.0 开始就提供了手机录屏方法,但是需要 root 权限,比较麻烦不容易实现。但是从 5.0 开始,系统提供给了 app 录制屏幕的一系列方法,不需要 root 权限,只需要用户授权即可录屏,相对来说较为简单。本文是在参考了网络上其他录屏资料后完成的, 感谢 。以下将介绍开发录屏功能的一系列步骤以及实现过程中所遇到的一些需要注意的事项。
因为录制用到麦克风,所以需要加上 AUDIO 权限,
如果开发的 app targetApi 在 6.0 以上时,还需要动态获取权限。
这里先介绍 MediaProjectionManager , MediaProjectionManager 是系统提供的一种服务,当我们拿到这个服务对象,可以创建一个 Intent ,通过这个 Intent 可以启动一个弹框样式的 Activity,如果用户授权了,那我们便可以继续下一步屏幕录制。需要说明的是,Intent 是去启动另一个 Activity 的,有极少极少的机型是没有对应的授权Activity 的,所以这里需要多加判断,防止应用奔溃。
即使用户授权了,同意录制操作,仍然需要捕获异常,因为有可能会出现这样一种情况,就是用户在同意录屏的时候系统也正在录屏,录屏操作冲突了。
这一步是整个录屏操作最为关键的一步!我们初始化了 MediaRecorder,设置了是否录上声音、录屏文件格式、录屏文件路径、音视频的编码器、比特率、视频帧率等
然后将在步骤 3 中的 resultCode 以及 data 作为必要的参数通过 MediaProjectionManager 创建 VirtualDisplay。VirtualDisplay 可以理解为虚拟的呈现器,它可以捕获屏幕上的内容,并将其捕获的内容渲染到 Surface 上(Surace 由 MediaRecorder 提供,通过 getSurface() 方法得到),MediaRecorder 再进一步将其封装处理为 Mp4 文件。
经过以上步骤 prepare 之后,当再次调用 MediaRecorder.start() 就可以开始录屏了,这里同意也需要注意的时,调用 start() 方法开始录屏之后,不能立即调用 stop()方法停止录屏,否则会奔溃。测试在测试录屏功能时立马停止录屏,应用奔溃,一直找不到原因。直到看到了源码( API 26 )里的注释
所以为了反正奔溃,在 stop 的时候捕获异常,并且置空 MediaRecorder,下次录屏的时候再重新生成 MediaRecorder。
由于知识水平有限,难免有错误遗漏,欢迎指正!项目地址为 屏幕录制
⑸ 如何用VB6.0做屏幕录像软件
用屏幕录像专家破解版
