【问题标题】:Record video by from camera without mirror it like snap chat从相机录制视频,无需镜像,就像 snapchat
【发布时间】:2016-12-20 06:46:29
【问题描述】:

我正在开发社交移动应用。它可以选择为个人资料录制视频。我的录像机的问题是它反映了实际的视频。我知道这是默认行为,但希望它像 sanpchat 一样工作。

预览

录制和播放后

这是我的代码

// return camera instance when activity open first time
private Camera getCameraInstance() {
    // TODO Auto-generated method stub
    releaseCamera();
    releaseMediaRecorder();
    Camera c = null;
    try {
        cameraId = findFrontFacingCamera();
        if (cameraId < 0) {
            cameraId = findBackFacingCamera();
        }
        c = Camera.open(cameraId);

        // setCameraDisplayOrientation(this,cameraId,c);
        //setCameraDisplayOrientation(this, cameraId, c);
        c.setDisplayOrientation(90);
    } catch (Exception e) {
        // Camera is not available (in use or does not exist)
    }
    return c; // returns null if camera is unavailable
}
// return __cameraPreview Id 1 to open front camera
private int findFrontFacingCamera() { 
    int cameraId = -1;
    // Search for the front facing camera
    int numberOfCameras = Camera.getNumberOfCameras();
    for (int i = 0; i < numberOfCameras; i++) {
        Camera.CameraInfo info = new Camera.CameraInfo();
        Camera.getCameraInfo(i, info);
        if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
            cameraId = i;
            setOrientationHint = 270 ;
            cameraFront = true;
            break;
        }
    }
    return cameraId;
}
// prepare and start recording
private boolean prepareMediaRecorder() {
    mediaRecorder = new MediaRecorder();
    try {
        myCamera.unlock();
    } catch (Exception e) {
        e.printStackTrace();
    }
    mediaRecorder.setCamera(myCamera);

    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
    //mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);

    if (cameraPreview.getVideoSize() != null) {
        mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        mediaRecorder.setOutputFile(saveUrl);

        mediaRecorder.setVideoEncodingBitRate(10000000);
        mediaRecorder.setVideoFrameRate(30);
        mediaRecorder.setVideoSize(cameraPreview.getVideoSize().width, cameraPreview.getVideoSize().height);

        mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
        mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
    } else {
        CamcorderProfile cp = CamcorderProfile.get(cameraId, CamcorderProfile.QUALITY_HIGH);
        mediaRecorder.setProfile(cp);
    }
    Log.e(TAG, "Video profile CamcorderProfile.QUALITY_HIGH: " + "cp.quality:" + cp.quality
            + ", cp.videoFrameWidth:" + cp.videoFrameWidth
            + ", cp.videoFrameHeight:" + cp.videoFrameHeight);

    mediaRecorder.setMaxDuration(MAX_VIDEO_LENGTH);
    mediaRecorder.setOrientationHint(setOrientationHint);
    try {
        mediaRecorder.prepare();

    } catch (IllegalStateException | IOException e) {
        e.printStackTrace();
        releaseMediaRecorder();
        return false;
    }
    mediaRecorder.start();
    return true;
}

我希望它应该与播放中的预览相同。 Sanpchat 已经在做同样的事情,在此先感谢。

【问题讨论】:

  • 什么是cameraPreview
  • 它是SurfaceView的子类
  • 使用TextureViewsetTransform(Matrix transform)
  • 它会改变预览,它也会改变录制的视频吗?
  • 仅供预览

标签: android android-camera android-mediaplayer android-mediarecorder video-recording


【解决方案1】:

您已在此处将前置摄像头的方向设置为 270,

setOrientationHint = 270 ;

相反,我建议将方向设置为 180 度,如下所示,

setOrientationHint = (info.orientation - 180 + 360) % 360;

这也会改变整个视频文件。

【讨论】:

    【解决方案2】:

    您可以使用 TextureView,文档 here 并在 X 轴上应用 -1 比例的变换,函数 here

    【讨论】:

    • 虽然这是正确的,但 Stack Overflow 上的仅链接答案是 not considered good practise。问题“答案”实际上应该包含一个答案,或者至少是一个内容摘要以及它与问题的关系。
    • 我很抱歉,我认为这是正确的,因为链接包含易于理解的代码。
    • 它会改变预览,它也会改变录制的视频吗?
    • 嗨,我按照您和许多其他 SO 线程的建议尝试了缩放变换,但这只会影响预览,而不影响写入文件的视频。你知道其他解决方案吗?
    【解决方案3】:

    最后对我来说没什么用,我需要在提交视频的 api 端进行。上传视频后,我使用ffmpeg 垂直翻转它并在元数据中设置角度。这是执行此操作的命令。

    ffmpeg -i VIDEO_PATH -vf "vflip" -metadata:s:v rotate=180 DEST_PATH
    

    【讨论】:

    • 感谢您的回答。我真的陷入了这个问题。我没有找到翻转视频的方法
    • 这个 ffmpeg 算子处理时间太长了,你有没有其他解决办法?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 2016-09-23
    • 2019-12-30
    • 1970-01-01
    • 2018-03-30
    相关资源
    最近更新 更多