[英]Screen Recorder in Android Programmactically, not Screen shots
我想使该应用程序像“ EASY屏幕录像机”。 我必须从哪里开始,因为我搜索了很多东西,但没有找到开始的链接。 有任何用于创建屏幕录像机的API而不是屏幕截图。 我不想使用javacv从屏幕截图中创建视频。 我只希望用户启动该应用程序,然后单击“开始录制”按钮,然后用户在移动设备上所做的一切都会记录下来。
1)在Android中是否有针对此的任何API。
2)如何在android中创建屏幕录像机应用程序。
3)android中没有任何api,请参考其他api,以便可以在android中使用。
我进行了大量搜索,但仍然无法创建录音应用。 我有一个android应用程序,其中我添加了在特定时间之后使用处理程序拍摄屏幕快照的代码,最后使用javacv创建了视频,但我不喜欢,因为为此我必须在每个应用程序中编写代码,当前活动的屏幕截图,最后创建视频。
EASY屏幕录像机开发人员如何创建此应用程序? 他们使用了哪些API。 我要创建此应用程序的克隆。
抱歉,您的答案很晚,但是这里有一个有效的代码。 适用于Lollipop
及以上
private VirtualDisplay mVirtualDisplay;
private MediaRecorder mMediaRecorder;
private MediaProjection mMediaProjection;
private MediaProjectionCallback callback;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MediaProjectionManager projectionManager = (MediaProjectionManager)
context.getSystemService(Context.MEDIA_PROJECTION_SERVICE);
mMediaProjection.registerCallback(callback, null);
initRecorder();
mMediaRecorder.prepare();
mVirtualDisplay = createVirtualDisplay();
mMediaRecorder.start();
}
public void initRecorder() {
path = "/sdcard/Record/video" + ".mp4";
recId = "capture-" + System.currentTimeMillis() + ".mp4";
File myDirectory = new File(Environment.getExternalStorageDirectory(), "Record");
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mMediaRecorder.setVideoEncodingBitRate(MainFragment.bitRate);
mMediaRecorder.setVideoFrameRate(30);
mMediaRecorder.setVideoSize(MainFragment.DISPLAY_WIDTH,
MainFragment.DISPLAY_HEIGHT);
mMediaRecorder.setOutputFile(path);
}
private VirtualDisplay createVirtualDisplay() {
return mMediaProjection.createVirtualDisplay("MainActivity",
MainFragment.DISPLAY_WIDTH, MainFragment.DISPLAY_HEIGHT, MainFragment.screenDensity,
DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
mMediaRecorder.getSurface(), null /*Callbacks*/, null /*Handler*/);
}
public class MediaProjectionCallback extends MediaProjection.Callback {
@Override
public void onStop() {
mMediaRecorder.stop();
// mMediaRecorder.reset();
mMediaRecorder.release();
mMediaProjection.unregisterCallback(callback);
mMediaProjection = null;
mMediaRecorder = null;
}
在Per Android 5.0中,您将能够通过MediaProjection API捕获屏幕内容,而不必植根设备。尝试在SurfaceView上进行投影并从那里进行记录。
Android没有提供任何公开帧缓冲区的API,您需要启动设备,并可以使用来自http://code.google.com/p/fastdroid-vnc/的一些源代码来获取原始帧缓冲区,然后进行记录它。
请记住,您需要将设备植根以执行此操作。
使用android kitkat的最简单方法是使用ADB screenrecord命令。
解决方法很少-不需要您启动设备。
如果要为您的应用程序创建演示,则可以使用模拟器或Bluestack以及桌面屏幕录像机仅记录模拟器。
如果您需要在实际的手机上显示正在使用的应用程序,则可以使用其他相机记录正在使用的应用程序。
如果您必须捕获屏幕并可以将电话挂接到计算机,则可以以更快的速度从桌面上获取电话屏幕的屏幕截图(与Dalvik Debug Monitor Device>屏幕捕获相同),然后合并图像成电影。
如果必须创建一个应用程序,则必须探索NDK 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.