本文介紹Web連麥互動SDK相關接口說明。
基礎類
類名 | 描述 | ||||||
AlivcLivePusher | 推流功能類。 說明 通過window.AlivcLivePush.AlivcLivePusher進行訪問 | ||||||
AlivcLivePlayer | 拉流抽象接口。 說明 通過window.AlivcLivePush.AlivcLivePlayer進行訪問 |
推流基礎接口
AlivcLivePusher
目錄
API | 描述 | ||||||
靜態方法,獲取攝像頭列表。 | |||||||
靜態方法,獲取麥克風列表。 | |||||||
靜態方法,獲取播放設備列表。 | |||||||
靜態方法,檢測webrtc各項功能的支持情況。 | |||||||
靜態方法,檢測是否支持屏幕分享。 | |||||||
初始化推流參數。 | |||||||
釋放推流。 | |||||||
開始預覽。 | |||||||
結束預覽。 | |||||||
開始推流。 | |||||||
重新開始推流。 | |||||||
重新連接進行推流。 | |||||||
結束推流。 | |||||||
打開或切換麥克風。 | |||||||
停止麥克風。 | |||||||
獲取當前麥克風設備ID。 | |||||||
打開或切換攝像頭。 | |||||||
停止攝像頭。 | |||||||
獲取當前攝像頭設備ID。 | |||||||
開始屏幕共享。 | |||||||
停止屏幕共享。 | |||||||
開啟自定義輔流。 | |||||||
停止自定義輔流。 | |||||||
靜音/解除靜音(不停止推流,只是停止播放)。 | |||||||
關閉/打開畫面(不停止推流,只是停止顯示)。 | |||||||
獲取上一次上報的推流統計信息 | |||||||
獲取當前推流Url。 | |||||||
獲取當前頻道ID。 | |||||||
獲取當前用戶ID。 | |||||||
更新旁路轉推混流布局。 | |||||||
獲得當前分辨率。 | |||||||
更新分辨率。 | |||||||
獲取當前幀率。 | |||||||
更新幀率。 | |||||||
獲取當前推流的 MediaStream。 | |||||||
獲取直播trace ID。 | |||||||
設置屏幕流寬/高/碼率/幀率。 |
詳情
getCameras:靜態方法,獲取攝像頭列表
/** * 靜態方法,獲取攝像頭列表 * @return {Promise<MediaDeviceInfo[]>} */ const cameras = await AlivcLivePusher.getCameras();
getMicrophones:靜態方法,獲取麥克風列表
/** * 靜態方法,獲取麥克風列表 * @return {Promise<MediaDeviceInfo[]>} */ const microphones = await AlivcLivePusher.getMicrophones();
getPlayoutDevices:靜態方法,獲取播放設備列表
/** * 靜態方法,獲取播放設備列表 * @return {Promise<MediaDeviceInfo[]>} */ const playoutDevices = await AlivcLivePusher.getPlayoutDevices();
checkSystemRequirements:靜態方法,檢測webrtc各項功能的支持情況
/** * 靜態方法,檢測webrtc各項功能的支持情況 * @param {('sendonly' | 'recvonly' | 'sendrecv')} [direction] * @return {Promise<CheckResult>} */ const checkResult = await AlivcLivePusher.checkSystemRequirements(); // checkResult.support: boolean; 是否支持 // checkResult.detail.isBrowserSupported: boolean; 瀏覽器是否支持 // checkResult.detail.isH264DecodeSupported: boolean; H264 解碼是否支持 // checkResult.detail.isH264EncodeSupported: boolean; H264 編碼是否支持 // checkResult.detail.isWebRTCSupported: boolean; WebRTC 是否支持
checkScreenShareSupported:靜態方法,檢測是否支持屏幕分享。
/** * 檢查當前環境是否支持屏幕共享 * @returns {boolean} */ const isScreenShareSupported = AlivcLivePusher.checkScreenShareSupported();
init:初始化推流參數。
/** * 初始化 RTC Engine * @param config 配置,各個參數均可選傳入 * config.resolution: AlivcResolutionEnum; 分辨率 * config.fps: AlivcFpsEnum; FPS * config.logLevel: LogLevel; 日志輸出級別,默認 ERROR * config.connectRetryCount: number; 房間重連次數 * config.audio: boolean; 是否打開音頻 * config.audioId: string; 默認音頻設備 ID * config.video: boolean; 是否打開攝像頭 * config.cameraId: string; 默認攝像頭設備 ID * config.screen: boolean; 是否打開屏幕共享 */ const pusher = new AlivcLivePush.AlivcLivePusher(); pusher.init({ resolution: AlivcLivePush.AlivcResolutionEnum.RESOLUTION_720P });
destroy:釋放推流。
// 釋放推流實例,釋放后,pusher 實例將不可用 pusher.destroy()
startPreview:開始預覽。
/** * 開始預覽畫面 * @param {string | HTMLVideoElement} elementOrId 預覽的 Video 節點或 Id * @param {boolean} secondary 可選參數,默認預覽主流,是否為預覽輔流 * @return {Promise<MediaStream>} */ const stream = pusher.startPreview(elementOrId);
stopPreview:結束預覽。
/** * 停止預覽畫面 * @param {string | HTMLVideoElement} 可選 elementOrId 停止預覽的 Video 節點或 Id,不傳則停止所有預覽 */ pusher.stopPreview(elementOrId);
startPush:開始推流
/** * 開始推流 * @param {string} url 推流 Url 格式示例:artc://live.aliyun.com/push/.... * @return {Promise} */ await pusher.startPush(url);
重要此處推流地址需要使用連麥地址,詳見連麥地址生成器。
restartPush:重新推當前 Url
/** * 重新推當前 Url * @return {Promise} */ await pusher.restartPush();
reconnectPush:重新連接進行推流
/** * 重新連接進行推流。 * @param {string} url 新的推流 Url 格式示例:artc://live.aliyun.com/push/.... * @return {Promise} */ await pusher.reconnectPush(url);
stopPush:停止推流
/** * 停止推流 * @return {Promise} */ await pusher.stopPush(url);
startMicrophone:打開或切換麥克風
/** * 打開或切換麥克風 * @param {string} deviceId 可選,麥克風設備 Id * @return {Promise} */ await pusher.startMicrophone(deviceId);
stopMicrophone:停止推流
/** * 停止麥克風 * @return {Promise} */ await pusher.stopMicrophone();
getCurrentMicDeviceId:獲取當前麥克風設備ID
/** * 獲取當前麥克風設備ID * @return {string | undefined} 麥克風設備ID */ const micId = pusher.getCurrentMicDeviceId();
startCamera:打開或切換攝像頭
/** * 打開或切換攝像頭 * @param {string} deviceId 可選,攝像頭設備 Id * @return {Promise} */ await pusher.startCamera(deviceId);
stopCamera:停止攝像頭
/** * 停止攝像頭 * @return {Promise} */ await pusher.stopCamera();
getCurrentCameraDeviceId:獲取當前攝像頭設備ID
/** * 獲取當前攝像頭設備ID * @return {string | undefined} 攝像頭設備ID */ const cameraId = pusher.getCurrentCameraDeviceId();
startScreenShare:開始屏幕共享
/** * 開始屏幕共享 * @return {Promise} */ await pusher.startScreenShare();
stopScreenShare:停止屏幕共享
/** * 停止屏幕共享 * @return {Promise} */ await pusher.stopScreenShare();
startCustomStream:開啟自定義輔流
/** * 開始自定義輔流 * @param mediaStream 自定義媒體流 * @return {Promise<MediaStream>} */ await pusher.startCustomStream(mediaStream);
stopCustomStream:停止自定義輔流
/** * 停止自定義輔流 * @return {Promise<void>} */ await pusher.stopCustomStream();
mute:靜音/解除靜音(不停止推流,只是停止播放)
/** * 靜音/解除靜音(不停止推流,只是停止播放) * @param {boolean} 是否靜音 * @returns {boolean} 靜音/取消靜音執行結果 */ pusher.mute(true);
muteVideo:關閉/打開畫面(不停止推流,只是停止顯示)
/** * 關閉/打開畫面(不停止推流,只是停止顯示) * @param mute true表示不發送視頻數據,false表示恢復正常 * @returns 修改是否成功 */ pusher.muteVideo(true);
getLivePushStatsInfo:獲取上一次上報的推流統計信息
/** * 獲取上一次上報的推流統計信息 * @return {StatsInfo} 推流統計信息 */ const statsInfo = pusher.getLivePushStatsInfo();
getPushUrl:獲取當前推流Url
/** * 獲取當前推流Url * @return {string | undefined} 當前推流Url */ const url = pusher.getPushUrl();
getChannelId:獲取當前頻道ID
/** * 獲取當前頻道ID * @return {string | undefined} 當前頻道ID */ const channelId = pusher.getChannelId();
getUserId:獲取當前用戶ID
/** * 獲取當前用戶ID * @return {string | undefined} 當前用戶ID */ const userId = pusher.getUserId();
setLiveMixTranscodingConfig:更新旁路轉推混流布局
/** * 更新旁路轉推混流布局 * @param {AlivcLiveTranscodingConfig} config 可選,不傳則停止旁路混流;詳細參數見 AlivcLiveTranscodingConfig 類 * @return {Promise} 更新請求返回值 */ const response = await pusher.setLiveMixTranscodingConfig(config);
getResolution:獲得當前分辨率
/** * 獲得當前分辨率 * @return {AlivcResolutionEnum | undefined} 當前分辨率 */ const resolution = pusher.getResolution();
changeResolution:更新分辨率
/** * 更新分辨率 * @param resolutionEnum 分辨率,傳入 Custom 時為自定義 * @param width 寬度,自定義分辨率時必選 * @param height 高度,自定義分辨率時必選 * @param bitrate 最大碼率 * @return {Promise} */ await pusher.changeResolution(AlivcResolutionEnum.RESOLUTION_720P);
getFps:獲取當前幀率
/** * 獲取當前幀率 * @return {AlivcFpsEnum | undefined} 當前幀率 */ const fps = pusher.getFps();
changeFps:更新幀率
/** * 更新幀率 * @param {AlivcFpsEnum} fps 目標幀率 * @return {Promise} */ await pusher.changeFps(AlivcFpsEnum.FPS_30);
getPublishMediaStream:獲取當前推流的 MediaStream
/** * 獲取當前推流的 MediaStream * @return {MediaStream | undefined} 當前推流的 MediaStream */ const mediaStream = pusher.getPublishMediaStream();
getLiveTraceId:獲取直播trace ID
/** * 獲取直播trace ID * @return {string} TraceId */ pusher.getLiveTraceId();
updateScreenVideoProfile:設置屏幕流寬/高/碼率/幀率
/** * 設置屏幕流寬/高/碼率/幀率(受瀏覽器限制,寬高實際不生效) * @param width 寬度 * @param height 高度 * @param rate 碼率 * @param fps 幀率 * @return {Promise} */ await pusher.updateScreenVideoProfile(width,height,rate,fps);
AlivcLiveTranscodingConfig
屬性列表
屬性 | 描述 | ||||||
width | 數值,旁路顯示寬度 | ||||||
height | 數值,旁路顯示高度 | ||||||
backgroundColor | 數值,例如以 16 進值 0x000000 | ||||||
cropMode | AlivcLiveTranscodingCropModeEnum
| ||||||
mixStreams | AlivcLiveMixStream[],混流詳細布局列表 |
AlivcLiveMixStream
屬性列表
屬性 | 描述 | ||||||
userId | 字符串,混流用戶ID | ||||||
x | 數值,混流開始x方向像素值 | ||||||
y | 數值,混流開始y方向像素值 | ||||||
width | 數值,混流開始寬度像素值 | ||||||
height | 數值,混流開始高度像素值 | ||||||
zOrder | 數值,數字越大層級越靠上 |
AlivcLivePusher.info
事件 | 描述 | ||||||
bye | 離會通知,可能被擠占,也可能被踢出等。 | ||||||
pushstatistics | 直播推流統計數據回調,每2秒回調一次。 |
使用示例:
pusher.info.on('bye', (_code, reason) => {
// console.log(`您已離會,原因: ${reason}`);
});
pusher.info.on('pushstatistics', _stat => {
// console.log(_stat);
});
AlivcLivePusher.error
事件 | 描述 | ||||||
system | 系統錯誤。 | ||||||
sdk | sdk內部錯誤。 |
使用示例:
pusher.error.on('system', error => {
// console.log(error);
});
pusher.error.on('sdk', error => {
// console.log(error);
});
AlivcLivePusher.network
事件 | 描述 | ||||||
connectionlost | 連接斷開。 | ||||||
networkrecovery | 網絡恢復。 | ||||||
reconnectstart | 重連開始。 | ||||||
reconnectfail | 重連失敗。 | ||||||
reconnectsucceed | 重連成功。 |
使用示例:
pusher.network.on('connectionlost', () => {
// console.log('網絡異常,連接已斷開');
});
拉流相關接口
AlivcLivePlayer
接口列表
API | 描述 | ||||||
開始播放音視頻流。 | |||||||
在另一個video節點播放音視頻流。 | |||||||
停止播放視頻流。 | |||||||
暫停播放音頻流。 | |||||||
暫停播放視頻流。 | |||||||
恢復播放音頻流。 | |||||||
恢復播放視頻流。 | |||||||
釋放拉流。 |
詳情
startPlay:開始播放音視頻流
/** * 開始播放音視頻流 * @param url 播放 url 格式參考:artc://live.aliyun.com/play/... * @param elementOrId 播放的媒體(Video/Audio)標簽或Id * @param secondaryElementOrId (可選)輔流播放 媒體(Video/Audio)標簽或Id * @return {Promise<AlivcLivePlayInfo>} 可以通過 AlivcLivePlayInfo 監聽相關事件 */ const playInfo = await player.startPlay(url, elementOrId, secondaryElementOrId);
重要此處播流地址需要使用連麥地址,詳見連麥地址生成器。
非連麥觀眾可使用Web播放器進行播流,詳見Web播放器快速接入。
playAnotherElement:在另一個video節點播放音視頻流
/** * 在另一個video節點播放音視頻流 * @param elementOrId 播放的媒體(Video/Audio)標簽或Id * @param secondary (可選)是否播放輔流,默認播放主流 */ player.playAnotherElement(elementOrId);
stopPlay:停止播放視頻流
/** * 停止播放視頻流 * @param elementOrId 播放的媒體(Video/Audio)標簽或Id,可選,不傳則停止所有播放 * @return {Promise} */ await player.stopPlay(elementOrId);
pauseAudioPlaying:暫停播放音頻流
/** * 暫停播放音頻流 */ player.pauseAudioPlaying();
pauseVideoPlaying:暫停播放視頻流
/** * 暫停播放視頻流 */ player.pauseVideoPlaying();
resumeAudioPlaying:恢復播放音頻流
/** * 恢復播放音頻流 */ player.resumeAudioPlaying();
resumeVideoPlaying:恢復播放視頻流
/** * 恢復播放視頻流 */ player.resumeVideoPlaying();
destroy:釋放拉流
/** * 釋放拉流,釋放后 player 將不可用 */ player.destroy();
AlivcLivePlayInfo
事件 | 描述 | ||||||
canplay | canplay事件。 | ||||||
userleft | 遠端用戶離會。 | ||||||
statistics | 播放統計信息。 | ||||||
update | 遠端流更新 |
使用示例:
playInfo.on('statistics', _stat => {
// console.log(_stat);
});
playInfo.on('userleft', () => {
// console.log('遠端用戶離會');
});
playInfo.on('canplay', function () {
// console.log('遠端可播放');
});
playInfo.on('update', function (previousStatus) {
// console.log(previousStatus.mediaStream);
// console.log(previousStatus.secondaryMediaStream);
});