Highly flexible Android Camera which offers granular control over the video quality and filesize, while restricting recordings to be landscape only.

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:
- The default intent only accepts integer quality parameters of 0 (MMS quality) or 1 (highest available quality), using the intent extra
MediaStore.EXTRA_VIDEO_QUALITY. - The default intent does not return the URI of the recorded file if it was specified when launching the intent.
- The default intent doesn't care whether users capture their video in portrait mode or landscape.
This library provides a full and reusable custom camera, which:
- Forces the users to rotate their device to landscape
- Allows to specify the filename, or have the library generate one for you
- Allows very granular control over the capture settings:
- Resolution
- Bitrate
- Max filesize
- Max video duration
- audio/video codec
- switch between front and rear facing camera
- ...
- Add the Jitpack repository to your project:
repositories{maven{url "https://jitpack.io" } }- Add a dependency on the library:
compile 'com.github.jeroenmols:LandscapeVideoCamera:1.3.0'- Specify the VideoCaptureActivity in your manifest:
<activityandroid:name="com.jmolsmobile.landscapevideocapture.VideoCaptureActivity"android:screenOrientation="sensor" > </activity>- Request the following permissions in your manifest:
<uses-permissionandroid:name="android.permission.RECORD_AUDIO" /> <uses-permissionandroid:name="android.permission.CAMERA" /> <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE" />- Create a CaptureConfiguration using the Builder
// Choose one of bothCaptureConfiguration.Builderbuilder = newCaptureConfiguration.Builder(CaptureResolutionresolution, CaptureQualityquality); CaptureConfiguration.Builderbuilder = newCaptureConfiguration.Builder(intvideoWidth, intvideoHeight, intbitrate); // Optionalbuilder.maxDuration(maxDurationSec); builder.maxFileSize(maxFileSizeMb); builder.frameRate(framesPerSec); builder.showRecordingTime(); // Show the elapsed recording timebuilder.noCameraToggle(); // Remove button to toggle between front and back camera// Get the CaptureConfigurationCaptureConfigurationconfiguration = 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,...)
- Launch the
VideoCaptureActivityfor result, add the CaptureConfiguration as an parcelable extraEXTRA_CAPTURE_CONFIGURATIONand optionally add a String extraEXTRA_OUTPUT_FILENAME.
finalIntentintent = newIntent(getActivity(), VideoCaptureActivity.class); intent.putExtra(VideoCaptureActivity.EXTRA_CAPTURE_CONFIGURATION, config); intent.putExtra(VideoCaptureActivity.EXTRA_OUTPUT_FILENAME, filename); startActivityForResult(intent, RESULT_CODE);- Check the resultcode (
RESULT_OK,RESULT_CANCELLEDorVideoCaptureActivity.RESULT_ERROR) and in case of success get the output filename in the intent extraEXTRA_OUTPUT_FILENAME.
