Highly flexible Android Camera which offers granular control over the video quality and filesize, while restricting recordings to be landscape only.
<img alt="Get it on Google Play" width="200" src="https://play.google.com/intl/en_us/badges/images/apps/en-play-badge.png" />
There are a number of issues with the default Android intent to capture videos (MediaStore.ACTION_VIDEO_CAPTURE
) which led me to create this library project:
MediaStore.EXTRA_VIDEO_QUALITY
.
This library provides a full and reusable custom camera, which:
1) Add the Jitpack repository to your project:
repositories {
maven { url "https://jitpack.io" }
}
2) Add a dependency on the library:
compile 'com.github.jeroenmols:LandscapeVideoCamera:1.3.0'
3) Specify the VideoCaptureActivity in your manifest:
<activity
android:name="com.jmolsmobile.landscapevideocapture.VideoCaptureActivity"
android:screenOrientation="sensor" >
</activity>
4) Request the following permissions in your manifest:
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
5) Create a CaptureConfiguration using the Builder
// Choose one of both
CaptureConfiguration.Builder builder = new CaptureConfiguration.Builder(CaptureResolution resolution, CaptureQuality quality);
CaptureConfiguration.Builder builder = new CaptureConfiguration.Builder(int videoWidth, int videoHeight, int bitrate);
// Optional
builder.maxDuration(maxDurationSec);
builder.maxFileSize(maxFileSizeMb);
builder.frameRate(framesPerSec);
builder.showRecordingTime(); // Show the elapsed recording time
builder.noCameraToggle(); // Remove button to toggle between front and back camera
// Get the CaptureConfiguration
CaptureConfiguration configuration = builder.build();
Note: When no CaptureConfiguration is specified, a default configuration will be used.
Note 2: Subclass the CaptureConfiguration class to set more advanced configurations. (codecs, audio bitrate,...)
6) Launch the VideoCaptureActivity
for result, add the CaptureConfiguration as an parcelable extra EXTRA_CAPTURE_CONFIGURATION
and optionally add a String extra EXTRA_OUTPUT_FILENAME
.
final Intent intent = new Intent(getActivity(), VideoCaptureActivity.class);
intent.putExtra(VideoCaptureActivity.EXTRA_CAPTURE_CONFIGURATION, config);
intent.putExtra(VideoCaptureActivity.EXTRA_OUTPUT_FILENAME, filename);
startActivityForResult(intent, RESULT_CODE);
7) Check the resultcode (RESULT_OK
, RESULT_CANCELLED
or VideoCaptureActivity.RESULT_ERROR
) and in case of success get the output filename in the intent extra EXTRA_OUTPUT_FILENAME
.