安卓 MediaRecorder 制作旋转视频

3

我一直在尝试按照官方示例使用MediaRecorder工作,尽管我能够创建一个文件,但它被顺时针旋转了90度...

现在我正在尝试在纵向模式下进行操作,我已经将预览表面旋转了90度并锁定为纵向模式...

我不知道如何修复这个问题并获得朝向纵向的视频,我已经尝试了与此主题相关的众多解决方案,但都无济于事...

代码:

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());
    }



}



}

我尝试了各种不同的注释方法,但没有结果(设置特定的视频大小会导致“尝试删除损坏的文件”错误,所以我将其忽略了)......顺便说一句,我故意忽略了音频源,因为我只需要视频(稍后需要拼接音频,而且我也不知道从哪开始)。
非常感谢任何提示、想法或指针!
1个回答

1

您无法旋转视频。只能旋转预览界面或静态图像,而不能旋转视频流。


哦,谢谢...我能在保存文件后旋转它吗?也许可以添加自定义音轨?(只需要一个正确的方向指引) - user1504495
当然你可以进行后期处理,但请注意这不是轻松的任务——旋转可能需要一些时间(甚至不是实时)的计算能力,并且可能会消耗电池,但是,它是可行的。只需在谷歌上搜索“Java视频后处理”、“视频效果”或“重新编码”等即可。 - Marcin Orlowski
1
再次感谢,我会接受你的答案并希望我能够成功 :) - user1504495

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接