虛擬直播既可以實作單人視頻直播,也可以邀請觀眾上麥、與虛擬主播進行多人連麥互動,
虛擬直播場景架構設計
虛擬直播場景的主要架構如下圖所示(以多人連麥直播互動為例):

虛擬人直播體驗 App 原始碼
ZEGO 針對虛擬直播提供了 體驗 App 原始碼,以供開發者進一步了解 ZEGO 虛擬直播方案,
前提條件
- 已在專案中集成 ZEGO Express SDK,詳情請參考 實時音視頻 - 快速開始 - 集成 SDK,
- 已在專案中集成 ZEGO Avatar SDK,詳情請參考 Avatar 虛擬形象 - 快速開始 - 集成 SDK,
- 已在 ZEGO 控制臺 創建專案,并申請有效的 AppID 和 AppSign,詳情請參考 控制臺 - 專案管理 中的“專案資訊”,
虛擬直播實作流程
虛擬直播場景的整體流程如下:
- 虛擬主播進入房間后,給 ZEGO Avatar 設定虛擬形象,開始采集 ZEGO Avatar 紋理內容,并進行預覽并推流,
- 觀眾進入房間后,給 ZEGO Avatar 設定虛擬形象,并進行拉流,
- 主播、觀眾均通過信令模塊進行連接,信令模塊可以控制當前業務房間內的直播流程,同步并通知各端當前的直播狀態,
- 無論是否有連麥觀眾, 主播和觀眾均通過 ZEGO 音視頻云服務進行推拉流,
- 觀眾請求與主播連麥后,信令模塊會通知主播,并同步連麥者的個人資訊,
- 主播接受連麥申請后,連麥觀眾開始采集 Avatar 紋理內容并推流,房間內所有成員將會接收到流更新通知,并拉取連麥觀眾的音視頻流,
- 若連麥觀眾不再需要連麥,則向業務后臺發起下麥請求,收到信令模塊的下麥通知后,連麥觀眾停止推流、停止采集 Avatar 紋理內容、停止表情隨動,主播和房間內的其他觀眾停止拉取該觀眾的流,
虛擬人直播詳細流程圖如下:

