Video Capture With Background Audio On Android
I am trying to create an app which record videos by playing a background music. The expected output will be the captured video with the above mentioned music. I am not sure whether
Solution 1:
my solution is fine, try it:
Service android:
import java.util.Calendar;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.hardware.Camera.CameraInfo;
import android.media.CamcorderProfile;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.view.Gravity;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
publicclassBackgroundVideoRecorderextendsServiceimplementsSurfaceHolder.Callback {
private WindowManager windowManager;
private SurfaceView surfaceView;
privateCameracamera=null;
privateMediaRecordermediaRecorder=null;
intcontTime=0, duracaoGravacao = 30; //interval in seconds to record videoprivateclassthreadimplementsRunnable {
publicvoidrun() {
contTime++;
if (contTime >= duracaoGravacao) {
StopService();
}
tick_Handler.postDelayed(tick_thread, 1000);
}
}
Handler tick_Handler;
thread tick_thread;
Preferences pref;
@OverridepublicvoidonCreate() {
windowManager = (WindowManager) this
.getSystemService(Context.WINDOW_SERVICE);
surfaceView = newSurfaceView(this);
LayoutParamslayoutParams=newWindowManager.LayoutParams(1, 1,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
PixelFormat.TRANSLUCENT);
layoutParams.gravity = Gravity.LEFT | Gravity.TOP;
windowManager.addView(surfaceView, layoutParams);
surfaceView.getHolder().addCallback(this);
tick_Handler = newHandler();
tick_thread = newthread();
VIDEO_RECORDER_FOLDER = new_Path().getPathVideo();
}
@OverridepublicvoidonStart(Intent intent, int startId) {
tick_Handler.post(tick_thread);
}
// Method called right after Surface created (initializing and starting// MediaRecorder)@OverridepublicvoidsurfaceCreated(SurfaceHolder surfaceHolder) {
booleanfound=false;
inti=0;
try {
for (i = 0; i < Camera.getNumberOfCameras(); i++) {
Camera.CameraInfonewInfo=newCamera.CameraInfo();
Camera.getCameraInfo(i, newInfo);
if (newInfo.facing == CameraInfo.CAMERA_FACING_FRONT) {
found = true;
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
if (found) {
camera = Camera.open(i);
} else {
camera = Camera.open();
}
CalendarlCDateTime= Calendar.getInstance();
Stringt= String.valueOf(lCDateTime.getTimeInMillis());
nomeArquivo = "hire_me_now_" + t + ".mp4";
nomeArquivo = nomeArquivo.replace(" ", "_").replace(":", "_")
.replace("-", "_");
StringcaminhoArquivo= VIDEO_RECORDER_FOLDER + "/" + nomeArquivo;
mediaRecorder = newMediaRecorder();
camera.unlock();
mediaRecorder.setPreviewDisplay(surfaceHolder.getSurface());
mediaRecorder.setCamera(camera);
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mediaRecorder.setProfile(CamcorderProfile
.get(CamcorderProfile.QUALITY_QVGA));
mediaRecorder.setVideoFrameRate(15);
mediaRecorder.setOutputFile(caminhoArquivo);
try {
mediaRecorder.prepare();
} catch (Exception e) {
e.printStackTrace();
}
mediaRecorder.start();
}
// Stop recording and remove SurfaceView@OverridepublicvoidonDestroy() {
mediaRecorder.stop();
mediaRecorder.reset();
mediaRecorder.release();
camera.lock();
camera.release();
windowManager.removeView(surfaceView);
}
protectedvoidStopService() {
try {
this.stopSelf();
} catch (Exception e) {
e.printStackTrace();
}
}
@OverridepublicvoidsurfaceChanged(SurfaceHolder surfaceHolder, int format,
int width, int height) {
}
@OverridepublicvoidsurfaceDestroyed(SurfaceHolder surfaceHolder) {
}
@Overridepublic IBinder onBind(Intent intent) {
returnnull;
}
}
Post a Comment for "Video Capture With Background Audio On Android"