· Enable video and audio configuration properties on CameraView component:

- Audio bit rate
- Audio sample rate
- Audio channels
- Video bit arte
pull/354/head
Iván Álvarez Pereira 7 years ago
parent a5a72e10e4
commit 4e217ee4c4
  1. 24
      cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java
  2. 35
      cameraview/src/main/java/com/otaliastudios/cameraview/CameraController.java
  3. 70
      cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java
  4. 11
      cameraview/src/main/res/values/attrs.xml
  5. 17
      demo/src/main/res/layout/activity_camera.xml

@ -706,12 +706,34 @@ class Camera1 extends CameraController implements Camera.PreviewCallback, Camera
} else {
mMediaRecorder.setVideoEncoder(mMapper.map(mVideoCodec));
}
if(getVideoBitRate() <= 0) {
mMediaRecorder.setVideoEncodingBitRate(profile.videoBitRate);
}
else {
mMediaRecorder.setVideoEncodingBitRate(getVideoBitRate());
}
if (mAudio == Audio.ON) {
mMediaRecorder.setAudioChannels(profile.audioChannels);
if(getAudioSampleRate() <= 0) {
mMediaRecorder.setAudioSamplingRate(profile.audioSampleRate);
} else {
mMediaRecorder.setAudioSamplingRate(getAudioBitRate());
}
mMediaRecorder.setAudioEncoder(profile.audioCodec);
if(getAudioChannels() == 0){
mMediaRecorder.setAudioChannels(profile.audioChannels);
} else {
mMediaRecorder.setAudioChannels(getAudioChannels());
}
if(getAudioBitRate() <= 0) {
mMediaRecorder.setAudioEncodingBitRate(profile.audioBitRate);
} else {
mMediaRecorder.setAudioEncodingBitRate(getAudioBitRate());
}
}
if (mLocation != null) {

@ -61,6 +61,10 @@ abstract class CameraController implements
protected Size mPictureSize;
protected Size mPreviewSize;
protected int mPreviewFormat;
protected int mVideoBitRate;
protected int mAudioBitRate;
protected int mAudioSampleRate;
protected int mAudioChannels;
protected int mSensorOffset;
private int mDisplayOffset;
@ -290,6 +294,21 @@ abstract class CameraController implements
mVideoCodec = codec;
}
final void setVideoBitRate(int videoBitRate) {
mVideoBitRate = videoBitRate;
}
final void setAudioBitRate(int audioBitRate) {
mAudioBitRate = audioBitRate;
}
final void setAudioSampleRate(int audioSampleRate) {
mAudioBitRate = audioSampleRate;
}
final void setAudioChannels(int audioChannels){
mAudioChannels = audioChannels;
}
//endregion
@ -419,6 +438,22 @@ abstract class CameraController implements
return mIsCapturingVideo;
}
final int getVideoBitRate() {
return mVideoBitRate;
}
final int getAudioBitRate() {
return mAudioBitRate;
}
final int getAudioSampleRate() {
return mAudioSampleRate;
}
final int getAudioChannels() {
return mAudioChannels;
}
//endregion
//region Orientation utils

