本文主要介紹了Android端直播推流SDK的功能和使用方法。包括SDK的主要介面、基本使用流程說明,同時還提供了相關功能的使用樣本。旨在協助開發人員更好地理解和應用SDK進行直播推流操作。
功能特性
支援RTMP推流協議。
支援基於RTC的RTS超低延時直播推拉流協議。
使用視頻H.264編碼以及音頻AAC編碼。
支援碼控、解析度、顯示模式等自訂配置。
支援多種網路攝影機相關操作。
支援即時美顏和自訂美顏效果調節。
支援增、刪動態貼紙實現動態浮水印效果。
支援錄屏直播。
支援自訂YUV、PCM等外部音視頻輸入。
支援多路混流功能。
支援純音視頻推流以及後台推流。
支援背景音樂及其相關操作。
可使用視訊截圖功能。
支援自動重連、異常處理。
支援音頻3A演算法。
增加視頻軟編、硬編切換邏輯,提升編碼模組穩定性。
功能限制
使用Android推流SDK需注意以下限制:
您只能在推流之前設定橫豎屏模式,不支援在直播的過程中即時切換。
在推流設定為橫屏模式時,需設定介面為不允許自動旋轉。
在硬編模式下,考慮編碼器相容問題解析度會使用16的倍數,如設定為540P,則輸出的解析度為544*960,在設定播放器視圖大小時需按輸出解析度等比縮放,避免黑邊等問題。
API文檔
使用流程
基本使用流程如下:
功能使用
註冊SDK
申請並配置License請參見License整合指南。
在使用推流功能之前,需要先進行註冊,否則將無法使用推流SDK功能。
請在較早的位置(使用推流SDK前)調用註冊License介面
AlivcLiveBase.setListener(new AlivcLiveBaseListener() {
@Override
public void onLicenceCheck(AlivcLivePushConstants.AlivcLiveLicenseCheckResultCode result, String reason) {
Log.e(TAG, "onLicenceCheck: " + result + ", " + reason);
}
});
AlivcLiveBase.registerSDK();通過AlivcLiveBase類,可以設定記錄層級、設定本地日誌路徑、擷取SDK版本等。
接入方需要調用AlivcLiveBase中的registerSDK方法,進行SDK License註冊。
在AlivcLiveBase#setListener介面的onLicenceCheck方法,非同步判斷License是否配置成功。
說明該回調僅在初始化pusher執行個體後觸發。
配置推流參數
基本推流配置對應參數都有預設值,建議採用預設值,即您可以進行簡單初始化,不做配置。
// 初始化推流配置類
AlivcLivePushConfig mAlivcLivePushConfig = new AlivcLivePushConfig();
// 設定推流模式,預設普通推流模式
mAlivcLivePushConfig.setLivePushMode(AlivcLiveMode.AlivcLiveBasicMode);
// 設定解析度,預設540P
mAlivcLivePushConfig.setResolution(AlivcResolutionEnum.RESOLUTION_540P);
// 設定幀率,預設20fps
mAlivcLivePushConfig.setFps(AlivcFpsEnum.FPS_25);
// 設定視頻編碼Gop,單位秒,預設2秒
mAlivcLivePushConfig.setVideoEncodeGop(AlivcVideoEncodeGopEnum.GOP_TWO);
// 開啟碼率控制,預設為true
mAlivcLivePushConfig.setEnableBitrateControl(true);
// 設定橫豎屏,預設為豎屏,可設定home鍵向左或向右橫屏
mAlivcLivePushConfig.setPreviewOrientation(AlivcPreviewOrientationEnum.ORIENTATION_PORTRAIT);
// 設定音頻編碼模式,預設AAC-LC
mAlivcLivePushConfig.setAudioProfile(AlivcAudioAACProfileEnum.AAC_LC);
// 設定視頻編碼模式,預設硬編
mAlivcLivePushConfig.setVideoEncodeMode(AlivcEncodeModeEnum.Encode_MODE_HARD);
// 設定音頻編碼模式,預設軟編
mAlivcLivePushConfig.setAudioEncodeMode(AlivcEncodeModeEnum.Encode_MODE_SOFT);
// 設定網路攝影機前後置,預設前置
mAlivcLivePushConfig.setCameraType(AlivcLivePushCameraTypeEnum.CAMERA_TYPE_FRONT);
// 設定App推後台或暫停時推圖片
mAlivcLivePushConfig.setPausePushImage("TODO: Image Path");
// 設定弱網推圖片
mAlivcLivePushConfig.setNetworkPoorPushImage("TODO: Image Path");綜合手機效能和網路頻寬要求,建議您將解析度設定為540P(主流移動直播App基本都採用540P)。
關閉碼率控制後,碼率將固定在初始碼率,不會在設定的目標碼率和最小碼率之間自適應調整。如果網路情況不穩定,可能造成播放卡頓,請慎用。
推流(網路攝影機推流)
初始化。
在配置好推流參數後,可以使用推流SDK的init方法進行初始化。範例程式碼如下:
AlivcLivePusher mAlivcLivePusher = new AlivcLivePusher(); mAlivcLivePusher.init(mContext, mAlivcLivePushConfig);說明AlivcLivePusher目前不支援多執行個體,所以一個init必須對應有一個destroy。
註冊預覽回調。
註冊預覽回調可通過setLivePushInfoListener方法實現:
/** * 設定推流通知事件 * * @param infoListener 通知監聽器 */ mAlivcLivePusher.setLivePushInfoListener(new AlivcLivePushInfoListener() { @Override public void onPreviewStarted(AlivcLivePusher pusher) { //預覽開始通知 } //其他Override方法 //.... //.... });開始預覽。
livePusher對象初始化及回調配置完成之後,可以進行開始預覽操作。預覽時需要傳入網路攝影機預覽的顯示SurfaceView。範例程式碼如下:
mAlivcLivePusher.startPreview(mSurfaceView)//開始預覽,也可根據需求調用非同步介面startPreviewAysnc來實現開始推流。
在onPreviewStarted回調方法內添加如下代碼。
mAlivcLivePusher.startPush(mPushUrl);說明推流地址支援RTMP和超低延時直播RTS(artc://)推流地址,地址擷取可參見產生推流地址和播放地址。
阿里雲ApsaraVideo for Live暫不支援同一時間向同一個推流URL進行多路推流(第二路推流會被拒絕)。
常用推流方法
推流量控制主要包括開始推流、停止推流、停止預覽、重新推流、暫停推流、恢複推流、銷毀推流等操作,使用者可以根據業務需求添加按鈕進行操作。
/*正在推流狀態下可調用暫停推流。暫停推流後,視頻預覽和視頻推流保留在最後一幀,音頻推流繼續*/
mAlivcLivePusher.pause();
/*暫停狀態下可調用恢複推流。恢複推流後,音視頻預覽與推流恢複正常*/
mAlivcLivePusher.resume();
/*推流狀態下可調用停止推流,完成後推流停止*/
mAlivcLivePusher.stopPush();
/*在預覽狀態下才可以調用停止預覽,正在推流狀態下,調用停止預覽無效。預覽停止後,預覽畫面定格在最後一幀*/
mAlivcLivePusher.stopPreview();
/*推流狀態下或者接收到所有Error相關回調狀態下可調用重新推流, 且Error狀態下只可以調用此介面(或者reconnectPushAsync重連)或者調用destory銷毀推流。完成後重新開始推流,重啟ALivcLivePusher內部的一切資源,包括預覽、推流等等restart*/
mAlivcLivePusher.restartPush();
/*推流狀態下或者接收到AlivcLivePusherNetworkDelegate相關的Error回調狀態下可調用此介面, 且Error狀態下只可以調用此介面(或者restartPush重新推流)或者調用destory銷毀推流。完成後推流重連,重新連結推流RTMP*/
mAlivcLivePusher.reconnectPushAsync();
/*銷毀推流後,推流停止,預覽停止,預覽畫面移除。AlivcLivePusher相關的一切資源銷毀*/
mAlivcLivePusher.destroy();網路攝影機相關操作
網路攝影機相關操作包括推流狀態、暫停狀態、重連狀態等,還可操作網路攝影機切換、閃光燈、焦距、變焦和鏡像設定等。範例程式碼如下:
/*切換前後網路攝影機*/
mAlivcLivePusher.switchCamera();
/*開啟/關閉閃光燈,在自拍時開啟閃關燈無效*/
mAlivcLivePusher.setFlash(true);
/*焦距調整,即可實現採集畫面的縮放功能。縮放範圍為[0,getMaxZoom()]。*/
mAlivcLivePusher.setZoom(5);
/*手動對焦。手動聚焦需要傳入兩個參數:1.point 對焦的點(需要對焦的點的座標);2.autoFocus 是否需要自動對焦,只有本次對焦操作調用該介面時,該參數才生效。後續是否自動對焦沿用上述自動聚焦介面設定值*/
mAlivcLivePusher.focusCameraAtAdjustedPoint(x, y, true);
/*設定是否自動對焦*/
mAlivcLivePusher.setAutoFocus(true);
/*鏡像設定。鏡像相關介面有兩個,PushMirror推流鏡像和PreviewMirror預覽鏡像。PushMirror設定僅對播放畫面生效,PreviewMirror僅對預覽畫面生效,兩者互不影響*/
mAlivcLivePusher.setPreviewMirror(false);
mAlivcLivePusher.setPushMirror(false);網路攝影機相關介面只能在開始預覽之後調用。
錄屏推流(螢幕畫面分享推流)
推流SDK支援錄屏推流。使用錄屏推流需在初始化操作、設定預覽及開始推流之後進行相關配置。錄屏採用MediaProjection,需要使用者請求許可權,將許可權請求返回的資料通過此介面設定,即開啟錄屏模式。錄屏情況下,預設不開啟網路攝影機。
設定錄屏推流
//resultData 錄屏系統intent
mAlivcLivePushConfig.setMediaProjectionPermissionResultData(resultData);設定旋轉螢幕
錄屏模式下,可設定感應的旋轉螢幕角度,支援橫屏和豎屏錄製,範例程式碼如下:
mAlivcLivePusher.setScreenOrientation(0);需要在應用程式層監聽OrientationEventListener事件,在橫豎屏切換時,將旋轉角度設定到此介面。
設定隱私
當主播在錄屏時要進行密碼輸入等操作時,主播可以開啟隱私保護功能,結束操作後可以關閉隱私,範例程式碼如下:
mAlivcLivePusher.pauseScreenCapture();//開啟隱私保護
mAlivcLivePusher.resumeScreenCapture();//關閉隱私保護暫停錄屏,如果在config中設定了setPausePushImage則觀眾端會在此介面後顯示圖片。如果沒有,則觀眾端停留在最後一幀。
錄屏+網路攝影機推流
在進行錄屏推流時,可以開啟網路攝影機實現錄屏+網路攝影機推流,錄屏+網路攝影機推流分為兩種情況:
主播端有網路攝影機預覽畫面。
主播和觀眾都能看到網路攝影機的畫面。
主播端沒有網路攝影機預覽畫面。
比如遊戲直播時,主播不想讓網路攝影機畫面擋住遊戲畫面。而觀眾端觀看到的直播內容包含主播的網路攝影機畫面。
主播端有網路攝影機預覽畫面
在錄屏開啟成功後,調用開啟或關閉網路攝影機預覽介面。
mAlivcLivePusher.startCamera(surfaceView);//開啟網路攝影機預覽
mAlivcLivePusher.stopCamera();//關閉網路攝影機預覽錄屏模式下網路攝影機預覽surfaceView的長寬建議設定成1:1,這樣在旋轉螢幕時無需調整surfaceview。
若設定的長寬不為1:1,則需要在旋轉螢幕時,調整surfaceView的比例後,先stopCamera再startCamera。
如果主播端不需要預覽,則surfaceview填為null。
主播端沒有網路攝影機預覽畫面
當主播端不需要網路攝影機預覽而觀眾端需要時,可以開啟網路攝影機混流。
mAlivcLivePusher.startCameraMix(x, y, w, h);//開啟網路攝影機混流,並設定x,y,w,h混流布局
mAlivcLivePusher.stopCameraMix();//停止網路攝影機混流預覽顯示模式
推流SDK支援三種預覽模式,預覽顯示模式不影響推流。
ALIVC_LIVE_PUSHER_PREVIEW_SCALE_FILL:預覽顯示時,鋪滿視窗。當視頻比例和視窗比例不一致時,預覽會有變形。
ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FIT:預覽顯示時,保持視頻比例。當視頻比例與視窗比例不一致時,預覽會有黑邊。
ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FILL:預覽顯示時,剪下視頻以適配視窗比例。當視頻比例和視窗比例不一致時,預覽會裁剪視頻。
範例程式碼如下:
mAlivcLivePushConfig.setPreviewDisplayMode(AlivcPreviewDisplayMode.ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FIT);圖片推流
為了更好的使用者體驗,推流SDK提供了後台圖片推流和碼率過低時進行圖片推流的設定。
當SDK退至後台時預設暫停推流視頻,只推音頻流,此時可以進行圖片推流。例如,在圖片上提醒使用者主播離開片刻,稍後回來。
mAlivcLivePushConfig.setPausePushImage("退後台png圖片路徑");//設定使用者後台推流的圖片當網路較差時您可以根據自己的需求設定推流一張靜態圖片。設定圖片後,SDK檢測到當前碼率較低時,會推流此圖片,避免視頻流卡頓。範例程式碼如下所示:
mAlivcLivePushConfig.setNetworkPoorPushImage("網路差png圖片路徑");//設定網路較差時推流的圖片純音頻推流
mAlivcLivePushConfig.setAudioOnly(true);推送外部音視頻流
推流SDK支援將App外部的音視頻源輸入進行推流,比如推送一個音視頻檔案。
推送外部音視頻流之前,需要開啟自訂音視頻流輸入功能。
/**
* 其他參數:如輸出解析度,音頻採樣率,通道數等在config裡,setResolution,setAudioSamepleRate,setAudioChannels裡設定
*/
mAlivcLivePushConfig.setExternMainStream(true,AlivcImageFormat.IMAGE_FORMAT_YUVNV12,AlivcSoundFormat.SOUND_FORMAT_S16);開啟自訂音視頻流輸入功能之後,就可以推送外部音視頻流。
推送外部音頻流
/**
* 此介面不控制時序,需要調用方控制輸入音訊框架的時序
*/
mAlivcLivePusher.inputStreamAudioData(byte[] data, int size, int sampleRate, int channels, long pts);推送外部視頻流
/**
* 此介面不控制時序,需要調用方控制輸入視訊框架的時序
*/
mAlivcLivePusher.inputStreamVideoData(byte[] data, int width, int height, int stride, int size, long pts, int rotation);配置浮水印
推流SDK提供了添加浮水印功能,並且支援添加多個浮水印。浮水印圖片必須為PNG格式圖片。範例程式碼如下:
mAlivcLivePushConfig.addWaterMark(waterPath,0.1,0.2,0.3);//添加浮水印x、y、width為相對值,例如x為0.1表示浮水印的x值為推流畫面x軸的10%位置,如果推流解析度為540*960,則浮水印x值為54。
浮水印圖片的高度,按照浮水印圖片的真實寬高與輸入的width值等比縮放。
要實現文字浮水印,可以先將文字轉換為圖片,再使用此介面添加浮水印。
設定視頻品質
視頻品質支援三種模式:清晰度優先模式,流暢度優先模式,自訂模式。
設定視頻品質需要開啟碼率控制:mAlivcLivePushConfig.setEnableBitrateControl(true);
清晰度優先模式(預設)
清晰度優先模式下,SDK內部會對碼率參數進行配置,優先保障推流視頻的清晰度。
mAlivcLivePushConfig.setQualityMode(AlivcQualityModeEnum.QM_RESOLUTION_FIRST);//清晰度優先流暢度優先模式
流暢度優先模式下,SDK內部會對碼率參數進行配置,優先保障推流視頻的流暢度。
mAlivcLivePushConfig.setQualityMode(AlivcQualityModeEnum.QM_FLUENCY_FIRST);//流暢度優先自訂模式
自訂模式下,SDK會根據開發人員設定的碼率進行配置。設定為自訂模式時,需要自己定義初始碼率、最小碼率和目標碼率。
目標碼率:當網路較好時,碼率會逐步提高到目標碼率,以提高視頻清晰度。
最小碼率:當網路較差時,碼率會逐步降低到最小碼率,以減少視頻的卡頓。
初始碼率:開始直播時的碼率。
mAlivcLivePushConfig.setQualityMode(AlivcQualityModeEnum.QM_CUSTOM);//自訂模式
mAlivcLivePushConfig.setTargetVideoBitrate(1000); //目標碼率1000kbps
mAlivcLivePushConfig.setMinVideoBitrate(300); //最小碼率300kbps
mAlivcLivePushConfig.setInitialVideoBitrate(800); //初始碼率800kbps設定自訂碼率時,請參考阿里雲推薦設定配置對應碼率。推薦設定請參考下表內容:
表 1. 自訂碼率控制推薦設定(清晰度優先)
解析度 | 初始碼率 initialVideoBitrate | 最小碼率 minVideoBitrate | 目標碼率 targetVideoBitrate |
360P | 600 | 300 | 1000 |
480P | 800 | 300 | 1200 |
540P | 1000 | 600 | 1400 |
720P | 1500 | 600 | 2000 |
1080P | 1800 | 1200 | 2500 |
表 2. 自訂碼率控制推薦設定(流暢度優先)
解析度 | 初始碼率 initialVideoBitrate | 最小碼率 minVideoBitrate | 目標碼率 targetVideoBitrate |
360P | 400 | 200 | 600 |
480P | 600 | 300 | 800 |
540P | 800 | 300 | 1000 |
720P | 1000 | 300 | 1200 |
1080P | 1500 | 1200 | 2200 |
解析度自適應
解析度自適應即動態調整推流解析度。開啟功能後,當網路較差時會自動降低解析度以提高視頻的流暢度和清晰度。範例程式碼如下:
mAlivcLivePushConfig.setEnableAutoResolution(true); // 開啟解析度自適應,預設為false解析度自適應只有在視頻品質模式為清晰度優先或流暢度優先時才會生效,自訂模式時無效。
某些播放器可能不支援動態解析度,如果您需要使用解析度自適應功能,建議使用阿里雲播放器。
背景音樂
推流SDK提供了背景音樂播放、混音、降噪、耳返、靜音等功能。範例程式碼如下:
/*開始播放背景音樂。*/
mAlivcLivePusher.startBGMAsync(mPath);
/*停止播放背景音樂。若當前現正播放BGM,並且需要切換歌曲,只需要調用開始播放背景音樂介面即可,無需停止當前現正播放的背景音樂*/
mAlivcLivePusher.stopBGMAsync();
/*暫停播放背景音樂,背景音樂開始播放後才可調用此介面*/
mAlivcLivePusher.pauseBGM();
/*恢複播放背景音樂,背景音樂暫停狀態下才可調用此介面*/
mAlivcLivePusher.resumeBGM();
/*開啟迴圈播放音樂*/
mAlivcLivePusher.setBGMLoop(true);
/*設定降噪開關。開啟降噪後,將對採集到的聲音中非人聲的部分進行過濾處理。可能存在對人聲稍微抑製作用,建議讓使用者自由選擇是否開啟降噪功能,預設不使用*/
mAlivcLivePusher.setAudioDenoise(true);
/*設定耳返開關。耳返功能主要應用於KTV情境。開啟耳返後,插入耳機將在耳機中聽到主播說話聲音。關閉後,插入耳機無法聽到人聲。未插入耳機的情況下,耳返不起作用*/
mAlivcLivePusher.setBGMEarsBack(true);
/*混音設定,提供背景音樂和人聲採集音量調整*/
mAlivcLivePusher.setBGMVolume(50);//設定背景音樂音量
mAlivcLivePusher.setCaptureVolume(50);//設定人聲採集音量
/*設定靜音。靜音後音樂聲音和人聲輸入都會靜音。要單獨設定音樂或人聲靜音可以通過混音音量設定介面來調整*/
mAlivcLivePusher.setMute(true);背景音樂相關介面在開始預覽之後才可調用。
推流截圖
推流SDK提供了本地視頻流截圖功能,範例程式碼如下:
// 視頻流截圖,參數:截取圖片的個數、每張圖片的間隔、介面回調
pusher.snapshot(1, 1, new AlivcSnapshotListener() {
@Override
public void onSnapshot(Bitmap bmp) {
// 可以將截圖轉儲到本地png檔案,下面是範例程式碼
String dateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss-SS").format(new Date());
File f = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "snapshot-" + dateFormat + ".png");
if (f.exists()) {
f.delete();
}
try {
FileOutputStream out = new FileOutputStream(f);
bmp.compress(Bitmap.CompressFormat.PNG, 90, out);
out.flush();
out.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});後台運行和鎖屏
當App退至後台或鎖屏時,您可調用AlivcLivePusher的pause()或resume()介面,暫停或恢複推流。
對於非系統的音視訊通話,SDK會採集聲音並推送出去,您可以根據業務需求在退後台或鎖屏時調用靜音介面mAlivcLivePusher.setMute(true或false)來決定後台時是否採集音頻。
回調監聽
回調類型 | 回調類名 | 設定方法 |
AlivcLivePushInfoListener |
| |
AlivcLivePushNetworkListener |
| |
AlivcLivePushErrorListener |
| |
AlivcLivePushBGMListener |
|
推流回調
推流回調用於向App通知SDK相應狀態,包括預覽開始、渲染第一幀視頻、發送第一幀音視頻流、推流開始、推流停止等回調。
onPushStarted:表示串連服務端成功。
onFirstFramePushed:表示發送第一幀音視頻流成功。
onPushStarted、onFirstFramePushed:表示SDK推流成功。
網路相關回調
網路相關回調用於向App通知SDK相應網路狀態和連結狀態。短時間的網路波動或者網路切換,時間長度在AlivcLivePushConfig設定的重連逾時時間長度和次數範圍之內,SDK會進行自動重連,重連成功之後將繼續推流。
onConnectFail:表示推流失敗,建議檢查推流地址是否非法、是否存在非法字元、鑒權是否有問題、是否超過最大推流並發限制、是否在禁推黑名單中等,確定推流地址合法且可用後再嘗試推流。其中具體錯誤碼有0x30020901 ~ 0x30020905, 0x30010900 ~ 0x30010901。
onConnectionLost:連結斷開回調,連結斷開後SDK內部會自動重連,回拋onReconnectStart,如果超過最大重連次數(config.connectRetryCount)後推流連結還是沒有恢複,會回拋onReconnectFail。
onNetworkPoor:網路慢回調,當收到此回調說明當前網路對於推流的支撐度不足,此時推流仍在繼續、沒有中斷。您可以在此處理自己的商務邏輯,比如UI提醒使用者。
onNetworkRecovery:網路恢複回調。
onReconnectFail:斷網時間長度超出AlivcLivePushConfig設定的重連逾時時間長度和次數範圍時,SDK自動重連失敗,會回調該方法,在網路恢複之後可調用
mAlivcLivePusher.reconnectPushAsync介面進行重連。onSendDataTimeout:送資料逾時回調,建議檢查當前網路,待網路恢複時,結束推流後重新開始推流。
onPushURLAuthenticationOverdue:鑒權到期回調,此回調錶示當前推流URL鑒權到期,需要給SDK傳遞一個新的URL。
錯誤回調
onSystemError:系統裝置異常回調,需要銷毀引擎重新嘗試。
onSDKError:SDK錯誤回調,需要根據錯誤碼做不同的處理:
如果錯誤碼是805438211,表示裝置效能差,編碼和渲染幀率過低,需要給主播提示,並在app層停掉處理耗時間長度的商務邏輯(比如進階美顏、動畫等)。
您需要特別處理App沒有麥克風許可權和沒有網路攝影機許可權的回調,App沒有麥克風許可權錯誤碼為268455940,App沒有網路攝影機許可權錯誤碼為268455939。
其他的暫時都只打日誌,不做其他額外操作。
背景音樂回調
onOpenFailed:背景音樂開啟失敗,檢查背景音樂開始播放介面所傳入的音樂路徑與該音樂檔案是否正確,可調用startBGMAsync重新播放。
onDownloadTimeout:背景音樂播放逾時,多出現於播放網路URL的背景音樂,提示主播檢查當前網路狀態,可調用startBGMAsync重新播放。
常用方法和介面
常用方法
/*在自訂模式下,使用者可以即時調整最小碼率和目標碼率*/
mAlivcLivePusher.setTargetVideoBitrate(800);
mAlivcLivePusher.setMinVideoBitrate(400);
/*是否支援自動對焦*/
mAlivcLivePusher.isCameraSupportAutoFocus();
/*是否支援閃光燈*/
mAlivcLivePusher.isCameraSupportFlash();
/*擷取是否正在推流的狀態*/
mAlivcLivePusher.isPushing();
/*擷取推流地址*/
mAlivcLivePusher.getPushUrl();
/*擷取推流效能調試資訊。推流績效參數具體參數和描述參考API文檔或者介面注釋*/
mAlivcLivePusher.getLivePushStatsInfo();
/*擷取版本號碼*/
mAlivcLivePusher.getSDKVersion();
/*設定log層級,根據需求過濾想要的調試資訊*/
mAlivcLivePusher.setLogLevel(AlivcLivePushLogLevelAll);
/*擷取當前sdk狀態*/
mAlivcLivePusher.getCurrentStatus();
/*擷取上一個錯誤碼,如無錯誤返回:ALIVC_COMMON_RETURN_SUCCESS*/
mAlivcLivePusher.getLastError();常用介面列表
類 | 說明 |
AlivcLivePushConfig | 推流初始配置 |
AlivcLivePusher | 推流功能類 |
AlivcLivePusherErrorListener | 錯誤回調 |
AlivcLivePusherNetworkListener | 網路相關通知回調 |
AlivcLivePusherInfoListener | 推流相關資訊回調 |
AlivcLivePusherBGMListener | 背景音樂回調 |
AlivcLivePushCustomFilter | 自訂濾鏡回調 |
AlivcLivePushCustomDetect | 自訂臉部偵測回調 |
AlivcSnapshotListener | 截圖回調 |
整合美顏功能
如需在推流SDK中使用美顏功能,需要引入美顏庫並配置對應回調。
使用美顏功能,需要擷取美顏特效License授權,操作指引可參見擷取美顏特效SDK License。
通過Maven方式引入美顏庫及美顏面板,在工程的build.gradle檔案中添加如下代碼,美顏SDK版本請參考最新Demo:
implementation "com.aliyun.maliang.android:queen:2.5.0-official-full" implementation("com.aliyun.maliang.android:queen_menu:2.5.0-official-full") { exclude group: 'com.aliyun.maliang.android', module: 'queen' }還可以整合Demo中的LiveBeauty模組:
檔案或檔案夾
功能描述
live_beauty
美顏基礎抽象類別
queen_beauty
美顏基礎UI控制項
擷取美顏外掛程式庫LiveBeauty。
通過
clone命令從此路徑(LiveBeauty)下載相關外掛程式庫代碼到本地。git clone https://github.com/MediaBox-Demos/amdemos-android-live.git在Android Studio專案根目錄下開啟命令列。執行如下代碼,再通過
File > New > Import Module將LiveBeauty模組匯入到你的Android專案中。git submodule add https://github.com/MediaBox-Demos/amdemos-android-live.git ***/***/***說明範例程式碼中“***/***/***”是你想要放置
LiveBeauty模組的位置在專案的
settings.gradle檔案中添加模組的路徑:include ':app', ':LiveBeauty', ':LiveBeauty:live_queenbeauty'說明範例程式碼中,“app”為主模組。
同時在專案主模組的
build.gradle檔案中,添加對LiveBeauty模組的依賴:dependencies { implementation project(':LiveBeauty') implementation project(':LiveBeauty:live_queenbeauty') }點擊
File > Sync Project with Gradle Files,等待 Gradle 同步完成後,即可使用LiveBeauty模組。
配置美顏外掛程式UI模組。
在本專案的布局XML檔案中添加
QueenBeautyMenu的控制項。例如:<com.aliyunsdk.queen.menu.QueenBeautyMenu android:id="@+id/beauty_beauty_menuPanel" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" />在Activity中初始化
QueenBeautyMenu。例如:// 初始化美顏菜單面板 QueenMenuPanel beautyMenuPanel = QueenBeautyMenu.getPanel(context); beautyMenuPanel.onHideMenu(); beautyMenuPanel.onHideValidFeatures(); beautyMenuPanel.onHideCopyright(); // 在布局中添加美顏菜單 QueenBeautyMenu beautyBeautyContainerView = findViewById(R.id.beauty_beauty_menuPanel); beautyBeautyContainerView.addView(beautyMenuPanel);
設定人臉臉部辨識及美顏回調。
如果您有接入第三方美顏庫的需求,可設定setCustomDetect和setCustomFilter回調。
AlivcLivePushCustomDetect回呼函數customDetectProcess(long data、int width、int height、int rotation、int format、long extra參數)中返回的參數data是採集資料的指標,第三方美顏庫可對資料指標中的資料進行識別或者處理。
AlivcLivePushCustomFilter回呼函數customFilterProcess(int inputTexture、inttextureWidth、int textureHeight、long extra參數)中返回的參數inputTexture是映像的紋理texture,第三方美顏庫可對紋理進行處理。如果需要返回一個處理過的紋理texture,則返回texture id。否則,返回原來的inputTexture即可。
注意事項
使用Android推流SDK需要注意以下事項:
事項 | 說明 |
混淆規則 | 檢查混淆,確認已將SDK相關包名加入至不混淆名單中。 |
介面調用 |
|
常見問題
推流失敗
您可以使用自助問題排查功能對推流地址進行檢測,檢測推流地址是否有效。
如何擷取已推的音視頻流資訊
您可以進入流管理,在線上流中可查看並管理已推的音視頻流。
如何進行播流
開始推流後,可用播放器(阿里雲播放器、FFplay、VLC等)進行拉流測試,拉流地址擷取請參見產生推流地址和播放地址。