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;
47 public static final String CONFIG =
"AlivcLivePushConfig";
52 private int mTargetVideoBitrate = DEFAULT_VALUE_INT_TARGET_BITRATE;
53 private int mMinVideoBitrate = DEFAULT_VALUE_INT_MIN_BITRATE;
54 private int mInitialVideoBitrate = DEFAULT_VALUE_INT_INIT_BITRATE;
59 private int mBFrames = 0;
60 private static Intent mediaProjectionPermissionResultData =
null;
65 private boolean mPreviewMirror = DEFAULT_VALUE_PREVIEW_MIRROR;
66 private boolean mPushMirror = DEFAULT_VALUE_PUSH_MIRROR;
67 private boolean mAudioOnly = DEFAULT_VALUE_AUDIO_ONLY;
68 private boolean mVideoOnly = DEFAULT_VALUE_VIDEO_ONLY;
69 private boolean mAutoFocus = DEFAULT_VALUE_AUTO_FOCUS;
70 private boolean mFocusBySensor =
false;
71 private boolean mFlash = DEFAULT_VALUE_FLASH;
74 private int mConnectRetryCount = DEFAULT_VALUE_INT_AUDIO_RETRY_COUNT;
75 private int mConnectRetryInterval = DEFAULT_VALUE_INT_RETRY_INTERVAL;
77 private long mPtsMaxDiff = DEFAULT_MAX_DIFF_PTS;
78 private int mMaxTimeoutCount = DEFAULT_MAX_TIMEOUT_COUNT;
88 private int audioBitRate = 64000;
94 private boolean enableVideoCodecDowngrade =
true;
96 private int mVideoFormat = ImageFormat.NV21;
97 private int mAudioFormat = AudioFormat.ENCODING_PCM_16BIT;
101 private int mExposure = 0;
103 private boolean mUseAliPlayerForBGM =
false;
105 private boolean enableNarrowbandHDForScreenPusher =
true;
107 private boolean enableRTSForInteractiveMode =
false;
112 private boolean enableBitrateControl =
true;
113 private boolean enableAutoResolution =
false;
115 private boolean externMainStream =
false;
117 private int sendDataTimeout = 3000;
120 private String mPausePushImagePath =
"";
121 private String mNetworkPoorPushImagePath =
"";
123 private boolean requireGLSharedContext =
false;
124 private boolean mAudioCaptureWithoutMix =
false;
126 private boolean h5CompatibleMode =
false;
128 private boolean enableDataChannelMessage =
false;
130 private boolean enableRemoteVideoFrameCallback =
false;
134 private String mExtraInfo;
136 private HashMap<String, String> mExtras =
new HashMap<>(4);
138 private String userName;
140 private HashMap<String, String> extras =
new HashMap<>();
145 mediaProjectionPermissionResultData =
null;
146 if (Build.MANUFACTURER.equals(
"Letv") || Build.MODEL.equals(
"Le X620")) {
147 mAudioCaptureWithoutMix =
true;
151 private ArrayList<WaterMarkInfo> waterMarkInfos =
new ArrayList<>();
153 public int getVideoFormat() {
157 public void setVideoFormat(
int videoFormat) {
158 this.mVideoFormat = videoFormat;
161 public int getAudioFormat() {
165 public void setAudioFormat(
int audioFormat) {
166 this.mAudioFormat = audioFormat;
182 this.mLivePushMode = pushMode;
194 return mLivePushMode;
197 private boolean checkLiveInteractiveMode() {
216 this.videoConfig = videoConfig;
218 if (videoConfig !=
null) {
226 this.mMinVideoBitrate = videoConfig.
minBitrate;
231 if (videoConfig.
fps > 0) {
234 if (videoConfig.
gop !=
null) {
235 this.mVideoEncodeGop = videoConfig.
gop;
266 this.mResolution = resolution;
272 if (videoConfig !=
null) {
273 videoConfig.resolution = resolution;
274 videoConfig.targetBitrate = mTargetVideoBitrate;
275 videoConfig.initialBitrate = mInitialVideoBitrate;
276 videoConfig.minBitrate = mMinVideoBitrate;
297 mExtraInfo = extraInfo;
300 public String getUserName() {
304 public void setUserName(String userName) {
305 this.userName = userName;
325 if (extras ==
null || extras.isEmpty()) {
328 this.extras.putAll(extras);
338 return h5CompatibleMode;
352 this.h5CompatibleMode = h5CompatibleMode;
362 return enableDataChannelMessage;
372 this.enableDataChannelMessage = enableDataChannelMessage;
382 return enableRemoteVideoFrameCallback;
392 this.enableRemoteVideoFrameCallback = enable;
404 return mCameraCaptureOutputPreference;
416 this.mCameraCaptureOutputPreference = cameraCaptureOutputPreference;
441 this.monitorLevel = monitorLevel;
465 if (videoConfig !=
null && fps !=
null) {
466 videoConfig.fps = fps.
getFps();
476 return mTargetVideoBitrate;
490 this.mTargetVideoBitrate = targetBitRate;
492 if (videoConfig !=
null) {
493 videoConfig.targetBitrate = targetBitRate;
503 return mMinVideoBitrate;
517 this.mMinVideoBitrate = minBitrate;
519 if (videoConfig !=
null) {
520 videoConfig.minBitrate = minBitrate;
543 this.mBFrames = bFrame;
555 return mAudioSampleRate;
567 this.mAudioSampleRate = audioSample;
590 this.mPreviewOrientation = previewOrientation;
617 this.mPreviewRotation = rotation;
640 this.mCameraType = cameraType;
651 return mPreviewMirror;
662 this.mPreviewMirror = mirror;
684 this.mAudioOnly = audioOnly;
706 this.mVideoOnly = videoOnly;
728 this.mAutoFocus = autoFocus;
739 return mFocusBySensor;
752 this.mFocusBySensor = focusBySensor;
785 return sendDataTimeout;
796 this.sendDataTimeout = sendDataTimeout;
806 return mPausePushImagePath;
817 mPausePushImagePath = path;
827 return mNetworkPoorPushImagePath;
838 mNetworkPoorPushImagePath = path;
847 return mInitialVideoBitrate;
858 this.mInitialVideoBitrate = initialVideoBitrate;
860 if (videoConfig !=
null) {
861 videoConfig.initialBitrate = initialVideoBitrate;
873 return mConnectRetryCount;
884 this.mConnectRetryCount = connectRetryCount;
895 return mConnectRetryInterval;
906 this.mConnectRetryInterval = connectRetryInterval;
928 this.mPushMirror = pushMirror;
940 return mVideoEncodeMode;
952 this.mVideoEncodeMode = videoEncodeMode;
964 return mVideoEncodeType;
976 this.mVideoEncodeType = videoEncodeType;
988 return mAudioEncodeMode;
1000 this.mAudioEncodeMode = audioEncodeMode;
1038 mAudioChannels = audioChannels;
1049 return mVideoEncodeGop.
getGop();
1062 mVideoEncodeGop = videoEncodeGop;
1064 if (videoConfig !=
null) {
1065 videoConfig.gop = videoEncodeGop;
1078 return enableVideoCodecDowngrade;
1090 this.enableVideoCodecDowngrade = enableVideoCodecDowngrade;
1116 this.mExposure = exposure;
1146 return mUseAliPlayerForBGM;
1159 enableNarrowbandHDForScreenPusher = enable;
1172 return enableNarrowbandHDForScreenPusher;
1182 return enableRTSForInteractiveMode;
1192 this.enableRTSForInteractiveMode = enableRTSForInteractiveMode;
1216 this.minFps = minFps;
1226 return this.audioCodecType;
1236 this.audioCodecType = audioCodecType;
1248 return audioProfile;
1260 this.audioProfile = audioProfile;
1270 return audioBitRate;
1280 this.audioBitRate = audioBitRate;
1294 return audioSceneMode;
1308 this.audioSceneMode = audioSceneMode;
1320 this.qualityMode = quality;
1342 return mediaProjectionPermissionResultData;
1352 AlivcLivePushConfig.mediaProjectionPermissionResultData = mediaProjectionPermissionResultData;
1363 return enableBitrateControl;
1374 this.enableBitrateControl = enableBitrateControl;
1385 return enableAutoResolution;
1396 this.enableAutoResolution = enableAutoResolution;
1407 return externMainStream;
1421 this.externMainStream = externMainStream;
1437 this.externMainStream = externMainStream;
1438 mAlivcExternMainImageFormat = imageFormat;
1439 mAlivcExternMainSoundFormat = soundFormat;
1451 return mAlivcExternMainImageFormat;
1462 this.mAlivcExternMainImageFormat = alivcExternMainImageFormat;
1474 return mAlivcExternMainSoundFormat;
1486 this.mAlivcExternMainSoundFormat = soundFormat;
1498 return mPreviewDisplayMode;
1510 this.mPreviewDisplayMode = displayMode;
1522 this.requireGLSharedContext = enable;
1534 return this.requireGLSharedContext;
1545 this.mAudioCaptureWithoutMix = on;
1556 return mAudioCaptureWithoutMix;
1574 waterMarkInfo.mWaterMarkPath = path;
1575 waterMarkInfo.mWaterMarkCoordX = x;
1576 waterMarkInfo.mWaterMarkCoordY = y;
1577 waterMarkInfo.mWaterMarkWidth = width;
1578 if (waterMarkInfos.size() < 3) {
1579 waterMarkInfos.add(waterMarkInfo);
1588 waterMarkInfos.clear();
1599 if (path !=
null && path.equals(info.mWaterMarkPath)) {
1600 waterMarkInfos.remove(info);
1613 return waterMarkInfos;
1617 public String toString() {
1618 return "AlivcLivePushConfig{" +
1619 "mLivePushMode=" + mLivePushMode +
1620 ", mResolution=" + mResolution +
1621 ", mTargetVideoBitrate=" + mTargetVideoBitrate +
1622 ", mMinVideoBitrate=" + mMinVideoBitrate +
1623 ", mInitialVideoBitrate=" + mInitialVideoBitrate +
1625 ", mVideoEncodeGop=" + mVideoEncodeGop +
1626 ", videoConfig=" + videoConfig +
1627 ", mBFrames=" + mBFrames +
1628 ", mPreviewOrientation=" + mPreviewOrientation +
1629 ", mPreviewRotation=" + mPreviewRotation +
1630 ", mPreviewDisplayMode=" + mPreviewDisplayMode +
1631 ", mCameraType=" + mCameraType +
1632 ", mPreviewMirror=" + mPreviewMirror +
1633 ", mPushMirror=" + mPushMirror +
1634 ", mAudioOnly=" + mAudioOnly +
1635 ", mVideoOnly=" + mVideoOnly +
1636 ", mAutoFocus=" + mAutoFocus +
1637 ", mFocusBySensor=" + mFocusBySensor +
1638 ", mFlash=" + mFlash +
1639 ", mConnectRetryCount=" + mConnectRetryCount +
1640 ", mConnectRetryInterval=" + mConnectRetryInterval +
1641 ", mPtsMaxDiff=" + mPtsMaxDiff +
1642 ", mMaxTimeoutCount=" + mMaxTimeoutCount +
1643 ", mVideoFormat=" + mVideoFormat +
1644 ", mAudioFormat=" + mAudioFormat +
1645 ", mAlivcExternMainImageFormat=" + mAlivcExternMainImageFormat +
1646 ", mAlivcExternMainSoundFormat=" + mAlivcExternMainSoundFormat +
1647 ", mExposure=" + mExposure +
1648 ", mUseAliPlayerForBGM=" + mUseAliPlayerForBGM +
1649 ", enableNarrowbandHDForScreenPusher=" + enableNarrowbandHDForScreenPusher +
1650 ", enableRTSForInteractiveMode=" + enableRTSForInteractiveMode +
1651 ", minFps=" + minFps +
1652 ", enableBitrateControl=" + enableBitrateControl +
1653 ", enableAutoResolution=" + enableAutoResolution +
1654 ", externMainStream=" + externMainStream +
1655 ", sendDataTimeout=" + sendDataTimeout +
1656 ", qualityMode=" + qualityMode +
1657 ", audioCodecType=" + audioCodecType +
1658 ", audioProfile=" + audioProfile +
1659 ", audioBitRate=" + audioBitRate +
1660 ", audioSceneMode=" + audioSceneMode +
1661 ", mAudioSampleRate=" + mAudioSampleRate +
1662 ", mAudioChannels=" + mAudioChannels +
1663 ", mAudioEncodeMode=" + mAudioEncodeMode +
1664 ", mVideoEncodeType=" + mVideoEncodeType +
1665 ", mVideoEncodeMode=" + mVideoEncodeMode +
1666 ", mVideoEncodeGop=" + mVideoEncodeGop +
1667 ", enableVideoCodecDowngrade=" + enableVideoCodecDowngrade +
1668 ", mPausePushImagePath='" + mPausePushImagePath +
'\'' +
1669 ", mNetworkPoorPushImagePath='" + mNetworkPoorPushImagePath +
'\'' +
1670 ", requireGLSharedContext=" + requireGLSharedContext +
1671 ", mAudioCaptureWithoutMix=" + mAudioCaptureWithoutMix +
1672 ", h5CompatibleMode=" + h5CompatibleMode +
1673 ", enableDataChannelMessage=" + enableDataChannelMessage +
1674 ", mExtraInfo='" + mExtraInfo +
'\'' +
1675 ", mExtras=" + mExtras +
1676 ", userName='" + userName +
'\'' +
1677 ", monitorLevel=" + monitorLevel +
1678 ", waterMarkInfos=" + waterMarkInfos +
「Main API」Live push config
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
Enumeration of camera capture output preference.
Enumeration of streaming audio profile.
Enumeration of streaming audio channel.
Enumeration of streaming audio sample rate.
Enumeration of streaming audio scene mode.
Enumeration of streaming encode mode.
Enumeration of streaming encode type.
Enumeration of streaming video fps.
static AlivcFpsEnum fromValue(int value)
Enumeration of streaming video camera type.
Live push preview display mode.
ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FILL
Live push preview orientation.
Live push preview rotation.
Live push video quality mode.
Live push video resolution.
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)
Live push video encode GOP.