android录制播放器视频无法播放,android 后台录像 视频无法播放 ?

我利用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;

}

}

Android中,实现后台录像可以通过使用Service和MediaRecorder类来实现。 首先,需要创建一个后台Service,在Service的onCreate()方法中进行初始化工作,例如创建一个MediaRecorder实例并设置相关参数,例如录制视频的分辨率、帧率、编码格式等。同时,还要在onCreate()方法中获取相机权限,并在onDestroy()方法中对MediaRecorder进行释放。 接下来,在Service的onStartCommand()方法中实现具体的录像逻辑。可以先通过Camera类获取到相机实例,并使用相机的setPreviewDisplay()方法将相机预览界面与MediaRecorder绑定,然后调用MediaRecorder的start()方法开始录制视频。 为了实现后台录像,可以将Service设置为前台服务,即使用startForeground()方法将Service置于前台,同时显示一个通知。这样可以避免Android系统在资源有限时终止后台录像服务。 最后,可以在Service的onDestroy()方法中调用MediaRecorder的stop()方法停止录像,并进行资源释放和一些清理工作。 需要注意的是,由于安卓系统的限制,从Android 10开始,应用在后台录像的时长受到了限制,最多只能录制5分钟。为了延长后台录像的时间,可以将应用设置为前台服务,并在通知中显示一个进度条,模拟长时间录像的效果。 综上所述,通过在Service中使用MediaRecorder类,结合前台服务的设置,可以在Android中实现后台录像功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值