Tuesday, 15 September 2015

android - Record video and get frames in real time at the same time -



android - Record video and get frames in real time at the same time -

i found questions this. possible, solutions have not worked me , others not possible.

i have code record mp4:

import java.io.ioexception; import android.app.activity; import android.content.pm.activityinfo; import android.media.camcorderprofile; import android.media.mediarecorder; import android.os.bundle; import android.os.environment; import android.view.surfaceholder; import android.view.surfaceview; import android.view.view; import android.view.view.onclicklistener; public class mainactivity extends activity implements onclicklistener, surfaceholder.callback { mediarecorder recorder; surfaceholder holder; boolean recording = false; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setrequestedorientation(activityinfo.screen_orientation_portrait); recorder = new mediarecorder(); initrecorder(); setcontentview(r.layout.activity_main); surfaceview cameraview = (surfaceview) findviewbyid(r.id.surfaceview1); holder = cameraview.getholder(); holder.addcallback(this); holder.settype(surfaceholder.surface_type_push_buffers); cameraview.setclickable(true); cameraview.setonclicklistener(this); } private void initrecorder() { recorder.setaudiosource(mediarecorder.audiosource.default); recorder.setvideosource(mediarecorder.videosource.default); camcorderprofile cphigh = camcorderprofile .get(camcorderprofile.quality_high); recorder.setprofile(cphigh); recorder.setoutputfile(environment.getexternalstoragedirectory().getpath() + "/video.mp4"); recorder.setmaxduration(5 * 1000); // 50 seconds recorder.setmaxfilesize(5 * 1000000); // approximately 5 megabytes } private void preparerecorder() { recorder.setpreviewdisplay(holder.getsurface()); seek { recorder.prepare(); } grab (illegalstateexception e) { e.printstacktrace(); finish(); } grab (ioexception e) { e.printstacktrace(); finish(); } } public void onclick(view v) { if (recording) { recorder.stop(); recording = false; // let's initrecorder can record 1 time again initrecorder(); preparerecorder(); } else { recording = true; recorder.start(); } } public void surfacecreated(surfaceholder holder) { preparerecorder(); } public void surfacechanged(surfaceholder holder, int format, int width, int height) { } public void surfacedestroyed(surfaceholder holder) { if (recording) { recorder.stop(); recording = false; } recorder.release(); finish(); } }

and other frames in real time:

import java.io.ioexception; import java.util.iterator; import java.util.list; import android.app.activity; import android.content.pm.activityinfo; import android.graphics.imageformat; import android.hardware.camera; import android.hardware.camera.errorcallback; import android.hardware.camera.size; import android.os.bundle; import android.util.log; import android.view.surfaceholder; import android.view.surfaceview; import android.view.surfaceholder.callback; public class mainactivity extends activity { surfaceview mvideocaptureview; photographic camera mcamera; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); mvideocaptureview = (surfaceview) findviewbyid(r.id.surfaceview1); setrequestedorientation(activityinfo.screen_orientation_landscape); surfaceholder videocaptureviewholder = mvideocaptureview.getholder(); videocaptureviewholder.settype(surfaceholder.surface_type_push_buffers); videocaptureviewholder.addcallback(new callback() { public void surfacedestroyed(surfaceholder holder) { stopvideo(); } public void surfacecreated(surfaceholder holder) { startvideo(); } public void surfacechanged(surfaceholder holder, int format, int width, int height) { } }); } private void startvideo() { //open photographic camera surfaceholder videocaptureviewholder = null; seek { mcamera = camera.open(); } grab (runtimeexception e) { log.e("cameratest", "camera open failed"); return; } mcamera.seterrorcallback(new errorcallback() { public void onerror(int error, photographic camera camera) { } }); //get params camera.parameters parameters = mcamera.getparameters(); //get frame rate int[] minframerate = {90000,90000}; list<int[]> supportedpreviewfps=parameters.getsupportedpreviewfpsrange(); iterator<int[]> supportedpreviewfpsiterator=supportedpreviewfps.iterator(); while(supportedpreviewfpsiterator.hasnext()){ int[] tmprate=supportedpreviewfpsiterator.next(); if(tmprate[0]<minframerate[0]) { minframerate[0] = tmprate[0]; minframerate[1] = tmprate[1]; } } //set frame rate parameters.setpreviewfpsrange(minframerate[0],minframerate[1]); log.i("info", "frame rate set to: " + minframerate[0] + ','+ minframerate[1]); //get image size list<size> supportedpreviewsizes=parameters.getsupportedpreviewsizes(); iterator<size> supportedpreviewsizesiterator=supportedpreviewsizes.iterator(); while(supportedpreviewsizesiterator.hasnext()){ size tmpsize=supportedpreviewsizesiterator.next(); log.v("cameratest","supportedpreviewsize.width = "+tmpsize.width+"supportedpreviewsize.height = "+tmpsize.height); } //set params mcamera.setparameters(parameters); if ( mvideocaptureview!=null) videocaptureviewholder = mvideocaptureview.getholder(); seek { mcamera.setpreviewdisplay(videocaptureviewholder); } grab (throwable t) { log.e("error","mcamera.setpreviewdisplay(videocaptureviewholder) fail"); } //start photographic camera size previewsize=mcamera.getparameters().getpreviewsize(); int databuffersize=(int)(previewsize.height*previewsize.width* (imageformat.getbitsperpixel(mcamera.getparameters().getpreviewformat())/8.0)); mcamera.addcallbackbuffer(new byte[databuffersize]); mcamera.addcallbackbuffer(new byte[databuffersize]); mcamera.addcallbackbuffer(new byte[databuffersize]); mcamera.setpreviewcallbackwithbuffer(new camera.previewcallback() { public synchronized void onpreviewframe(byte[] data, photographic camera camera) { seek { camera.addcallbackbuffer(data); }catch (exception e) { log.e("cameratest", "addcallbackbuffer error"); } } }); seek { mcamera.startpreview(); } grab (throwable e) { mcamera.release(); mcamera = null; return; } } private void stopvideo() { log.i("stopvideo","ok"); if(null==mcamera) return; seek { mcamera.stoppreview(); mcamera.setpreviewdisplay(null); mcamera.setpreviewcallbackwithbuffer(null); mcamera.release(); } grab (ioexception e) { e.printstacktrace(); return; } mcamera = null; } public void finish(){ stopvideo(); super.finish(); } @override public void onbackpressed() { stopvideo(); super.onbackpressed(); }; }

this lastly code have funcion "onpreviewframe" frames in real time.

how can include function first piece of code?

i've tried create using photographic camera object, if camara open , starts recording mp4 fails because can not both @ once

android

No comments:

Post a Comment