AliVCSDK  6.3.0
阿里云音视频SDK,为视频开发者提供一站式接入服务
AlivcLivePushConfig.java
1 package com.alivc.live.pusher;
2 
5 import static com.alivc.live.pusher.AlivcLivePushConstants.DEFAULT_MAX_DIFF_PTS;
6 import static com.alivc.live.pusher.AlivcLivePushConstants.DEFAULT_MAX_TIMEOUT_COUNT;
7 import static com.alivc.live.pusher.AlivcLivePushConstants.DEFAULT_VALUE_AUDIO_ONLY;
8 import static com.alivc.live.pusher.AlivcLivePushConstants.DEFAULT_VALUE_AUTO_FOCUS;
9 import static com.alivc.live.pusher.AlivcLivePushConstants.DEFAULT_VALUE_FLASH;
10 import static com.alivc.live.pusher.AlivcLivePushConstants.DEFAULT_VALUE_INT_AUDIO_RETRY_COUNT;
11 import static com.alivc.live.pusher.AlivcLivePushConstants.DEFAULT_VALUE_INT_DEFINITION;
12 import static com.alivc.live.pusher.AlivcLivePushConstants.DEFAULT_VALUE_INT_INIT_BITRATE;
13 import static com.alivc.live.pusher.AlivcLivePushConstants.DEFAULT_VALUE_INT_MIN_BITRATE;
14 import static com.alivc.live.pusher.AlivcLivePushConstants.DEFAULT_VALUE_INT_RETRY_INTERVAL;
15 import static com.alivc.live.pusher.AlivcLivePushConstants.DEFAULT_VALUE_INT_TARGET_BITRATE;
16 import static com.alivc.live.pusher.AlivcLivePushConstants.DEFAULT_VALUE_PREVIEW_MIRROR;
17 import static com.alivc.live.pusher.AlivcLivePushConstants.DEFAULT_VALUE_PUSH_MIRROR;
18 import static com.alivc.live.pusher.AlivcLivePushConstants.DEFAULT_VALUE_VIDEO_ONLY;
19 
20 import android.content.Intent;
21 import android.graphics.ImageFormat;
22 import android.media.AudioFormat;
23 import android.os.Build;
24 
26 
27 import java.io.Serializable;
28 import java.util.ArrayList;
29 
42 @Visible
43 public class AlivcLivePushConfig implements Serializable {
44  public static final String CONFIG = "AlivcLivePushConfig";
45 
46  private AlivcLiveMode mLivePushMode = AlivcLiveMode.AlivcLiveBasicMode;
47 
48  private AlivcResolutionEnum mResolution = DEFAULT_VALUE_INT_DEFINITION;
49  private AlivcFpsEnum mFps = AlivcFpsEnum.FPS_20;
50  private int mTargetVideoBitrate = DEFAULT_VALUE_INT_TARGET_BITRATE;
51  private int mMinVideoBitrate = DEFAULT_VALUE_INT_MIN_BITRATE;
52  private int mInitialVideoBitrate = DEFAULT_VALUE_INT_INIT_BITRATE;
53  private int mBFrames = 0;
54  private static Intent mediaProjectionPermissionResultData = null;
58  private AlivcLivePushCameraTypeEnum mCameraType = CAMERA_TYPE_FRONT;
59  private boolean mPreviewMirror = DEFAULT_VALUE_PREVIEW_MIRROR;
60  private boolean mPushMirror = DEFAULT_VALUE_PUSH_MIRROR;
61  private boolean mAudioOnly = DEFAULT_VALUE_AUDIO_ONLY;
62  private boolean mVideoOnly = DEFAULT_VALUE_VIDEO_ONLY;
63  private boolean mAutoFocus = DEFAULT_VALUE_AUTO_FOCUS;
64  private boolean mFocusBySensor = false;
65  private boolean mFlash = DEFAULT_VALUE_FLASH;
66  private int mWidth = AlivcResolutionEnum.getResolutionWidth(DEFAULT_VALUE_INT_DEFINITION, mLivePushMode);
67  private int mHeight = AlivcResolutionEnum.getResolutionHeight(DEFAULT_VALUE_INT_DEFINITION, mLivePushMode);
68 
69  //rtmp module
70  private int mConnectRetryCount = DEFAULT_VALUE_INT_AUDIO_RETRY_COUNT;
71  private int mConnectRetryInterval = DEFAULT_VALUE_INT_RETRY_INTERVAL;
72 
73  private long mPtsMaxDiff = DEFAULT_MAX_DIFF_PTS; // 音频在前
74  private int mMaxTimeoutCount = DEFAULT_MAX_TIMEOUT_COUNT;
75  //private int mAlarmRemainPacketSize = DEFAULT_START_ALRAM_PACKET_SIZE;
76  //private int mUndoAlarmRemainPacketSize = DEFAULT_STOP_ALARM_PACKET_SIZE;
77 
79  private AlivcEncodeModeEnum mVideoEncodeMode = AlivcEncodeModeEnum.Encode_MODE_HARD;
80  private AlivcEncodeType mVideoEncodeType = AlivcEncodeType.Encode_TYPE_H264;
81  private AlivcEncodeModeEnum mAudioEncodeMode = AlivcEncodeModeEnum.Encode_MODE_SOFT;
82  private int mVideoFormat = ImageFormat.NV21;
83  private int mAudioFormat = AudioFormat.ENCODING_PCM_16BIT;
84  private AlivcImageFormat mAlivcExternMainImageFormat = AlivcImageFormat.IMAGE_FORMAT_YUV420P;
85  private AlivcSoundFormat mAlivcExternMainSoundFormat = AlivcSoundFormat.SOUND_FORMAT_S16;
86 
88 
89  private int mExposure = 0;
90 
91  private boolean mUseAliPlayerForBGM = false;
92 
93  private boolean enableNarrowbandHDForScreenPusher = true;
94 
95  //最小帧率
96  private AlivcFpsEnum minFps = AlivcFpsEnum.FPS_8;
97 
98  private boolean enableBitrateControl = true;
99  private boolean enableAutoResolution = false;
100 
101  private boolean initBitFlag = false;
102  private boolean minBitFlag = false;
103  private boolean targetBitFlag = false;
104 
105  private boolean externMainStream = false;
106 
107  private int sendDataTimeout = 3000;
108  private AlivcQualityModeEnum qualityMode = AlivcQualityModeEnum.QM_RESOLUTION_FIRST;
109 
111  private int audioBitRate = 64000;
113  private AlivcAudioSampleRateEnum mAudioSampleRate = AUDIO_SAMPLE_RATE_48000;
114  private String mPausePushImagePath = "";
115  private String mNetworkPoorPushImagePath = "";
116 
117  private boolean requireGLSharedContext = false;
118  private boolean mAudioCaptureWithoutMix = false;
119 
120  private String mExtraInfo;
121 
123 
124  public AlivcLivePushConfig() {
125  mediaProjectionPermissionResultData = null;
126  if (Build.MANUFACTURER.equals("Letv") || Build.MODEL.equals("Le X620")) {
127  mAudioCaptureWithoutMix = true;
128  }
129  }
130 
131  private ArrayList<WaterMarkInfo> waterMarkInfos = new ArrayList<>();
132 
133  public int getVideoFormat() {
134  return mVideoFormat;
135  }
136 
137  public void setVideoFormat(int videoFormat) {
138  this.mVideoFormat = videoFormat;
139  }
140 
141  public int getAudioFormat() {
142  return mAudioFormat;
143  }
144 
145  public void setAudioFormat(int audioFormat) {
146  this.mAudioFormat = audioFormat;
147  }
148 
161  public void setLivePushMode(AlivcLiveMode pushMode) {
162  this.mLivePushMode = pushMode;
163  // 不同模式下,分辨率对应的width/height/initial bitrate/target bitrate/min bitrate不一样,需刷新
164  setResolution(mResolution);
165  }
166 
174  return mLivePushMode;
175  }
176 
177  private boolean checkLiveInteractiveMode() {
178  return mLivePushMode == AlivcLiveMode.AlivcLiveInteractiveMode;
179  }
180 
190  return mResolution;
191  }
192 
201  public void setResolution(AlivcResolutionEnum resolution) {
202  this.mResolution = resolution;
203 
204  if (!targetBitFlag) {
205  mTargetVideoBitrate = AlivcResolutionEnum.getTargetBitrate(resolution, mLivePushMode);
206  }
207 
208  if (!initBitFlag) {
209  mInitialVideoBitrate = AlivcResolutionEnum.getInitBitrate(resolution, mLivePushMode);
210  }
211 
212  if (!minBitFlag) {
213  mMinVideoBitrate = AlivcResolutionEnum.getMinBitrate(resolution, mLivePushMode);
214  }
215 
216  this.mWidth = AlivcResolutionEnum.getResolutionWidth(resolution, mLivePushMode);
217  this.mHeight = AlivcResolutionEnum.getResolutionHeight(resolution, mLivePushMode);
218  }
219 
225  public String getExtraInfo() {
226  return mExtraInfo;
227  }
228 
236  public void setExtraInfo(String extraInfo) {
237  mExtraInfo = extraInfo;
238  }
239 
248  return monitorLevel;
249  }
250 
261  public void setMonitorLevel(AlivcLivePushMonitorLevel monitorLevel) {
262  this.monitorLevel = monitorLevel;
263  }
264 
270  public int getFps() {
271  return mFps.getFps();
272  }
273 
282  public void setFps(AlivcFpsEnum fps) {
283  this.mFps = fps;
284  }
285 
291  public int getTargetVideoBitrate() {
292  return mTargetVideoBitrate;
293  }
294 
300  public void setTargetVideoBitrate(int targetBitRate) {
301  this.mTargetVideoBitrate = targetBitRate;
302  this.targetBitFlag = true;
303  }
304 
310  public int getMinVideoBitrate() {
311  return mMinVideoBitrate;
312  }
313 
319  public void setMinVideoBitrate(int minBitrate) {
320  this.mMinVideoBitrate = minBitrate;
321  this.minBitFlag = true;
322  }
323 
329  public int getBFrames() {
330  return mBFrames;
331  }
332 
340  public void setBFrames(int bFrame) {
341  this.mBFrames = bFrame;
342  }
343 
353  return mAudioSampleRate;
354  }
355 
364  public void setAudioSampleRate(AlivcAudioSampleRateEnum audioSample) {
365  this.mAudioSampleRate = audioSample;
366  }
367 
375  public int getPreviewOrientation() {
376  return mPreviewOrientation.getOrientation();
377  }
378 
387  public void setPreviewOrientation(AlivcPreviewOrientationEnum previewOrientation) {
388  this.mPreviewOrientation = previewOrientation;
389  }
390 
400  public int getPreviewRotation() {
401  return mPreviewRotation.getRotation();
402  }
403 
415  this.mPreviewRotation = rotation;
416  }
417 
425  public int getCameraType() {
426  return mCameraType.getCameraId();
427  }
428 
437  public void setCameraType(AlivcLivePushCameraTypeEnum cameraType) {
438  this.mCameraType = cameraType;
439  }
440 
448  public boolean isPreviewMirror() {
449  return mPreviewMirror;
450  }
451 
459  public void setPreviewMirror(boolean mirror) {
460  this.mPreviewMirror = mirror;
461  }
462 
470  public boolean isAudioOnly() {
471  return mAudioOnly;
472  }
473 
481  public void setAudioOnly(boolean audioOnly) {
482  this.mAudioOnly = audioOnly;
483  }
484 
490  public boolean isVideoOnly() {
491  return mVideoOnly;
492  }
493 
501  public void setVideoOnly(boolean videoOnly) {
502  this.mVideoOnly = videoOnly;
503  }
504 
512  public boolean isAutoFocus() {
513  return mAutoFocus;
514  }
515 
523  public void setAutoFocus(boolean autoFocus) {
524  this.mAutoFocus = autoFocus;
525  }
526 
534  public boolean isFocusBySensor() {
535  return mFocusBySensor;
536  }
537 
547  public void setFocusBySensor(boolean focusBySensor) {
548  this.mFocusBySensor = focusBySensor;
549  }
550 
558  public boolean isFlash() {
559  return mFlash;
560  }
561 
569  public void setFlash(boolean flash) {
570  this.mFlash = flash;
571  }
572 
580  public int getSendDataTimeout() {
581  return sendDataTimeout;
582  }
583 
591  public void setSendDataTimeout(int sendDataTimeout) {
592  this.sendDataTimeout = sendDataTimeout;
593  }
594 
601  public String getPausePushImage() {
602  return mPausePushImagePath;
603  }
604 
611  public void setPausePushImage(String path) {
612  mPausePushImagePath = path;
613  }
614 
621  public String getNetworkPoorPushImage() {
622  return mNetworkPoorPushImagePath;
623  }
624 
631  public void setNetworkPoorPushImage(String path) {
632  mNetworkPoorPushImagePath = path;
633  }
634 
640  public int getInitialVideoBitrate() {
641  return mInitialVideoBitrate;
642  }
643 
649  public void setInitialVideoBitrate(int initialVideoBitrate) {
650  this.mInitialVideoBitrate = initialVideoBitrate;
651  this.initBitFlag = true;
652  }
653 
661  public int getConnectRetryCount() {
662  return mConnectRetryCount;
663  }
664 
672  public void setConnectRetryCount(int connectRetryCount) {
673  this.mConnectRetryCount = connectRetryCount;
674  }
675 
683  public int getConnectRetryInterval() {
684  return mConnectRetryInterval;
685  }
686 
694  public void setConnectRetryInterval(int connectRetryInterval) {
695  this.mConnectRetryInterval = connectRetryInterval;
696  }
697 
705  public boolean isPushMirror() {
706  return mPushMirror;
707  }
708 
716  public void setPushMirror(boolean pushMirror) {
717  this.mPushMirror = pushMirror;
718  }
719 
729  return mVideoEncodeMode;
730  }
731 
740  public void setVideoEncodeMode(AlivcEncodeModeEnum videoEncodeMode) {
741  this.mVideoEncodeMode = videoEncodeMode;
742  }
743 
753  return mVideoEncodeType;
754  }
755 
764  public void setVideoEncodeType(AlivcEncodeType videoEncodeType) {
765  this.mVideoEncodeType = videoEncodeType;
766  }
767 
777  return mAudioEncodeMode;
778  }
779 
788  public void setAudioEncodeMode(AlivcEncodeModeEnum audioEncodeMode) {
789  this.mAudioEncodeMode = audioEncodeMode;
790  }
791 
797  public int getWidth() {
798  return mWidth;
799  }
800 
806  public int getHeight() {
807  return mHeight;
808  }
809 
817  public int getAudioChannels() {
818  return mAudioChannels.getChannelCount();
819  }
820 
828  public void setAudioChannels(AlivcAudioChannelEnum audioChannels) {
829  mAudioChannels = audioChannels;
830  }
831 
839  public int getVideoEncodeGop() {
840  return mVideoEncodeGop.getGop();
841  }
842 
850  public void setVideoEncodeGop(AlivcVideoEncodeGopEnum videoEncodeGop) {
851  mVideoEncodeGop = videoEncodeGop;
852  }
853 
863  public int getExposure() {
864  return mExposure;
865  }
866 
876  public void setExposure(int exposure) {
877  this.mExposure = exposure;
878  }
879 
890  mUseAliPlayerForBGM = useAliPlayerForBGM;
891  }
892 
902  public boolean useAliPlayerForBGM() {
903  return mUseAliPlayerForBGM;
904  }
905 
915  public void setEnableNarrowbandHDForScreenPusher(boolean enable) {
916  enableNarrowbandHDForScreenPusher = enable;
917  }
918 
929  return enableNarrowbandHDForScreenPusher;
930  }
931 
940  public int getMinFps() {
941  return minFps.getFps();
942  }
943 
952  public void setMinFps(AlivcFpsEnum minFps) {
953  this.minFps = minFps;
954  }
955 
965  return audioProfile;
966  }
967 
976  public void setAudioProfile(AlivcAudioAACProfileEnum audioProfile) {
977  this.audioProfile = audioProfile;
978  }
979 
987  public int getAudioBitRate() {
988  return audioBitRate;
989  }
990 
998  public void setAudioBitRate(int audioBitRate) {
999  this.audioBitRate = audioBitRate;
1000  }
1001 
1013  return audioSceneMode;
1014  }
1015 
1026  public void setAudioSceneMode(AlivcAudioSceneModeEnum audioSceneMode) {
1027  this.audioSceneMode = audioSceneMode;
1028  }
1029 
1038  public void setQualityMode(AlivcQualityModeEnum quality) {
1039  this.qualityMode = quality;
1040  }
1041 
1051  return qualityMode;
1052  }
1053 
1061  return mediaProjectionPermissionResultData;
1062  }
1063 
1070  public static void setMediaProjectionPermissionResultData(Intent mediaProjectionPermissionResultData) {
1071  AlivcLivePushConfig.mediaProjectionPermissionResultData = mediaProjectionPermissionResultData;
1072  }
1073 
1081  public boolean isEnableBitrateControl() {
1082  return enableBitrateControl;
1083  }
1084 
1092  public void setEnableBitrateControl(boolean enableBitrateControl) {
1093  this.enableBitrateControl = enableBitrateControl;
1094  }
1095 
1103  public boolean isEnableAutoResolution() {
1104  return enableAutoResolution;
1105  }
1106 
1114  public void setEnableAutoResolution(boolean enableAutoResolution) {
1115  this.enableAutoResolution = enableAutoResolution;
1116  }
1117 
1125  public boolean isExternMainStream() {
1126  return externMainStream;
1127  }
1128 
1138  public void setExternMainStream(boolean externMainStream) {
1139  this.externMainStream = externMainStream;
1140  }
1141 
1153  public void setExternMainStream(boolean externMainStream, AlivcImageFormat imageFormat, AlivcSoundFormat soundFormat) {
1154  this.externMainStream = externMainStream;
1155  mAlivcExternMainImageFormat = imageFormat;
1156  mAlivcExternMainSoundFormat = soundFormat;
1157  }
1158 
1168  return mAlivcExternMainImageFormat;
1169  }
1170 
1178  public void setAlivcExternMainImageFormat(AlivcImageFormat alivcExternMainImageFormat) {
1179  this.mAlivcExternMainImageFormat = alivcExternMainImageFormat;
1180  }
1181 
1191  return mAlivcExternMainSoundFormat;
1192  }
1193 
1203  this.mAlivcExternMainSoundFormat = soundFormat;
1204  }
1205 
1215  return mPreviewDisplayMode;
1216  }
1217 
1227  this.mPreviewDisplayMode = displayMode;
1228  }
1229 
1238  public void setRequireRenderContextNotify(boolean enable) {
1239  this.requireGLSharedContext = enable;
1240  }
1241 
1251  return this.requireGLSharedContext;
1252  }
1253 
1261  public void setAudioCaptureWithoutMix(boolean on) {
1262  this.mAudioCaptureWithoutMix = on;
1263  }
1264 
1272  public boolean getAudioCaptureWithoutMix() {
1273  return mAudioCaptureWithoutMix;
1274  }
1275 
1288  @Deprecated
1289  public void addWaterMark(String path, float x, float y, float width) {
1290  WaterMarkInfo waterMarkInfo = new WaterMarkInfo();
1291  waterMarkInfo.mWaterMarkPath = path;
1292  waterMarkInfo.mWaterMarkCoordX = x;
1293  waterMarkInfo.mWaterMarkCoordY = y;
1294  waterMarkInfo.mWaterMarkWidth = width;
1295  if (waterMarkInfos.size() < 3) {
1296  waterMarkInfos.add(waterMarkInfo);
1297  }
1298  }
1299 
1303  @Deprecated
1304  public void clearWaterMark() {
1305  waterMarkInfos.clear();
1306  }
1307 
1313  @Deprecated
1314  public void removeWaterMark(String path) {
1315  for (WaterMarkInfo info : waterMarkInfos) {
1316  if (path != null && path.equals(info.mWaterMarkPath)) {
1317  waterMarkInfos.remove(info);
1318  break;
1319  }
1320  }
1321  }
1322 
1329  ArrayList<WaterMarkInfo> getWaterMarkInfos() {
1330  return waterMarkInfos;
1331  }
1332 
1333 } // end of live_pusher
void setAlivcExternMainImageFormat(AlivcImageFormat alivcExternMainImageFormat)
void addWaterMark(String path, float x, float y, float width)
static int getResolutionHeight(AlivcResolutionEnum resolution, AlivcLiveMode liveMode)
void setVideoEncodeGop(AlivcVideoEncodeGopEnum videoEncodeGop)
void setAudioSampleRate(AlivcAudioSampleRateEnum audioSample)
void setEnableAutoResolution(boolean enableAutoResolution)
void setInitialVideoBitrate(int initialVideoBitrate)
void setAudioChannels(AlivcAudioChannelEnum audioChannels)
推流视频采集帧率
void setQualityMode(AlivcQualityModeEnum quality)
static int getResolutionWidth(AlivcResolutionEnum resolution, AlivcLiveMode liveMode)
void setCameraType(AlivcLivePushCameraTypeEnum cameraType)
void setAudioProfile(AlivcAudioAACProfileEnum audioProfile)
void setResolution(AlivcResolutionEnum resolution)
void setPreviewDisplayMode(AlivcPreviewDisplayMode displayMode)
static int getInitBitrate(AlivcResolutionEnum resolution, AlivcLiveMode liveMode)
void setConnectRetryInterval(int connectRetryInterval)
void setUseAliPlayerForBGM(boolean useAliPlayerForBGM)
void setExternMainStream(boolean externMainStream)
void setVideoEncodeMode(AlivcEncodeModeEnum videoEncodeMode)
void setAudioSceneMode(AlivcAudioSceneModeEnum audioSceneMode)
void setAlivcExternMainSoundFormat(AlivcSoundFormat soundFormat)
static void setMediaProjectionPermissionResultData(Intent mediaProjectionPermissionResultData)
void setMonitorLevel(AlivcLivePushMonitorLevel monitorLevel)
void setExternMainStream(boolean externMainStream, AlivcImageFormat imageFormat, AlivcSoundFormat soundFormat)
static int getTargetBitrate(AlivcResolutionEnum resolution, AlivcLiveMode liveMode)
void setVideoEncodeType(AlivcEncodeType videoEncodeType)
void setAudioEncodeMode(AlivcEncodeModeEnum audioEncodeMode)
static int getMinBitrate(AlivcResolutionEnum resolution, AlivcLiveMode liveMode)
void setPreviewRotation(AlivcPreviewRotationEnum rotation)
void setPreviewOrientation(AlivcPreviewOrientationEnum previewOrientation)
void setEnableBitrateControl(boolean enableBitrateControl)
void setConnectRetryCount(int connectRetryCount)