6

Tôi đang làm việc trên ứng dụng di động xã hội. Nó có tùy chọn để quay video cho hồ sơ. Vấn đề với máy ghi âm của tôi là nó phản chiếu video thực sự. Tôi biết đó là hành vi mặc định, nhưng muốn nó hoạt động như sanpchat.Quay video từ máy ảnh mà không cần gương, nó giống như trò chuyện nhanh

Preview

Video when preview

Sau khi ghi âm và phát lại

After recording and playback

Đây là mã của tôi

// 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; 
} 

Tôi muốn nó phải giống như xem trước trong phát lại. Sanpchat đã làm như vậy, cảm ơn trước.

+0

'cameraPreview' là gì? – pskink

+0

nó là phân lớp của 'SurfaceView' – Max

+0

sử dụng' TextureView' và 'setTransform (Ma trận biến đổi)' – pskink

Trả lời

1

Không có gì hiệu quả đối với tôi cuối cùng tôi cần phải làm điều đó trên mặt api nơi tôi gửi video. Sau khi tải lên video, tôi sử dụng ffmpeg để lật dọc và đặt góc trong siêu dữ liệu. đây là lệnh cho việc này.

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

Cảm ơn bạn đã trả lời. Tôi thực sự bị mắc kẹt trong vấn đề này. Tôi không tìm cách lật video –

+0

@Max Cách sử dụng lệnh này để quay video? – Arti

2

Bạn có thể sử dụng một TextureView, tài liệu here và áp dụng một biến đổi của -1 quy mô trên trục X, chức năng here

+0

Trong khi điều này là chính xác, chỉ có câu trả lời liên kết là [không được coi là thực hành tốt] (http://meta.stackexchange.com/questions/7515/why-is-linking-bad) trên Stack Overflow. Câu hỏi "câu trả lời" nên thực sự chứa câu trả lời hoặc ít nhất một bản tóm tắt nội dung và cách nó liên quan đến câu hỏi. –

+0

Tôi xin lỗi vì điều đó, tôi nghĩ điều đó là chính xác vì các liên kết chứa mã dễ hiểu. –

+0

nó sẽ thay đổi xem trước, nó cũng sẽ thay đổi video đã ghi? – Max

3

Bạn đã thiết lập các định hướng cho camera phía trước để 270 đây,

setOrientationHint = 270 ; 

thay vào đó tôi sẽ đề nghị để thiết lập các định hướng đến 180 độ như dưới đây,

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

này cũng sẽ thay đổi toàn bộ tệp video.

Các vấn đề liên quan