Android MediaRecorder制作旋转视频
我一直在尝试让MediaRecorder按照官方示例工作,虽然我能够制作一个文件,但它是顺时针旋转90度的 现在我在纵向模式下尝试这个,并且确实将previewsurface旋转了90度,并将其锁定到纵向模式 我不知道如何解决这个问题,并得到一个面向肖像的视频,并尝试了无数的解决方案与此相关的主题都没有用 代码: 我尝试了各种注释方法的组合,但并没有结果(设置特定的videosize会导致“尝试删除损坏的文件”错误,所以我就不去管它了)。。。 顺便说一句,我故意忽略音频源,因为我只需要视频(我以后需要拼接音频,实际上也不知道从哪里开始)Android MediaRecorder制作旋转视频,android,android-mediarecorder,Android,Android Mediarecorder,我一直在尝试让MediaRecorder按照官方示例工作,虽然我能够制作一个文件,但它是顺时针旋转90度的 现在我在纵向模式下尝试这个,并且确实将previewsurface旋转了90度,并将其锁定到纵向模式 我不知道如何解决这个问题,并得到一个面向肖像的视频,并尝试了无数的解决方案与此相关的主题都没有用 代码: 我尝试了各种注释方法的组合,但并没有结果(设置特定的videosize会导致“尝试删除损坏的文件”错误,所以我就不去管它了)。。。 顺便说一句,我故意忽略音频源,因为我只需要视频(我以
非常感谢您提供任何提示、想法或建议!您不能旋转视频。只能旋转预览表面或静态图像。但不能旋转视频流。哦,干杯……保存文件后,我是否可以旋转文件?或者添加自定义音频曲目?(我只需要向正确的方向推动)当然你可以对其进行后处理,但请注意,这不是一项轻松的任务-旋转可能需要一些时间(甚至不是实时)计算能力,可能会消耗电池,但是的,这是可行的。只需在谷歌上搜索“java视频后处理”或“视频效果”或“重新编码”等。再次感谢,我会接受你的回答,希望我能处理:)
public class CameraRecorder {
private Camera cam;
private MediaRecorder mMediaRecorder;
private CameraPreview mPreview;
private static Context mContext;
public CameraRecorder(CameraPreview preview, Context context){
mPreview = preview;
cam = mPreview.getCamera();
//cam.getParameters().setRotation(0);
mContext = context;
}
public boolean prep(){
mMediaRecorder = new MediaRecorder();
//mMediaRecorder.setOrientationHint(90);
// Step 1: Unlock and set camera to MediaRecorder
cam.unlock();
mMediaRecorder.setCamera(cam);
// Step 2: Set sources
//mMediaRecorder.setAudioSource(mContext.openFileInput());
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
// Step 3: Set a CamcorderProfile (requires API Level 8 or higher)
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
//mMediaRecorder.setVideoSize(mPreview.getMeasuredWidth(), mPreview.getMeasuredHeight());
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
//mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_LOW));
// Step 4: Set output file
mMediaRecorder.setOutputFile(getOutputMediaFile().toString());
// Step 5: Set the preview output
mMediaRecorder.setPreviewDisplay(mPreview.getHolder().getSurface());
// Step 6: Prepare configured MediaRecorder
try {
mMediaRecorder.prepare();
} catch (IllegalStateException e) {
Log.d("Exception", "IllegalStateException preparing MediaRecorder: " + e.getMessage());
releaseMediaRecorder();
return false;
} catch (IOException e) {
Log.d("Exception", "IOException preparing MediaRecorder: " + e.getMessage());
releaseMediaRecorder();
return false;
} catch (Exception e) {
Log.d("Exception", "Exception preparing MediaRecorder: " + e.getMessage());
return false;
}
return true;
}
public static File getOutputMediaFile(){
File mediaFile;
mediaFile = new File(mContext.getCacheDir() + File.separator + "vid.mp4");
return mediaFile;
}
public void releaseMediaRecorder(){
if (mMediaRecorder != null) {
mMediaRecorder.reset(); // clear recorder configuration
mMediaRecorder.release(); // release the recorder object
mMediaRecorder = null;
cam.lock(); // lock camera for later use
}
}
public void startRecording(){
mMediaRecorder.start();
}
public void stopRecording(){
try {
mMediaRecorder.stop(); // stop the recording
releaseMediaRecorder(); // release the MediaRecorder object
cam.lock();
} catch (Exception e) {
Log.d("Exception","Exiting with exception: " + e.getMessage());
}
}
}