@ -116,6 +116,10 @@ public class CameraView extends FrameLayout implements LifecycleObserver {
VideoCodec codec = VideoCodec.fromValue(a.getInteger(R.styleable.CameraView_cameraVideoCodec, VideoCodec.DEFAULT.value()));
long videoMaxSize = (long) a.getFloat(R.styleable.CameraView_cameraVideoMaxSize, 0);
int videoMaxDuration = a.getInteger(R.styleable.CameraView_cameraVideoMaxDuration, 0);
int videoBitRate = a.getInteger(R.styleable.CameraView_cameraVideoBitRate, 0);
int audioBitRate = a.getInteger(R.styleable.CameraView_cameraAudioBitRate, 0);
int audioSampleRate = a.getInteger(R.styleable.CameraView_cameraAudioSampleRate, 0);
int audioChannels = a.getInteger(R.styleable.CameraView_cameraAudioChannels, 0);
// Size selectors
List<SizeSelector> constraints = new ArrayList<>(3);
@ -191,6 +195,10 @@ public class CameraView extends FrameLayout implements LifecycleObserver {
setVideoCodec(codec);
setVideoMaxSize(videoMaxSize);
setVideoMaxDuration(videoMaxDuration);
setVideoBitRate(videoBitRate);
setAudioBitRate(audioBitRate);
setAudioSampleRate(audioSampleRate);
setAudioChannels(audioChannels);
// Apply gestures
mapGesture(Gesture.TAP, tapGesture);
@ -1480,6 +1488,68 @@ public class CameraView extends FrameLayout implements LifecycleObserver {
return mCameraController.isCapturingVideo();
}
/**
* Returns custom video bitrate, or 0 if no limit was set.
*
* @see #setVideoBitRate(int)
* @return custom video bitrate
*/
public int getVideoBitRate() {
return mCameraController.getVideoBitRate();
}
/**
* Returns custom audio bitrate, or 0 if no limit was set.
*
* @see #setAudioBitRate(int)
* @return audio bit rate
*/
public int getAudioBitRate() {
return mCameraController.getVideoBitRate();
}
/**
* Returns custom audio bitrate, or 0 if no limit was set.
*
* @see #setAudioSampleRate(int)
* @return audio bit rate
*/
public int getAudioSampleRate() {
return mCameraController.getAudioSampleRate();
}
/**
* Sets custom video bitrate for recording. Use 0 or negatives to disable.
*
* @param videoBitRate The maximum video bitrate
*/
public void setVideoBitRate(int videoBitRate) {
mCameraController.setVideoBitRate(videoBitRate);
}
/**
* Sets custom audio bitrate for recording. Use 0 or negatives to disable.
*
* @param audioBitRate The maximum video bitrate
*/
public void setAudioBitRate(int audioBitRate) {
mCameraController.setAudioBitRate(audioBitRate);
}
/**
* Sets custom audio sample rate for recording. Use 0 or negatives to disable.
*
* @param audioSampleRate The maximum audio sample rate
*/
public void setAudioSampleRate(int audioSampleRate) {
mCameraController.setAudioSampleRate(audioSampleRate);
}
public void setAudioChannels(int audioChannels){
mCameraController.setAudioChannels(audioChannels);
}
//endregion
//region Callbacks and dispatching

@ -120,6 +120,17 @@
<enum name="h264" value="2" />
</attr>
<attr name="cameraVideoBitRate" format="integer" />
<attr name="cameraAudioBitRate" format="integer" />
<attr name="cameraAudioSampleRate" format="integer" />
<attr name="cameraAudioChannels" format="enum">
<enum name="deviceDefault" value="0" />
<enum name="one_channel" value="1" />
<enum name="two_channels" value="2" />
</attr>
<!-- deprecated attr name="cameraZoomMode" format="enum">
<enum name="off" value="0" />
<enum name="pinch" value="1" />

@ -2,32 +2,35 @@
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/root"
android:background="#FF444444"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- Camera -->
<com.otaliastudios.cameraview.CameraView
xmlns:app="http://schemas.android.com/apk/res-auto"
<com.otaliastudios.cameraview.CameraView xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/camera"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:keepScreenOn="true"
app:cameraPlaySounds="true"
app:cameraGrid="off"
app:cameraAudio="on"
app:cameraAudioBitRate="12200"
app:cameraAudioChannels="deviceDefault"
app:cameraCropOutput="false"
app:cameraFacing="back"
app:cameraFlash="off"
app:cameraAudio="on"
app:cameraGestureTap="focusWithMarker"
app:cameraGestureLongTap="none"
app:cameraGesturePinch="zoom"
app:cameraGestureScrollHorizontal="exposureCorrection"
app:cameraGestureScrollVertical="none"
app:cameraGestureTap="focusWithMarker"
app:cameraGrid="off"
app:cameraJpegQuality="100"
app:cameraSessionType="picture" />
app:cameraPlaySounds="true"
app:cameraSessionType="picture"
app:cameraVideoBitRate="128000" />
<!-- Controls -->
<LinearLayout

Loading…
Cancel
Save