1package com.alivc.live.pusher;
3import static com.alivc.live.pusher.AlivcAudioSampleRateEnum.AUDIO_SAMPLE_RATE_48000;
4import static com.alivc.live.pusher.AlivcLivePushCameraTypeEnum.CAMERA_TYPE_FRONT;
5import static com.alivc.live.pusher.AlivcLivePushConstants.DEFAULT_MAX_DIFF_PTS;
6import static com.alivc.live.pusher.AlivcLivePushConstants.DEFAULT_MAX_TIMEOUT_COUNT;
7import static com.alivc.live.pusher.AlivcLivePushConstants.DEFAULT_VALUE_AUDIO_ONLY;
8import static com.alivc.live.pusher.AlivcLivePushConstants.DEFAULT_VALUE_AUTO_FOCUS;
9import static com.alivc.live.pusher.AlivcLivePushConstants.DEFAULT_VALUE_FLASH;
10import static com.alivc.live.pusher.AlivcLivePushConstants.DEFAULT_VALUE_FPS;
11import static com.alivc.live.pusher.AlivcLivePushConstants.DEFAULT_VALUE_INT_AUDIO_RETRY_COUNT;
12import static com.alivc.live.pusher.AlivcLivePushConstants.DEFAULT_VALUE_INT_DEFINITION;
13import static com.alivc.live.pusher.AlivcLivePushConstants.DEFAULT_VALUE_INT_INIT_BITRATE;
14import static com.alivc.live.pusher.AlivcLivePushConstants.DEFAULT_VALUE_INT_MIN_BITRATE;
15import static com.alivc.live.pusher.AlivcLivePushConstants.DEFAULT_VALUE_INT_RETRY_INTERVAL;
16import static com.alivc.live.pusher.AlivcLivePushConstants.DEFAULT_VALUE_INT_TARGET_BITRATE;
17import static com.alivc.live.pusher.AlivcLivePushConstants.DEFAULT_VALUE_PREVIEW_MIRROR;
18import static com.alivc.live.pusher.AlivcLivePushConstants.DEFAULT_VALUE_PUSH_MIRROR;
19import static com.alivc.live.pusher.AlivcLivePushConstants.DEFAULT_VALUE_VIDEO_GOP;
20import static com.alivc.live.pusher.AlivcLivePushConstants.DEFAULT_VALUE_VIDEO_ONLY;
22import android.content.Intent;
23import android.graphics.Bitmap;
24import android.graphics.ImageFormat;
25import android.media.AudioFormat;
26import android.os.Build;
28import com.alivc.live.annotations.AlivcLiveAudioCodecType;
29import com.alivc.live.annotations.AlivcLiveCameraCaptureOutputPreference;
30import com.alivc.live.annotations.AlivcLiveMode;
32import java.io.Serializable;
33import java.util.ArrayList;
34import java.util.HashMap;
50 public static final String CONFIG =
"AlivcLivePushConfig";
55 private int mTargetVideoBitrate = DEFAULT_VALUE_INT_TARGET_BITRATE;
56 private int mMinVideoBitrate = DEFAULT_VALUE_INT_MIN_BITRATE;
57 private int mInitialVideoBitrate = DEFAULT_VALUE_INT_INIT_BITRATE;
62 private int mBFrames = 0;
63 private static Intent mediaProjectionPermissionResultData =
null;
68 private boolean mPreviewMirror = DEFAULT_VALUE_PREVIEW_MIRROR;
69 private boolean mPushMirror = DEFAULT_VALUE_PUSH_MIRROR;
70 private boolean mAudioOnly = DEFAULT_VALUE_AUDIO_ONLY;
71 private boolean mVideoOnly = DEFAULT_VALUE_VIDEO_ONLY;
72 private boolean mAutoFocus = DEFAULT_VALUE_AUTO_FOCUS;
73 private boolean mFocusBySensor =
false;
74 private boolean mFlash = DEFAULT_VALUE_FLASH;
77 private int mConnectRetryCount = DEFAULT_VALUE_INT_AUDIO_RETRY_COUNT;
78 private int mConnectRetryInterval = DEFAULT_VALUE_INT_RETRY_INTERVAL;
80 private long mPtsMaxDiff = DEFAULT_MAX_DIFF_PTS;
81 private int mMaxTimeoutCount = DEFAULT_MAX_TIMEOUT_COUNT;
91 private int audioBitRate = 64000;
97 private boolean enableVideoCodecDowngrade =
true;
99 private int mVideoFormat = ImageFormat.NV21;
100 private int mAudioFormat = AudioFormat.ENCODING_PCM_16BIT;
104 private int mExposure = 0;
106 private boolean mUseAliPlayerForBGM =
false;
108 private boolean enableNarrowbandHDForScreenPusher =
true;
110 private boolean enableRTSForInteractiveMode =
false;
115 private boolean enableBitrateControl =
true;
116 private boolean enableAutoResolution =
false;
118 private boolean externMainStream =
false;
120 private int sendDataTimeout = 3000;
123 private String mPausePushImagePath =
"";
124 private String mNetworkPoorPushImagePath =
"";
126 private boolean requireGLSharedContext =
false;
127 private boolean mAudioCaptureWithoutMix =
false;
129 private boolean h5CompatibleMode =
false;
131 private boolean enableDataChannelMessage =
false;
133 private boolean enableRemoteVideoFrameCallback =
false;
137 private String mExtraInfo;
139 private HashMap<String, String> mExtras =
new HashMap<>(4);
141 private String userName;
143 private HashMap<String, String> extras =
new HashMap<>();
148 mediaProjectionPermissionResultData =
null;
149 if (Build.MANUFACTURER.equals(
"Letv") || Build.MODEL.equals(
"Le X620")) {
150 mAudioCaptureWithoutMix =
true;
154 private ArrayList<WaterMarkInfo> waterMarkInfos =
new ArrayList<>();
156 public int getVideoFormat() {
160 public void setVideoFormat(
int videoFormat) {
161 this.mVideoFormat = videoFormat;
164 public int getAudioFormat() {
168 public void setAudioFormat(
int audioFormat) {
169 this.mAudioFormat = audioFormat;
185 this.mLivePushMode = pushMode;
197 return mLivePushMode;
200 private boolean checkLiveInteractiveMode() {
219 this.videoConfig = videoConfig;
221 if (videoConfig !=
null) {
229 this.mMinVideoBitrate = videoConfig.
minBitrate;
234 if (videoConfig.
fps > 0) {
237 if (videoConfig.
gop !=
null) {
238 this.mVideoEncodeGop = videoConfig.
gop;
268 this.mResolution = resolution;
274 if (videoConfig !=
null) {
275 videoConfig.resolution = resolution;
276 videoConfig.targetBitrate = mTargetVideoBitrate;
277 videoConfig.initialBitrate = mInitialVideoBitrate;
278 videoConfig.minBitrate = mMinVideoBitrate;
299 mExtraInfo = extraInfo;
302 public String getUserName() {
306 public void setUserName(String userName) {
307 this.userName = userName;
327 if (extras ==
null || extras.isEmpty()) {
330 this.extras.putAll(extras);
340 return h5CompatibleMode;
353 this.h5CompatibleMode = h5CompatibleMode;
363 return enableDataChannelMessage;
373 this.enableDataChannelMessage = enableDataChannelMessage;
383 return enableRemoteVideoFrameCallback;
393 this.enableRemoteVideoFrameCallback = enable;
405 return mCameraCaptureOutputPreference;
417 this.mCameraCaptureOutputPreference = cameraCaptureOutputPreference;
442 this.monitorLevel = monitorLevel;
466 if (videoConfig !=
null && fps !=
null) {
467 videoConfig.fps = fps.
getFps();
477 return mTargetVideoBitrate;
491 this.mTargetVideoBitrate = targetBitRate;
493 if (videoConfig !=
null) {
494 videoConfig.targetBitrate = targetBitRate;
504 return mMinVideoBitrate;
518 this.mMinVideoBitrate = minBitrate;
520 if (videoConfig !=
null) {
521 videoConfig.minBitrate = minBitrate;
542 this.mBFrames = bFrame;
554 return mAudioSampleRate;
566 this.mAudioSampleRate = audioSample;
589 this.mPreviewOrientation = previewOrientation;
616 this.mPreviewRotation = rotation;
639 this.mCameraType = cameraType;
650 return mPreviewMirror;
661 this.mPreviewMirror = mirror;
683 this.mAudioOnly = audioOnly;
703 this.mVideoOnly = videoOnly;
725 this.mAutoFocus = autoFocus;
736 return mFocusBySensor;
749 this.mFocusBySensor = focusBySensor;
782 return sendDataTimeout;
793 this.sendDataTimeout = sendDataTimeout;
803 return mPausePushImagePath;
814 mPausePushImagePath = path;
824 return mNetworkPoorPushImagePath;
835 mNetworkPoorPushImagePath = path;
844 return mInitialVideoBitrate;
855 this.mInitialVideoBitrate = initialVideoBitrate;
857 if (videoConfig !=
null) {
858 videoConfig.initialBitrate = initialVideoBitrate;
870 return mConnectRetryCount;
881 this.mConnectRetryCount = connectRetryCount;
892 return mConnectRetryInterval;
903 this.mConnectRetryInterval = connectRetryInterval;
925 this.mPushMirror = pushMirror;
937 return mVideoEncodeMode;
949 this.mVideoEncodeMode = videoEncodeMode;
961 return mVideoEncodeType;
973 this.mVideoEncodeType = videoEncodeType;
985 return mAudioEncodeMode;
997 this.mAudioEncodeMode = audioEncodeMode;
1035 mAudioChannels = audioChannels;
1046 return mVideoEncodeGop.
getGop();
1059 mVideoEncodeGop = videoEncodeGop;
1061 if (videoConfig !=
null) {
1062 videoConfig.gop = videoEncodeGop;
1074 return enableVideoCodecDowngrade;
1085 this.enableVideoCodecDowngrade = enableVideoCodecDowngrade;
1111 this.mExposure = exposure;
1137 return mUseAliPlayerForBGM;
1150 enableNarrowbandHDForScreenPusher = enable;
1163 return enableNarrowbandHDForScreenPusher;
1173 return enableRTSForInteractiveMode;
1183 this.enableRTSForInteractiveMode = enableRTSForInteractiveMode;
1207 this.minFps = minFps;
1217 return this.audioCodecType;
1227 this.audioCodecType = audioCodecType;
1239 return audioProfile;
1251 this.audioProfile = audioProfile;
1261 return audioBitRate;
1271 this.audioBitRate = audioBitRate;
1285 return audioSceneMode;
1299 this.audioSceneMode = audioSceneMode;
1311 this.qualityMode = quality;
1333 return mediaProjectionPermissionResultData;
1343 AlivcLivePushConfig.mediaProjectionPermissionResultData = mediaProjectionPermissionResultData;
1354 return enableBitrateControl;
1365 this.enableBitrateControl = enableBitrateControl;
1376 return enableAutoResolution;
1387 this.enableAutoResolution = enableAutoResolution;
1398 return externMainStream;
1411 this.externMainStream = externMainStream;
1426 this.externMainStream = externMainStream;
1427 mAlivcExternMainImageFormat = imageFormat;
1428 mAlivcExternMainSoundFormat = soundFormat;
1440 return mAlivcExternMainImageFormat;
1451 this.mAlivcExternMainImageFormat = alivcExternMainImageFormat;
1463 return mAlivcExternMainSoundFormat;
1475 this.mAlivcExternMainSoundFormat = soundFormat;
1487 return mPreviewDisplayMode;
1499 this.mPreviewDisplayMode = displayMode;
1511 this.requireGLSharedContext = enable;
1523 return this.requireGLSharedContext;
1534 this.mAudioCaptureWithoutMix = on;
1545 return mAudioCaptureWithoutMix;
1563 waterMarkInfo.mWaterMarkPath = path;
1564 waterMarkInfo.mWaterMarkCoordX = x;
1565 waterMarkInfo.mWaterMarkCoordY = y;
1566 waterMarkInfo.mWaterMarkWidth = width;
1567 if (waterMarkInfos.size() < 3) {
1568 waterMarkInfos.add(waterMarkInfo);
1577 waterMarkInfos.clear();
1588 if (path !=
null && path.equals(info.mWaterMarkPath)) {
1589 waterMarkInfos.remove(info);
1602 return waterMarkInfos;
1606 public String toString() {
1607 return "AlivcLivePushConfig{" +
1608 "mLivePushMode=" + mLivePushMode +
1609 ", mResolution=" + mResolution +
1610 ", mTargetVideoBitrate=" + mTargetVideoBitrate +
1611 ", mMinVideoBitrate=" + mMinVideoBitrate +
1612 ", mInitialVideoBitrate=" + mInitialVideoBitrate +
1614 ", mVideoEncodeGop=" + mVideoEncodeGop +
1615 ", videoConfig=" + videoConfig +
1616 ", mBFrames=" + mBFrames +
1617 ", mPreviewOrientation=" + mPreviewOrientation +
1618 ", mPreviewRotation=" + mPreviewRotation +
1619 ", mPreviewDisplayMode=" + mPreviewDisplayMode +
1620 ", mCameraType=" + mCameraType +
1621 ", mPreviewMirror=" + mPreviewMirror +
1622 ", mPushMirror=" + mPushMirror +
1623 ", mAudioOnly=" + mAudioOnly +
1624 ", mVideoOnly=" + mVideoOnly +
1625 ", mAutoFocus=" + mAutoFocus +
1626 ", mFocusBySensor=" + mFocusBySensor +
1627 ", mFlash=" + mFlash +
1628 ", mConnectRetryCount=" + mConnectRetryCount +
1629 ", mConnectRetryInterval=" + mConnectRetryInterval +
1630 ", mPtsMaxDiff=" + mPtsMaxDiff +
1631 ", mMaxTimeoutCount=" + mMaxTimeoutCount +
1632 ", mVideoFormat=" + mVideoFormat +
1633 ", mAudioFormat=" + mAudioFormat +
1634 ", mAlivcExternMainImageFormat=" + mAlivcExternMainImageFormat +
1635 ", mAlivcExternMainSoundFormat=" + mAlivcExternMainSoundFormat +
1636 ", mExposure=" + mExposure +
1637 ", mUseAliPlayerForBGM=" + mUseAliPlayerForBGM +
1638 ", enableNarrowbandHDForScreenPusher=" + enableNarrowbandHDForScreenPusher +
1639 ", enableRTSForInteractiveMode=" + enableRTSForInteractiveMode +
1640 ", minFps=" + minFps +
1641 ", enableBitrateControl=" + enableBitrateControl +
1642 ", enableAutoResolution=" + enableAutoResolution +
1643 ", externMainStream=" + externMainStream +
1644 ", sendDataTimeout=" + sendDataTimeout +
1645 ", qualityMode=" + qualityMode +
1646 ", audioCodecType=" + audioCodecType +
1647 ", audioProfile=" + audioProfile +
1648 ", audioBitRate=" + audioBitRate +
1649 ", audioSceneMode=" + audioSceneMode +
1650 ", mAudioSampleRate=" + mAudioSampleRate +
1651 ", mAudioChannels=" + mAudioChannels +
1652 ", mAudioEncodeMode=" + mAudioEncodeMode +
1653 ", mVideoEncodeType=" + mVideoEncodeType +
1654 ", mVideoEncodeMode=" + mVideoEncodeMode +
1655 ", mVideoEncodeGop=" + mVideoEncodeGop +
1656 ", enableVideoCodecDowngrade=" + enableVideoCodecDowngrade +
1657 ", mPausePushImagePath='" + mPausePushImagePath +
'\'' +
1658 ", mNetworkPoorPushImagePath='" + mNetworkPoorPushImagePath +
'\'' +
1659 ", requireGLSharedContext=" + requireGLSharedContext +
1660 ", mAudioCaptureWithoutMix=" + mAudioCaptureWithoutMix +
1661 ", h5CompatibleMode=" + h5CompatibleMode +
1662 ", enableDataChannelMessage=" + enableDataChannelMessage +
1663 ", mExtraInfo='" + mExtraInfo +
'\'' +
1664 ", mExtras=" + mExtras +
1665 ", userName='" + userName +
'\'' +
1666 ", monitorLevel=" + monitorLevel +
1667 ", waterMarkInfos=" + waterMarkInfos +
AlivcAudioSampleRateEnum getAudioSampleRate()
void setAlivcExternMainSoundFormat(AlivcSoundFormat soundFormat)
void setPushMirror(boolean pushMirror)
void setMinFps(AlivcFpsEnum minFps)
boolean isEnableNarrowbandHDForScreenPusher()
AlivcEncodeType getVideoEncodeType()
void setExternMainStream(boolean externMainStream)
boolean isExternMainStream()
void setAudioSampleRate(AlivcAudioSampleRateEnum audioSample)
void setEnableBitrateControl(boolean enableBitrateControl)
void setNetworkPoorPushImage(String path)
AlivcLiveMode getLivePushMode()
AlivcPreviewDisplayMode getPreviewDisplayMode()
void setPreviewMirror(boolean mirror)
void setEnableRTSForInteractiveMode(boolean enableRTSForInteractiveMode)
void setAudioCaptureWithoutMix(boolean on)
void setEnableNarrowbandHDForScreenPusher(boolean enable)
void setVideoConfig(AlivcLivePushVideoConfig videoConfig)
boolean isH5CompatibleMode()
AlivcSoundFormat getAlivcExternMainSoundFormat()
boolean isEnableVideoCodecDowngrade()
void setVideoEncodeGop(AlivcVideoEncodeGopEnum videoEncodeGop)
void setAutoFocus(boolean autoFocus)
void setResolution(AlivcResolutionEnum resolution)
void setAudioChannels(AlivcAudioChannelEnum audioChannels)
boolean isEnableDataChannelMessage()
void setExternMainStream(boolean externMainStream, AlivcImageFormat imageFormat, AlivcSoundFormat soundFormat)
void setFocusBySensor(boolean focusBySensor)
static void setMediaProjectionPermissionResultData(Intent mediaProjectionPermissionResultData)
boolean getRequireRenderContextNotify()
void setMinVideoBitrate(int minBitrate)
void setVideoEncodeMode(AlivcEncodeModeEnum videoEncodeMode)
void setAudioOnly(boolean audioOnly)
void setAudioProfile(AlivcAudioAACProfileEnum audioProfile)
void setConnectRetryInterval(int connectRetryInterval)
boolean isEnableRemoteVideoFrameCallback()
void setAudioSceneMode(AlivcAudioSceneModeEnum audioSceneMode)
HashMap< String, String > getExtras()
void setEnableDataChannelMessage(boolean enableDataChannelMessage)
void setCameraType(AlivcLivePushCameraTypeEnum cameraType)
void setRequireRenderContextNotify(boolean enable)
String getNetworkPoorPushImage()
void addWaterMark(String path, float x, float y, float width)
boolean isFocusBySensor()
boolean isEnableRTSForInteractiveMode()
void setAudioCodecType(AlivcLiveAudioCodecType audioCodecType)
int getConnectRetryCount()
AlivcLivePushMonitorLevel getMonitorLevel()
void setPreviewDisplayMode(AlivcPreviewDisplayMode displayMode)
void setEnableAutoResolution(boolean enableAutoResolution)
boolean isPreviewMirror()
void setExtras(HashMap< String, String > extras)
String getPausePushImage()
AlivcEncodeModeEnum getAudioEncodeMode()
AlivcAudioSceneModeEnum getAudioSceneMode()
AlivcAudioAACProfileEnum getAudioProfile()
boolean useAliPlayerForBGM()
AlivcLivePushVideoConfig getVideoConfig()
int getConnectRetryInterval()
void setAudioBitRate(int audioBitRate)
void setUseAliPlayerForBGM(boolean useAliPlayerForBGM)
int getPreviewOrientation()
void setPreviewRotation(AlivcPreviewRotationEnum rotation)
void setEnableRemoteVideoFrameCallback(boolean enable)
void setConnectRetryCount(int connectRetryCount)
boolean isEnableBitrateControl()
void setMonitorLevel(AlivcLivePushMonitorLevel monitorLevel)
void setH5CompatibleMode(boolean h5CompatibleMode)
AlivcQualityModeEnum getQualityMode()
void setEnableVideoCodecDowngrade(boolean enableVideoCodecDowngrade)
int getInitialVideoBitrate()
AlivcLiveAudioCodecType getAudioCodecType()
void setVideoOnly(boolean videoOnly)
void setCameraCaptureOutputPreference(AlivcLiveCameraCaptureOutputPreference cameraCaptureOutputPreference)
void setFps(AlivcFpsEnum fps)
void setVideoEncodeType(AlivcEncodeType videoEncodeType)
void setQualityMode(AlivcQualityModeEnum quality)
void setSendDataTimeout(int sendDataTimeout)
ArrayList< WaterMarkInfo > getWaterMarkInfos()
void setFlash(boolean flash)
void setExposure(int exposure)
void setLivePushMode(AlivcLiveMode pushMode)
Intent getMediaProjectionPermissionResultData()
AlivcLiveCameraCaptureOutputPreference getCameraCaptureOutputPreference()
void setInitialVideoBitrate(int initialVideoBitrate)
boolean isEnableAutoResolution()
void setPreviewOrientation(AlivcPreviewOrientationEnum previewOrientation)
void setBFrames(int bFrame)
AlivcResolutionEnum getResolution()
int getTargetVideoBitrate()
void setAlivcExternMainImageFormat(AlivcImageFormat alivcExternMainImageFormat)
AlivcEncodeModeEnum getVideoEncodeMode()
void setTargetVideoBitrate(int targetBitRate)
void setAudioEncodeMode(AlivcEncodeModeEnum audioEncodeMode)
boolean getAudioCaptureWithoutMix()
AlivcImageFormat getAlivcExternMainImageFormat()
void setPausePushImage(String path)
void setExtraInfo(String extraInfo)
void removeWaterMark(String path)
AlivcVideoEncodeGopEnum gop
AlivcResolutionEnum resolution
static AlivcFpsEnum fromValue(int value)
ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FILL
static int getMinBitrate(AlivcResolutionEnum resolution, AlivcLiveMode liveMode)
static int getTargetBitrate(AlivcResolutionEnum resolution, AlivcLiveMode liveMode)
static int getResolutionWidth(AlivcResolutionEnum resolution, AlivcLiveMode liveMode)
static int getInitBitrate(AlivcResolutionEnum resolution, AlivcLiveMode liveMode)
static int getResolutionHeight(AlivcResolutionEnum resolution, AlivcLiveMode liveMode)