material-camera

介绍:

安卓的录制api很难搞明白,主要因为许多制造商喜欢随意定制他们的sensor。这个库是经过许多研究和试验之后的结果,让视频录制的适用范围更广。

运行效果:

使用说明:

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; color: #323333; -webkit-text-stroke: #323333; background-color: #f2f2f5} span.s1 {font-kerning: none}

在5.0之前的手机上仍然会有较大可能会出问题。

jCenter

repositories {
    jcenter()
    maven { url "https://dl.bintray.com/drummer-aidan/maven" }
}

module's build.gradle

dependencies {
    // ... other dependencies
    compile 'com.afollestad:material-camera:0.4.4'
}

Android Manifest

在AndroidManifest.xml文件中注册库中的两个Activity:

<activity
    android:name="com.afollestad.materialcamera.CaptureActivity"
    android:theme="@style/MaterialCamera.CaptureActivity" />
<activity
    android:name="com.afollestad.materialcamera.CaptureActivity2"
    android:theme="@style/MaterialCamera.CaptureActivity" />

可以随意使用自定义的主题。自带的主题可以让这两个Activity默认有一个好快的外观。更多细节请看sample project 。

Code for Video

private final static int CAMERA_RQ = 6969; 
File saveFolder = new File(Environment.getExternalStorageDirectory(), "MaterialCamera Sample");
if (!saveFolder.mkdirs())
    throw new RuntimeException("Unable to create save directory, make sure WRITE_EXTERNAL_STORAGE permission is granted.");
new MaterialCamera(this)                               // Constructor takes an Activity
    .allowRetry(true)                                  // Whether or not 'Retry' is visible during playback
    .autoSubmit(false)                                 // Whether or not user is allowed to playback videos after recording. This can affect other things, discussed in the next section.
    .saveDir(saveFolder)                               // The folder recorded videos are saved to
    .primaryColorAttr(R.attr.colorPrimary)             // The theme color used for the camera, defaults to colorPrimary of Activity in the constructor
    .showPortraitWarning(true)                         // Whether or not a warning is displayed if the user presses record in portrait orientation
    .defaultToFrontFacing(false)                       // Whether or not the camera will initially show the front facing camera
    .retryExits(false)                                 // If true, the 'Retry' button in the playback screen will exit the camera instead of going back to the recorder
    .restartTimerOnRetry(false)                        // If true, the countdown timer is reset to 0 when the user taps 'Retry' in playback
    .continueTimerInPlayback(false)                    // If true, the countdown timer will continue to go down during playback, rather than pausing.
    .videoEncodingBitRate(1024000)                     // Sets a custom bit rate for video recording.
    .audioEncodingBitRate(50000)                       // Sets a custom bit rate for audio recording.
    .videoFrameRate(24)                                // Sets a custom frame rate (FPS) for video recording.
    .qualityProfile(MaterialCamera.QUALITY_HIGH)       // Sets a quality profile, manually setting bit rates or frame rates with other settings will overwrite individual quality profile settings
    .videoPreferredHeight(720)                         // Sets a preferred height for the recorded video output.
    .videoPreferredAspect(4f / 3f)                     // Sets a preferred aspect ratio for the recorded video output.
    .maxAllowedFileSize(1024 * 1024 * 5)               // Sets a max file size of 5MB, recording will stop if file reaches this limit. Keep in mind, the FAT file system has a file size limit of 4GB.
    .iconRecord(R.drawable.mcam_action_capture)        // Sets a custom icon for the button used to start recording
    .iconStop(R.drawable.mcam_action_stop)             // Sets a custom icon for the button used to stop recording
    .iconFrontCamera(R.drawable.mcam_camera_front)     // Sets a custom icon for the button used to switch to the front camera
    .iconRearCamera(R.drawable.mcam_camera_rear)       // Sets a custom icon for the button used to switch to the rear camera
    .iconPlay(R.drawable.evp_action_play)              // Sets a custom icon used to start playback
    .iconPause(R.drawable.evp_action_pause)            // Sets a custom icon used to pause playback
    .iconRestart(R.drawable.evp_action_restart)        // Sets a custom icon used to restart playback
    .labelRetry(R.string.mcam_retry)                   // Sets a custom button label for the button used to retry recording, when available
    .labelConfirm(R.string.mcam_use_video)             // Sets a custom button label for the button used to confirm/submit a recording
    .autoRecordWithDelaySec(5)                         // The video camera will start recording automatically after a 5 second countdown. This disables switching between the front and back camera initially.
    .autoRecordWithDelayMs(5000)                       // Same as the above, expressed with milliseconds instead of seconds.
    .audioDisabled(false)                              // Set to true to record video without any audio.
    .start(CAMERA_RQ);                                 // Starts the camera activity, the result will be sent back to the current Activity

Note: For retryExists(true), onActivityResult() in the Activity that starts the camera will receive MaterialCamera.STATUS_RETRY as the value of the MaterialCamera.STATUS_EXTRA intent extra.

录制时长

你可以指定一个录制的时间限制。countdownMillis(long), countdownSeconds(float), 以及 countdownMinutes(float)都是用来限制时长的方法。

new MaterialCamera(this)
    .countdownMinutes(2.5f)
    .start(CAMERA_RQ);

当倒计时到了0,停止录制。在此之后根据autoSubmit 和 autoRetry的情况会发生如下行为:

  1. autoSubmit(false), allowRetry(true)

用户将可以回放录制的视频, 'Retry' 按钮将可见。这是默认的行为。

  1. autoSubmit(false), allowRetry(false)

用户可以回放录制的视频,但是 'Retry' 按钮将隐藏。

  1. autoSubmit(true), allowRetry(false)

用户不能回放录制的视频,录制结果立即返回到starting Activity。

  1. autoSubmit(true), allowRetry(true)

如果你不指定一个长度限制,和3的行为相同。如果指定的话,用户可以retry,但是倒计时将继续直到为0.当倒计时技术之后,结果将自动返回到 starting Activity。

如果你希望camera打开之后立即开始倒计时,而不是等用户按下‘Record’,你可以设置 countdownImmediately(true):

new MaterialCamera(this)
    .countdownMinutes(2.5f)
    .countdownImmediately(true)
    .start(CAMERA_RQ);

Code for Stillshots (Pictures)

new MaterialCamera(this)
    /** all the previous methods can be called, but video ones would be ignored */
    .stillShot() // launches the Camera in stillshot mode
    .start(CAMERA_RQ);

Receiving Results

public class MainActivity extends AppCompatActivity {
    private final static int CAMERA_RQ = 6969;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new MaterialCamera(this)
            .start(CAMERA_RQ);
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // Received recording or error from MaterialCamera
        if (requestCode == CAMERA_RQ) {
            if (resultCode == RESULT_OK) {
                Toast.makeText(this, "Saved to: " + data.getDataString(), Toast.LENGTH_LONG).show();
            } else if(data != null) {
                Exception e = (Exception) data.getSerializableExtra(MaterialCamera.ERROR_EXTRA);
                e.printStackTrace();
                Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
            }
        }
    }
}
已下载
0