音視訊通信 RTC(Real-Time Communication)是阿裡雲覆寫全球的實時音視訊開發平台,依托核心音視訊編解碼、信道傳輸、網絡排程技術,提供高可用、高品質、超低延時的音視訊通信服務,讓使用者快速搭建多端實時應用,适用于線上教育、視訊會議、互動娛樂、音視訊社交等場景。
産品連結:
https://www.aliyun.com/product/rtc 當您成功內建 SDK,并想實作移動端切換橫豎屏進行實時音視訊通信。您可以閱讀本文,了解實作本地切換橫豎屏的代碼方法,幫助您更好的體驗阿裡雲音視訊通信服務。橫豎屏模式切換
正常情況下豎屏模式推流分辨率寬 <高,例如:480*640;橫屏模式推流分辨率寬> 高,例如:640*480。
調用 setDeviceOrientationMode 方法,進行切換橫豎屏:
//接口方法
public abstract void setDeviceOrientationMode(AliRtcEngine.AliRtcOrientationMode mode);
//示例方法
mAliRtcEngine.setDeviceOrientationMode(AliRtcOrientationModePortrait);
參數 | 類型 | 描述 |
mode | AliRtcOrientationMode | 裝置方向。取值:
|
說明
- 當應用切換橫豎屏時,調用此接口進行裝置方向切換,攝像頭采集會随機進行切換。
- 豎屏模式時不需要調用此接口。
- 1.17 之前版本僅支援固定豎屏模橫式,即隻要目前未打開攝像頭采集(未開啟預覽并且未開始視訊推流),設定可生效。打開攝像頭後再調用該接口不會生效,不支援動态橫豎屏切換。
如果您的手機不支援自适應模式,而您想要設定自适應模式,您需要監聽旋轉的方向,然後根據角度設定目前的橫豎屏。具體操作如下:
- 設定自适應模式。
//設定橫屏豎屏自适應模式。
mAliRtcEngine.setDeviceOrientationMode(AliRtcOrientationModeAuto);
setRequestedOrientation(SCREEN_ORIENTATION_UNSPECIFIED);
- 設定 setRequestedOrientation 監聽旋轉角度。
/**
* 監聽旋轉角度
*/
private OrientationEventListener mOrientationEventListener;
@Override
protected void onResume() {
if (null==mOrientationEventListener) {
mOrientationEventListener = new OrientationEventListener(this) {
@Override
public void onOrientationChanged(int orientation) {
if (orientation == OrientationEventListener.ORIENTATION_UNKNOWN) {
return; //手機平放時,檢測不到有效的角度。
}
//備注:如果您的應用有固定橫豎屏模式和自适應模式切換。請添加判斷語句,隻有自适應模式才根據角度設定橫豎屏方向。
//隻檢測是否有四個角度的改變,設定自适應模式後,隻需要修改setRequestedOrientation即可。
if (orientation > 350 || orientation < 10) { //0度,豎直。
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else if (orientation > 80 && orientation < 100) { //90度,右橫屏。
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
} else if (orientation > 170 && orientation < 190) { //180度,倒立。
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else if (orientation > 260 && orientation < 280) { //270度,左橫屏。
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
} else {
return;
}
}
};
mOrientationEventListener.enable();
}
}
@Override
protected void onPause() {
super.onPause();
//停止監聽。
if (null != mOrientationEventListener) {
mOrientationEventListener.disable();
mOrientationEventListener = null;
}
}
「視訊雲技術」你最值得關注的音視訊技術公衆号,每周推送來自阿裡雲一線的實踐技術文章,在這裡與音視訊領域一流工程師交流切磋。
