CrushedGames
- Forum-Beiträge: 1
26.12.2015, 21:05:22 via Website
26.12.2015 21:05:22 via Website
Hallo, mein Problem:
Ich zeichne Videos mit dieser Klasse ohne Preview von einem Service aufgelöst auf.
Das funktioniert auch gut allerdings sind die Videos Nach oben und unten verzerrt.
Was kann ich tun?
Screenshot von einem Video als Beispiel (Der NFC Sticker in dem Video sollte genau Quadratisch sein!)
[Leider kann ich keine Links Posten]
Auf dem Bild sieht man einen eigentlich Quadratischen Sticker der Nach unten und oben gestreckt.
Ich mit das Video auch auf dem PC und anderen Mobile Playern angeschaut. Gleiches Ergebnis.
Die Klasse:
import android.content.Context;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.media.CamcorderProfile;
import android.media.MediaRecorder;
import android.os.CountDownTimer;
import android.os.Environment;
import android.text.format.DateFormat;
import android.view.Gravity;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.WindowManager;
import android.widget.Toast;
import java.io.File;
import java.io.IOException;
import java.util.Date;
import de.cg.video.R;
public class VideoRecorder implements SurfaceHolder.Callback{
private WindowManager windowManager;
private SurfaceView surfaceView;
SurfaceHolder holder;
private Camera camera = null;
private MediaRecorder mediaRecorder = null;
boolean debug,recording,minVideoLengthIsReached;
float minVideoLength=1f; //IN SECONDS
VideoService self;
public VideoRecorder(boolean debug,VideoService self)
{
//AUTO CALLED IF CREATED
this.debug=debug;
this.self=self;
windowManager = (WindowManager) self.getSystemService(Context.WINDOW_SERVICE);
surfaceView = new SurfaceView(self.getApplicationContext());
WindowManager.LayoutParams layoutParams = new WindowManager.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.setZOrderOnTop(true);
surfaceView.getHolder().addCallback(this);
}
public void onDestroy()
{
//MUST CALLED ON DESTROY
surfaceView.getHolder().removeCallback(this);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
this.holder = holder;
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
public void start()
{
if(!recording)recording=true;
else return;
//START RECORDING
if(debug) Toast.makeText(self.getApplicationContext(),"START RECORDING",Toast.LENGTH_SHORT).show();
setupMediaRecorder();
mediaRecorder.start();
minVideoLengthIsReached=false;
new CountDownTimer((int)minVideoLength*1000,(int)minVideoLength*1000) {
@Override
public void onTick(long millisUntilFinished) {
}
public void onFinish() {
minVideoLengthIsReached=true;
}
}.start();
}
public void setupMediaRecorder()
{
mediaRecorder = new MediaRecorder();
camera = Camera.open();
camera.unlock();
mediaRecorder.setCamera(camera);
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
//SETTINGS
mediaRecorder.setPreviewDisplay(holder.getSurface());
mediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));
mediaRecorder.setOrientationHint(90);
//SETTINGS
File file = new File(Environment.getExternalStorageDirectory()+"/Video/");
if(!file.exists())
file.mkdirs();
mediaRecorder.setOutputFile(Environment.getExternalStorageDirectory() + "/Video/Video " + DateFormat.format("yyyy-MM-dd_kk-mm-ss", new Date().getTime()) + ".mp4");
try {
mediaRecorder.prepare();
} catch (IOException e) {
e.printStackTrace();
}
}
public void stop()
{
if(recording)recording=false;
else return;
if(minVideoLengthIsReached==false) {
recording = true;
return;
}
//STOP RECORDING
if(debug) Toast.makeText(self.getApplicationContext(),"STOP RECORDING",Toast.LENGTH_SHORT).show();
try {
mediaRecorder.stop();
}catch (Exception e)
{
e.printStackTrace();
Toast.makeText(self.getApplicationContext(),self.getString(R.string.toast_RecordingError),Toast.LENGTH_LONG).show();
recording=false;
}
resetRecorder();
}
private void resetRecorder()
{
//RESET RECORDER AFTER RECORDING
mediaRecorder.reset();
mediaRecorder.release();
camera.release();
}
}
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.