1 開通 虛擬形象 Avatar 服務
請聯系 ZEGO 商務人員為 AppID 開通 Avatar 服務,以便創建虛擬形象,
2 初始化即構實時音視頻 ZEGO Express Video SDK
在使用 Express Video SDK 進行視頻通話之前,需要初始化 SDK,由于初始化操作 SDK 時,內部處理的操作較多,建議開發者在 App 啟動時進行,
/** 定義 SDK 引擎物件 */
ZegoExpressEngine engine;
ZegoEngineProfile profile = new ZegoEngineProfile();
/** 請通過 ZEGO 控制臺獲取,格式為 123456789L */
profile.appID = appID;
/** 64個字符,請通過 ZEGO 控制臺獲取,格式為 "0123456789012345678901234567890123456789012345678901234567890123" */
profile.appSign = appSign;
/** 通用場景接入 */
profile.scenario = ZegoScenario.GENERAL;
/** 設定app的application 物件 */
profile.application = getApplication();
/** 創建引擎 */
engine = ZegoExpressEngine.createEngine(profile, null);
在初始化 Express Video SDK 的時候需要開通 RTC 的自定義采集,Avatar 形象是通過自定義采集推送紋理,由于 Avatar 的資料是相反方向的,所以在初始化的時候需要設定鏡像,
// 設定本地預覽和拉流端看到的視頻都是鏡像畫面,(Avatar 推送的鏡像相反)
engine.setVideoMirrorMode(ZegoVideoMirrorMode.BOTH_MIRROR);
ZegoCustomVideoCaptureConfig videoCaptureConfig = new ZegoCustomVideoCaptureConfig();
// 設定自定義視頻采集視頻幀資料型別為 GL_TEXTURE_2D 型別
videoCaptureConfig.bufferType = ZegoVideoBufferType.GL_TEXTURE_2D;
engine.enableCustomVideoCapture(true, videoCaptureConfig, ZegoPublishChannel.MAIN);
更多初始化 Express Video SDK 的細節請參考:實時音視頻 - 快速開始 - 實作視頻通話 的 “3.1 創建引擎”,
3 創建虛擬形象
在使用虛擬直播前,創建自己的個人形象,詳情請參考 創建虛擬形象,
4 虛擬人登錄直播房間
主播開始直播或觀眾觀看直播前,需要先登錄到直播房間,在收到登錄房間成功的回呼后,可以直接呼叫 Express Video SDK 的介面進行推拉流操作,
/** 創建用戶 */
ZegoUser user = new ZegoUser("Anchor");
/** 開始登錄房間 */
engine.loginRoom("MetaLive", user);
更多使用 Express Video SDK 實作登錄直播房間的細節請參考:實時音視頻 - 快速開始 - 實作視頻通話 的 “3.2 登錄房間”,
5 設定個人虛擬形象
初始化ZegoCharacterHelper類,設定已經創建的個人的虛擬形象,用于直播的個人形象展示,
//mZegoInteractEngine 的初始化
if (mZegoInteractEngine == null) {
mZegoInteractEngine = ZegoAvatarService.getInteractEngine();
}
//初始化ZegoCharacterHelper類
if (mCharacterHelper == null) {
mCharacterHelper = new ZegoCharacterHelper(AvatarDataUtil.getResourcePath(context));
mCharacterHelper.setExtendPackagePath(AvatarDataUtil.getPackagesPath(context));
}
//默認半身,先把影片關閉
cameraViewState = ZegoAvatarViewState.half;
setBodyState(cameraViewState, false);
//獲取默認虛擬形象資料
String jsonDefaultStr = AvatarDefaultJson.getDefaultAvatarJson(isBoy,AvatarDefaultJson.isHead);
//isBoy 為 true 是男生
if (isBoy) {
//獲取已創建男生的虛擬形象
String jsonMaleStr = AvatarJsonMgr.getMaleJsonData(context);
//男生資料為空的情況就設定為默認形象
mCharacterHelper.setAvatarJson(!TextUtils.isEmpty(jsonMaleStr) ? jsonMaleStr : jsonDefaultStr);
} else {
//獲取已創建女生的虛擬形象
String jsonFemaleStr = AvatarJsonMgr.getFemaleJsonData(context);
//女生資料為空的情況就設定為默認形象
mCharacterHelper.setAvatarJson(!TextUtils.isEmpty(jsonFemaleStr) ? jsonFemaleStr : jsonDefaultStr);
}
6 單虛擬主播直播
6.1 獲取 ZEGO Avatar 的紋理內容
Avatar 的虛擬形象資料是通過 startCaptureAvatar 回呼到上層通過自定義采集推送出去,由于 Avatar 資料是透明背景,RTC是沒背景的,轉換的時候默認黑色,開發者可以自行將背景設定為需要的顏色,
//根據實際需求設定 Avatar 回傳內容的寬(width)和高(height)
AvatarCaptureConfig config = new AvatarCaptureConfig(width, height);
//開始采集獲取 Avatar 紋理
mCharacterHelper.startCaptureAvatar(config, new OnAvatarCaptureCallback() {
@Override
public void onAvatarTextureAvailable(int textureID, int width, int height) {
// 背景顏色設定為 true 才生效
boolean useFBO = true;
if(mBgRender == null){
mBgRender = new TextureBgRender(textureID, useFBO, width, height, Texture2dProgram.ProgramType.TEXTURE_2D_BG);
}
if(mBgRender != null){
mBgRender.setInputTexture(textureID);
// 用戶需要修改成所需要的顏色值(RGB)
mBgRender.setBgColor(rColor, gColor, bColor, 1.0f);
mBgRender.draw(true);
}
//通過 RTC SDK 的自定義采集 sendCustomVideoCaptureTextureData 進行推送資料
engine.sendCustomVideoCaptureTextureData(mBgRender.getOutputTextureID(), width, height, System.currentTimeMillis());
}
});
6.2 虛擬主播開啟預覽并推流
主播向 ZEGO 音視頻云服務推流,需要自己生成唯一的 StreamID,然后開始預覽并推流,
// 開啟預覽
engine.startPreview(new ZegoCanvas(preview_view));
// 推流
engine.startPublishingStream("Anchor");
更多使用 Express Video SDK 實作預覽和推流的細節請參考:實時音視頻 - 快速開始 - 實作視頻通話 的 “3.3 推流”,
6.3 觀眾拉流
觀眾進入房間后,會收到 Express Video SDK 的流更新通知,從中篩選出主播流的 StreamID 進行拉流,
// 觀眾拉流
ZegoCanvas zegoCanvas = new ZegoCanvas(view);
zegoCanvas.viewMode = ZegoViewMode.ASPECT_FILL;
engine.startPlayingStream("Anchor",zegoCanvas);
更多使用 Express Video SDK 實作拉流的細節請參考:實時音視頻 - 快速開始 - 實作視頻通話 的 “3.4 拉流”,
7 觀眾與虛擬主播連麥
7.1 虛擬人連麥觀眾推流
觀眾呼叫業務后臺請求連麥介面,呼叫成功后,業務后臺向主播發送請求連麥自定義信令,主播收到信令后,呼叫業務后臺同意連麥介面,呼叫成功后,業務后臺向房間內所有成員發送連麥成功的廣播信令,連麥觀眾收到信令后,開始推流,觀眾上臺后也是按照 6.1 獲取 Avatar 的紋理內容 的流程,把 Avatar 的內容通過自定義采集推流出去,
// 連麥觀眾推流
engine.startPublishingStream("Audience1");
7.2 虛擬主播拉流
連麥觀眾推流后,房間內所有成員會收到 Express Video SDK 的流更新通知,主播獲取連麥觀眾流的 StreamID 進行拉流,
房間內其他觀眾也在收到流更新回呼時,獲取連麥觀眾流的 StreamID 進行拉流,
// 主播拉流
ZegoCanvas zegoCanvas = new ZegoCanvas(view);
zegoCanvas.viewMode = ZegoViewMode.ASPECT_FILL;
engine.startPlayingStream("Audience1",zegoCanvas);
7.3 虛擬人連麥觀眾下麥
連麥觀眾呼叫業務后臺的下麥介面,呼叫成功后,業務后臺向房間內所有成員發送該觀眾下麥的廣播信令,連麥觀眾收到信令后停止推流、停止采集獲取 Avatar 紋理內容、停止表情隨動檢測,房間內其他觀眾收到信令后停止拉流,
// 連麥觀眾停止預覽和結束推流
engine.stopPreview();
engine.stopPublishingStream();
// 房間內其他成員結束拉流
engine.stopPlayingStream("Audience1");
//停止采集獲取 Avatar 紋理
public void stopCaptureAvatar() {
if (mCharacterHelper != null) {
mCharacterHelper.stopCaptureAvatar();
}
}
//停止表情隨動
public void stopDetectExpression() {
if (mZegoInteractEngine != null && mZegoInteractEngine.isStarted()) {
mZegoInteractEngine.stopDetectExpression();
}
}
更多使用 Express Video SDK 實作停止推拉流的細節請參考:實時音視頻 - 快速開始 - 實作流程 的 “4.2 停止推拉流”,
7 獲取更多幫助-即構虛擬主播解決方案
虛擬直播場景為元宇宙社交娛樂模式下的全新直播方式,虛擬形象替代真人出鏡,打造不一樣的直播體驗,支持表情隨動、手勢識別觸發特效等多種玩法;同時場景支持多位虛擬形象視頻連麥互動,更容易吸參考戶參與連麥互動,提升用戶的消費意愿及粘性,獲取更多虛擬直播檔案
七周年福利:提交表單聯系商務,有機會獲取即構ZEGO Avatar 虛擬形象1個月免費試用,
音視頻場景解決方案分享,更多詳情可搜索官網(https://zegoguanwang.datasink.sensorsdata.cn/t/pB)轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/500426.html
標籤:其他
上一篇:Bert不完全手冊6. Bert在中文領域的嘗試 Bert-WWM & MacBert & ChineseBert
下一篇:AlexNet—論文分析及復現
