当前位置:编程学习 > wap >>

Android MediaRecord 录像问题

Android中,我想使用MediaRecord录像,并让它在Service中实现。主要问题是它的预览画面,好像使用MediaRecord就一定要设置setPreviewDisplay(),否则就不能开始预览或录像。但是如果在Service中实例化SurfaceView的话,那么它的预览画面应该是不能在Activity上显示的吧?。这个我实验过了。
MediaRecord录像我已经在另外一个Thread中实现好了。但是我需要在Service中实现。不知道有没有什么好的方案。           还有一问题,使用Android parcelable 可以把一个类似于SurfaceView的包装到Intent并发给Service吗?还是只能传递自定义的简单Object?  --------------------编程问答-------------------- Who can give me some tips? Thank You! --------------------编程问答-------------------- 那你说camera的预览是怎么显示的画面呢? --------------------编程问答--------------------
引用 2 楼 yiyaaixuexi 的回复:
那你说camera的预览是怎么显示的画面呢?


camera=Camera.open();
    camera.setDisplayOrientation(90);
    recorder = new MediaRecorder(); 
camera.unlock();
recorder.setCamera(camera);

recorder.setPreviewDisplay( videoholder.getSurface());
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);  
//recorder.setVideoSize(465,615);   
//recorder.setVideoSize(100,100); 
recorder.setVideoFrameRate(24);   
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); 
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);          
recorder.setOutputFile(filePath);
recorder.prepare();
handler.postDelayed(task, 1000);
recorder.start();

这是我的源码..
关键是这句必须得要阿。recorder.setPreviewDisplay( videoholder.getSurface()); --------------------编程问答-------------------- recorder.setPreviewDisplay( videoholder.getSurface());如果注释掉这句,程序就报错了。如果把Record放到后台服务中,那么前台的videoholder.getSurface()怎么给传过去呢?(surfaceView只能在Activity中显示吧?) --------------------编程问答-------------------- surface是存放视频的一块缓存,surfaceview是用来被GUI系统间接控制surface使用的,surfaceview使用surface.holder接口控制surface。照着这个逻辑,那么我在录像时如果不进行预览(也就是不再前台看预览画面),那应该在后台就可以直接控制录像阿。不用预览来在后台录像,不知道有没有人实现过? --------------------编程问答-------------------- 没弄过!帮顶! --------------------编程问答-------------------- 我遇到一个跟楼主一样的问题,不知道楼主这个问题解决了没有,请教 --------------------编程问答--------------------
引用 7 楼 songjinn 的回复:
我遇到一个跟楼主一样的问题,不知道楼主这个问题解决了没有,请教


没有解决。使用录像时只能通过先预览打开它,然后再用其他Activity覆盖它,这是录像仍在继续,因为录像是另外线程。我把录像的launchmode设置为singleTask。但是再回到录像的Activity就看不到预览画面了,不知您有没解决这个问题? --------------------编程问答-------------------- 楼主碰到和你一样的问题 要做个后台录制的视频记录仪,目前都没有头绪,请问LZ是怎么解决的。不胜感激 --------------------编程问答-------------------- 后台录制的方法,貌似我在一个帖子中写过了,没有正规的方法,只能取巧,把surfaceview设置成1*1的。surfaceview呢,就用windowmanager的addview,设置一个浮动窗口,这样就脱离了activity的生命周期。自己搞一个service去控制surfaceview的转换 --------------------编程问答--------------------
引用 10 楼 hvk687 的回复:
后台录制的方法,貌似我在一个帖子中写过了,没有正规的方法,只能取巧,把surfaceview设置成1*1的。surfaceview呢,就用windowmanager的addview,设置一个浮动窗口,这样就脱离了activity的生命周期。自己搞一个service去控制surfaceview的转换

能否给个代码啊,我现在也遇到了同样的问题,不胜感激!!!! --------------------编程问答-------------------- 楼上有代码否,我也在头疼这个问题,能不能给我一份代码看看。 --------------------编程问答-------------------- 同求,我也遇到了此问题,高手们可否上传下代码? --------------------编程问答-------------------- 也遇到了同样的问题。。实在纠结。一定要调用setPreviewDisplay。蛋疼。。 --------------------编程问答-------------------- recorder.setPreviewDisplay( videoholder.getSurface());这句是必须要的,android后台录像需要在service(已验证)或在线程里面完成。

surfaceview是必须要有的,可以在service里面利用悬浮窗完成,我已经实现了 --------------------编程问答-------------------- 求代码啊  625937896@qq.com --------------------编程问答-------------------- 我也遇到这样问题,是手机版本原因,我换的好几个手机版本,
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,