我利用service进行后台录像,有视频文件生成,但是是无法播放的视频文件,不知道是程序里哪里有错,望各位高手指点一二,再次谢过啦~~~
public class recorder extends Service{ public static final int MEDIA_TYPE_IMAGE = 1;
public static final int MEDIA_TYPE_VIDEO = 2;
private Camera mCamera01;
private MediaRecorder mRecorder01;
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
} @Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
stop_camera();
mCamera01.stopPreview();
mCamera01.release();
mCamera01 = null;
    Toast.makeText(this,"STOP",Toast.LENGTH_SHORT).show();
} @Override
public void onStart(Intent intent, int startId) {
// TODO Auto-generated method stub
super.onStart(intent, startId);
init_camera();
}

private void init_camera()
  {
    Toast.makeText(this,"start",Toast.LENGTH_SHORT).show();
 //  mCamera01 = Camera.open();
      if(null == mCamera01)
         mCamera01 = Camera.open();
       mCamera01.stopPreview();
   mCamera01.unlock();
       mRecorder01 = new MediaRecorder();// 创建mRecorder对象  
       mRecorder01.setCamera(mCamera01);// 设置录制视频源为Camera(相机)           
       mRecorder01.setVideoSource(MediaRecorder.VideoSource.CAMERA); 
       mRecorder01.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
       
       mRecorder01.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));          
  //     mRecorder01.setPreviewDisplay(mSurfaceHolder01.getSurface()); 
       mRecorder01.setOutputFile(getOutputMediaFile(MEDIA_TYPE_VIDEO).toString()); 
       try {  
           // 准备录制  
           mRecorder01.prepare();  
           // 开始录制  
           mRecorder01.start(); 
       } catch (IllegalStateException e) {  
           // TODO Auto-generated catch block  
           e.printStackTrace();  
       } catch (IOException e) {  
           // TODO Auto-generated catch block  
           e.printStackTrace();  
       }
   
 }
private void stop_camera(){
if (mRecorder01 != null){
mRecorder01.stop();
mRecorder01.reset();
mRecorder01.release();
mRecorder01 = null;
mCamera01.lock();
}
}

private static File getOutputMediaFile(int type){
    File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
              Environment.DIRECTORY_DCIM), "Camera");
    if (! mediaStorageDir.exists()){
        if (! mediaStorageDir.mkdirs()){
            Log.d("mypictures", "failed to create directory");
            return null;
        }
    }
    // Create a media file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    File mediaFile;
    if (type == MEDIA_TYPE_IMAGE){
        mediaFile = new File(mediaStorageDir.getPath() + File.separator +
        "IMG_"+ timeStamp + ".jpg");
    } else if(type == MEDIA_TYPE_VIDEO) {
        mediaFile = new File(mediaStorageDir.getPath() + File.separator +
        "VID_"+ timeStamp + ".mp4");
    } else {
        return null;
    }     return mediaFile;
}}

解决方案 »

  1.   

    这是android的保护机制你调用camera时必须有一个surface view传下去用来预览的(后台就没有预览了),如果想实现必须提升APK权限,system/root都可以  如果可以在后台录像,那就方便了病毒程序,可以随时使用你的camera
      

  2.   

    我利用service进行后台录像,有视频文件生成,但是是无法播放的视频文件,不知道是程序里哪里有错你确定 你的视频文件生成了? 怀疑1 
    你将你生成的视频文件拖到电脑播放,是否可以播放?疑问2
      

  3.   

     以下内容为猜测
    mRecorder01.start(); 产生了 那个文件,但是 一般录制结束的时候才会回写信息,由于你没有Camera 其实 已开始录制的时候就报错了,你在你的异常处理的地方都打一下log。通过学习 我也是猜测,后台是无法获取到Camera的,所以说录像估计是不行。至于录音我没有搞过 不知道!~