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

解决方案 »

  1.   

    Who can give me some tips? Thank You!
      

  2.   

    那你说camera的预览是怎么显示的画面呢?
      

  3.   


    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());
      

  4.   

    recorder.setPreviewDisplay( videoholder.getSurface());如果注释掉这句,程序就报错了。如果把Record放到后台服务中,那么前台的videoholder.getSurface()怎么给传过去呢?(surfaceView只能在Activity中显示吧?)
      

  5.   

    surface是存放视频的一块缓存,surfaceview是用来被GUI系统间接控制surface使用的,surfaceview使用surface.holder接口控制surface。照着这个逻辑,那么我在录像时如果不进行预览(也就是不再前台看预览画面),那应该在后台就可以直接控制录像阿。不用预览来在后台录像,不知道有没有人实现过?
      

  6.   


    没有解决。使用录像时只能通过先预览打开它,然后再用其他Activity覆盖它,这是录像仍在继续,因为录像是另外线程。我把录像的launchmode设置为singleTask。但是再回到录像的Activity就看不到预览画面了,不知您有没解决这个问题?
      

  7.   

    后台录制的方法,貌似我在一个帖子中写过了,没有正规的方法,只能取巧,把surfaceview设置成1*1的。surfaceview呢,就用windowmanager的addview,设置一个浮动窗口,这样就脱离了activity的生命周期。自己搞一个service去控制surfaceview的转换
      

  8.   

    也遇到了同样的问题。。实在纠结。一定要调用setPreviewDisplay。蛋疼。。
      

  9.   

    recorder.setPreviewDisplay( videoholder.getSurface());这句是必须要的,android后台录像需要在service(已验证)或在线程里面完成。surfaceview是必须要有的,可以在service里面利用悬浮窗完成,我已经实现了
      

  10.   

    求代码啊  [email protected]