10分鐘玩轉一場直播
目標
本文檔將一步一步帶領在10分鐘內快速完成一場直播的完整業務流程,本文檔適合快速搭建一個直播間,設定相關資訊後,完成直播,查看直播詳細觀看數據優化直播流程的業務場景。
注意:每建立一個頻道,會預設建立4個助教子頻道,子頻道用於協助主講老師教學或者和使用者互動,當然也可以建立自己的子頻道,例如客服、班主任、嘉賓等,具體見下面帶子頻道直播教學場景和帶子頻道純影片場景
直播教學場景
此場景適合於通用的線上教學場景,相當於一個虛擬的教室,包括頻道建立、頻道初始化、暖場圖片/影片、引導圖片、講師資訊、直播文件上傳等設定,相關程式碼可以參考下面程式碼,直接複製後修改成為適合自己的課程資訊就可以。
注意:每一個頻道會預設建立4個子頻道,透過範例程式碼的回傳物件可以取得所有的子頻道資訊
效果展示
講師端效果:

助教端:
- 助教可以查看直播狀態;
- 助教可以查看聊天室成員資訊;
- 助教可以對聊天室嚴禁詞、禁言人員、踢人等進行管理;
- 助教可以協助講師對提問、問答和使用者進行溝通;
- 助教可以參與聊天,活躍課堂氣氛;

嘉賓端:
嘉賓預設以連麥的方式進入直播間,和講師互動;

觀看端效果:
體驗連結:https://live.polyv.cn/watch/2094038


流程
以下範例程式碼會根據設定的參數,自動選擇呼叫哪些介面,預設會呼叫建立頻道、頻道初始化設定等介面,如果不需要相關功能,去除相關程式碼即可,例如:不需要建立子頻道功能,去除範例程式碼中的liveCreateSonChannelListRequest.setSonChannels(sonChannels);即可。註:如果同時設定了暖場影片和暖場圖片,暖場影片會覆蓋暖場圖片;
graph LR
style A fill:#00ae9d,stroke:#323232,stroke-width:1px
style B fill:#f29952,stroke:#323232,stroke-width:1px
style C fill:#608913,stroke:#323232,stroke-width:1px
style D fill:#2ca9e0,stroke:#323232,stroke-width:1px
style E fill:#fbdd2d,stroke:#323232,stroke-width:1px
style F fill:#90d6ab,stroke:#323232,stroke-width:1px
style G fill:#2ca9e0,stroke:#323232,stroke-width:1px
style H fill:#e7372a,stroke:#323232,stroke-width:1px
style I fill:#40c1dd,stroke:#323232,stroke-width:1px
style J fill:#bf83ff,stroke:#323232,stroke-width:1px
A[创建频道] --> B[频道初始化设置]
B --> C[暖场图片设置]
B --> D[暖场视频设置]
B --> E[设置讲师信息]
B --> J[创建子频道]
B --> F[设置课件]
subgraph "频道设置(可多选)"
C
D
E
F
J
end
C --> G[封装频道返回]
D --> G
E --> G
J --> G
F --> G
G --> H[开始直播]
H --> I["结束直播,获取观看数据"]
程式碼範例
/**
* 快速创建带子频道的三分屏频道,适用于直播教学场景
* @throws IOException IO异常
* @throws NoSuchAlgorithmException 系统异常
*/
// @Test
public void testQuickCreatePPTAndSonChannel() throws IOException, NoSuchAlgorithmException {
//初始化系统,请配置自己的账号信息,正式使用时请全局统一设置
String userId = "xxx";
String appId = "xxx";
String appSecret = "xxx";
LiveGlobalConfig.init(appId, userId, appSecret);
log.debug("--初始化完成--");
QuickCreatePPTChannelRequest quickCreatePPTChannelRequest = new QuickCreatePPTChannelRequest();
QuickCreateChannelResponse quickCreateChannelResponse;
String path = LiveChannelQuickCreatorTest.class.getResource("/file/PPT.pptx").getPath();
Calendar instance = Calendar.getInstance();
instance.set(Calendar.DAY_OF_MONTH, instance.get(Calendar.DAY_OF_MONTH) + 1);
//创建频道
//频道相关基础设置-频道名
quickCreatePPTChannelRequest.setName("带子频道的直播教学场景")
//频道相关基础设置-频道密码
.setChannelPasswd(getRandomString(6))
//频道相关基础设置-连麦人数
.setLinkMicLimit(5)
//频道相关基础设置-主持人名称
.setPublisher("thomas教授")
//频道相关基础设置-是否无延迟
.setPureRtcEnabled(LiveConstant.Flag.YES.getFlag())
//频道相关基础设置-开播时间
.setStartTime(instance.getTime().getTime())
//==========================================
//频道初始化设置-频道图标地址
.setCoverImg("https://wwwimg.polyv.net/assets/dist/images/v2020/page-home/brand-advantage/row-2-3.svg")
//频道初始化设置-引导图地址
.setSplashImg(
"https://wwwimg.polyv.net/assets/dist/images/v2020/news-info-md/product-dynamic-bg_v3.jpg")
//频道初始化设置-频道描述
.setDesc("POLYV保利威是易方信息科技股份有限公司旗下拥有自主知识产权的视频云计算服务平台,其中包含 云点播 、云直播 " +
"和其它视频服务,提供API、SDK技术支持,并拥有国家专利级别的PlaySafe®视频版权保护技术及三套CDN加速,致力为用户提供稳定、安全、快速的企业级视频云服务。")
//频道初始化设置-设置暖场图
.setCoverImage("https://s1.videocc.net/live-watch/assets/img/default-splash-img.07657078.jpg")
//频道初始化设置-点击暖场图跳转的地址
.setCoverHref("http://www.baidu.com")
//频道初始化设置-设置暖场视频
// .setWarmUpFlv("http://www.w3school.com.cn/example/html5/mov_bbb.mp4")
//==========================================
//聊天室讲师信息-昵称
.setNickname("thomas-gogo")
//聊天室讲师信息-讲师头衔
.setActor("刘老师")
//聊天室讲师信息-讲师头像
.setAvatar(
"https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=2069606413,3553249962&fm=26&gp=0" +
".jpg")
//==========================================
// 讲课文档设置-讲课文档,当前支持DOC、PPT、PDF
.setFile(new File(path))
//讲课PPT设置-转换类型(‘common’:转普通图片, ‘animate’:转动画效果)
.setType("common")
//讲课PPT设置-文档名称
.setDocName("直播教学课件");
// //讲课PPT设置-文档转换完成后的回调地址,不需要不传
// .setCallbackUrl("http://www.baidu.com/callback")
LiveCreateSonChannelListRequest liveCreateSonChannelListRequest = new LiveCreateSonChannelListRequest();
List<LiveCreateSonChannelListRequest.SonChannel> sonChannels = new ArrayList<LiveCreateSonChannelListRequest.SonChannel>();
sonChannels.add(setSonChannelsInfo1());
sonChannels.add(setSonChannelsInfo2());
liveCreateSonChannelListRequest.setSonChannels(sonChannels);
quickCreateChannelResponse = new LiveChannelQuickCreatorServiceImpl().quickCreatePPTSence(quickCreatePPTChannelRequest,
liveCreateSonChannelListRequest);
Assert.assertNotNull(quickCreateChannelResponse);
log.debug("快速创建三分屏频道成功,{}", JSON.toJSONString(quickCreateChannelResponse));
log.debug("网页开播地址:https://live.polyv.net/web-start/login?channelId={} , 登录密码: {}",
quickCreateChannelResponse.getLiveChannelBasicInfoResponse().getChannelId(),
quickCreatePPTChannelRequest.getChannelPasswd());
log.debug("网页观看地址:https://live.polyv.cn/watch/{} ",
quickCreateChannelResponse.getLiveChannelBasicInfoResponse().getChannelId());
log.debug("嘉宾进入直播间地址:http://live.polyv.net/web-start/guest?channelId={} ,登录密码: {} ",
quickCreateChannelResponse.getSonChannelInfos().get(0).getAccount(),
sonChannels.get(0).getPasswd());
log.debug("助教进入直播间地址:https://live.polyv.net/teacher.html , 登录频道: {}, 登录密码: {}",
quickCreateChannelResponse.getSonChannelInfos().get(1).getAccount(),
sonChannels.get(1).getPasswd());
/**
* todo : B端客户的业务逻辑,将quickCreateChannelResponse的相关信息保持到自己的DB中组织业务逻辑
*/
/**
* todo : 采用网页开播或者客户端开播,直播结束后 ,可以拉取用户观看直播的观看数据,对观看效果做进一步的分析,改进直播流程和细节
*/
//打印观看日志
printViewLog(quickCreateChannelResponse.getLiveChannelBasicInfoResponse().getChannelId());
}
/**
* 设置子频道信息-嘉宾
* @return 子频道列表
*/
private LiveCreateSonChannelListRequest.SonChannel setSonChannelsInfo1() {
LiveCreateSonChannelListRequest.SonChannel sonChannel1 = new LiveCreateSonChannelListRequest.SonChannel();
//设置子频道信息,子频道代表助教、嘉宾信息
sonChannel1
//子频道角色-默认不传为助教,传Guest为嘉宾
.setRole("Guest")
//子频道昵称
.setNickname("嘉宾-陈先生")
//子频道登录密码
.setPasswd(getRandomString(10))
//子频道头衔
.setActor("教授")
//子频道头像
.setAvatar(
"https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2480846186,1530344&fm=15&gp=0.jpg");
return sonChannel1;
}
/**
* 设置子频道信息-助教
* @return 子频道列表
*/
private LiveCreateSonChannelListRequest.SonChannel setSonChannelsInfo2() {
LiveCreateSonChannelListRequest.SonChannel sonChannel2 = new LiveCreateSonChannelListRequest.SonChannel();
sonChannel2.setRole(null)
.setNickname("助教-王小姐")
.setPasswd(getRandomString(10))
.setActor("王老师")
.setAvatar("https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=356414612,1103487565&fm=15&gp=0" +
".jpg");
return sonChannel2;
}
/**
* 打印频道观看日志
* @param channelId
* @throws IOException
* @throws NoSuchAlgorithmException
*/
private void printViewLog(String channelId) throws IOException, NoSuchAlgorithmException {
LiveListChannelViewlogRequest liveListChannelViewlogRequest = new LiveListChannelViewlogRequest();
LiveListChannelViewlogResponse liveListChannelViewlogResponse;
Calendar instance = Calendar.getInstance();
instance.set(Calendar.DAY_OF_MONTH, instance.get(Calendar.DAY_OF_MONTH) + 2);
//依据频道号和起止时间查询观看日志
liveListChannelViewlogRequest.setChannelId(channelId)
.setStartTime(new Date())
.setEndTime(instance.getTime());
liveListChannelViewlogResponse = new LiveChannelViewdataServiceImpl().listChannelViewlog(
liveListChannelViewlogRequest);
Assert.assertNotNull(liveListChannelViewlogResponse);
if (liveListChannelViewlogResponse != null) {
//to do something ......
log.debug("测试分页查询频道观看日志成功,{}", JSON.toJSONString(liveListChannelViewlogResponse));
}
}
請求描述
| 參數名 | 必選 | 類型 | 說明 |
|---|---|---|---|
| name | true | String | 自訂頻道名稱,一般是課程主題、會議主題、培訓主題等,例如 財務制度培訓、烏鎮峰會 |
| channelPasswd | true | String | 自訂頻道密碼,B端講師透過該密碼進入直播間開播,長度不能超過16位,必須同時包含字母和數字 |
| linkMicLimit | false | Integer | 連麥人數,-1=<取值範圍<=帳號級的連麥人數,-1:表示使用帳號預設的連麥人數,最大16人(註:帳號級連麥人數需通知平台管理員設定才生效) |
| publisher | false | String | 主持人名稱 |
| pureRtcEnabled | false | String | 是否為無延遲直播,Y 表示開啟,預設為N |
| coverImg | false | String | 頻道圖示地址 |
| splashImg | false | String | 引導圖地址 |
| startTime | false | Long | 直播開始時間,13位時間戳,設定為0 表示關閉直播開始時間顯示 |
| desc | false | String | 直播介紹 |
| nickname | false | String | 講師暱稱 |
| actor | false | String | 講師頭銜,講師暱稱不為空時該參數必填 |
| avatar | false | String | 頭像圖片地址 |
| coverImage | false | String | 暖場圖片地址,圖片大小建議:800x450,支援PNG、JPEG、GIF格式 |
| coverHref | false | String | 點擊暖場圖片後瀏覽器跳轉地址 |
| warmUpFlv | false | String | 暖場影片地址(http地址),行動端不支援FLV影片檔案,建議使用MP4影片檔案 |
| file | false | File | 上傳的檔案不超過50M,格式限制為(ppt, pdf,pptx,doc,docx,wps, xls,xlsx) |
| type | false | String | 轉換類型(‘common’:轉普通圖片, ‘animate’:轉動畫效果)預設不傳轉普通,因為只有ppt,pptx可以轉動畫,其他類型檔案會自動轉成普通;檔案轉動畫轉失敗會直接把類型轉為普通 |
| docName | false | String | 文件名稱(不傳預設使用ppt上傳的檔案取得的檔案名稱作為文件名稱,文件名稱不得超過100個字元) |
| callbackUrl | false | String | 文件上傳轉換成功回調地址 |
返回描述
| 參數名 | 類型 | 說明 |
|---|---|---|
| liveChannelBasicInfoResponse | LiveChannelBasicInfoResponse | 頻道資訊【詳見LiveChannelBasicInfoResponse參數描述】 |
| sonChannelInfos | Array | 子頻道資訊【詳見LiveSonChannelInfoResponse參數描述】 |
LiveChannelBasicInfoResponse參數描述
| 參數名 | 類型 | 說明 |
|---|---|---|
| channelId | String | 頻道號 |
| name | String | 頻道名稱 |
| channelPasswd | String | 頻道密碼 |
| publisher | String | 主持人名稱 |
| startTime | Date | 直播開始時間,關閉時為null |
| pageView | Integer | 頁面累計觀看數 |
| likes | Integer | 觀看頁點讚數 |
| coverImg | String | 頻道圖示url |
| splashImg | String | 頻道引導圖url |
| splashEnabled | String | 引導頁開關(取值為Y/N) |
| desc | String | 直播介紹 |
| consultingMenuEnabled | String | 諮詢提問開關(取值為Y/N) |
| maxViewerRestrict | String | 限制最大線上觀看人數開關(取值為Y/N) |
| maxViewer | Integer | 最大線上觀看人數 |
| watchStatus | String | 頻道的觀看頁狀態,取值為:live(直播中)、end(直播結束)、playback(回放中)、waiting(等待直播) |
| watchStatusText | String | 觀看頁狀態描述,直播中,回放中,已結束,未開始 |
| userCategory | UserCategory | 頻道所屬分類的資訊【詳見UserCategory參數描述】 |
| authSettings | Array | 直播觀看條件列表【詳見AuthSetting參數描述】 |
LiveSonChannelInfoResponse參數描述
| 參數名 | 類型 | 說明 |
|---|---|---|
| account | String | 子頻道號 |
| userId | String | POLYV使用者ID,和保利威官網一致,取得路徑:官網->登入->直播(開發設定) |
| channelId | String | 頻道號 |
| passwd | String | 子頻道密碼 |
| nickname | String | 子頻道名稱 |
| stream | String | 子頻道流名(單獨使用無效) |
| status | String | 子頻道狀態 |
| createdTime | Date | 建立子頻道時間 |
| lastModified | Date | 子頻道最後修改時間 |
| sort | Integer | 頻道中所有子頻道序號 |
| avatar | String | 子頻道頭像 |
| pageTurnEnabled | String | 子頻道翻頁權限(只能一個子頻道有) |
| notifyEnabled | String | 發布公告權限(Y/N) |
| checkinEnabled | String | 開啟簽到權限(Y/N) |
| voteEnabled | String | 發起投票(Y/N) |
| role | String | 子頻道角色 |
| pushUrl | String | 子頻道推流地址(子頻道推流請參考後台導播台使用) |
UserCategory參數描述
| 參數名 | 類型 | 說明 |
|---|---|---|
| categoryId | Integer | 分類ID |
| categoryName | String | 分類名稱 |
| userId | String | POLYV使用者ID,和保利威官網一致,取得路徑:官網->登入->直播(開發設定) |
| rank | Integer | 分類的排序值 |
AuthSetting參數描述
| 參數名 | 類型 | 說明 |
|---|---|---|
| channelId | String | 頻道號 |
| userId | String | POLYV使用者ID,和保利威官網一致,取得路徑:官網->登入->直播(開發設定) |
| rank | Integer | 用於實現一個頻道設定兩個觀看條件,為1或2(1為主要條件,2為次要條件) |
| globalSettingEnabled | String | 是否開啟全域設定(Y/N) |
| enabled | String | 是否開啟觀看條件(Y/N) |
| authType | String | 觀看條件類型(1. 無限制 none 2. 驗證碼觀看 code 3. 付費觀看 pay 4. 白名單觀看 phone 5. 登記觀看 info 6. 分享觀看 wxshare 7. 自訂授權觀看 custom 8. 外部授權觀看 external) |
| authTips | String | 白名單觀看提示資訊 |
| payAuthTips | String | 付費觀看提示資訊 |
| authCode | String | 驗證碼觀看方式的驗證碼 |
| qcodeTips | String | 驗證碼觀看方式的二維碼提示 |
| qcodeImg | String | 驗證碼觀看方式的二維碼圖片 |
| price | Float | 付費觀看的價格 |
| watchEndTime | Date | 付費觀看,截止時間,為null表示:一次付費,永久有效 |
| validTimePeriod | Integer | 付費觀看的截止時長(天) |
| customKey | String | 自訂授權觀看的key |
| customUri | String | 自訂授權觀看的介面地址 |
| externalKey | String | 外部授權觀看的key |
| externalUri | String | 外部授權觀看的介面地址 |
| externalRedirectUri | String | 外部授權觀看,使用者直接存取觀看頁時的跳轉地址 |
普通影片場景
此場景適合非教學情況下的其他場景,比如直播帶貨、會議直播、年會直播的場景,和直播教學場景的區別是主播端和觀看端的頁面排版不同,直播教學場景以三分螢幕的方式將講師頭像、課件、白板、聊天室整合到一個頁面呈現給終端使用者,而普通影片場景同時只能呈現講師攝影機、文件、電腦螢幕的一種,一般情況直接展現講師攝影機採集的畫面。
注意:每一個頻道會預設建立4個子頻道,透過範例程式碼的回傳物件可以取得所有的子頻道資訊
效果展示
講師端效果(呈現文件給終端使用者):

講師端效果(呈現講師攝影機採集資訊給終端使用者):

觀看端效果:


助教端:
助教可以查看直播狀態;
助教可以查看聊天室成員資訊;
助教可以對聊天室嚴禁詞、禁言人員、踢人等進行管理;
助教可以協助講師對提問、問答和使用者進行溝通;
助教可以參與聊天,活躍課堂氣氛;

流程
如下流程除了 頻道建立 和 頻道初始化 必須執行,其他都是可選,暖場圖片/影片 、講師資訊 、 直播PPT上傳,不設相關參數,這些介面將不會被呼叫,暖場影片和暖場圖片只有一個有效,如果同時設定了暖場影片和暖場圖片,暖場影片會覆蓋暖場圖片;
graph LR
style A fill:#00ae9d,stroke:#323232,stroke-width:1px
style B fill:#f29952,stroke:#323232,stroke-width:1px
style C fill:#608913,stroke:#323232,stroke-width:1px
style D fill:#2ca9e0,stroke:#323232,stroke-width:1px
style E fill:#fbdd2d,stroke:#323232,stroke-width:1px
style F fill:#90d6ab,stroke:#323232,stroke-width:1px
style G fill:#2ca9e0,stroke:#323232,stroke-width:1px
style H fill:#e7372a,stroke:#323232,stroke-width:1px
style I fill:#40c1dd,stroke:#323232,stroke-width:1px
style J fill:#bf83ff,stroke:#323232,stroke-width:1px
A[创建频道] --> B[频道初始化设置]
B --> C[暖场图片设置]
B --> D[暖场视频设置]
B --> E[设置讲师信息]
B --> J[创建子频道]
B --> F[设置课件]
subgraph "频道设置(可多选)"
C
D
E
F
J
end
C --> G[封装频道返回]
D --> G
E --> G
J --> G
F --> G
G --> H[开始直播]
H --> I["结束直播,获取观看数据"]
程式碼範例
/**
* 快速创建纯视频频道,适合直播带货、会议、年会、活动拍摄、大会直播等直播业务场景
* 约束:2、同时设置暖场图片和暖场视频只生效暖场视频。
* @throws IOException IO异常
* @throws NoSuchAlgorithmException 系统异常
*/
// @Test
public void testQuickCreateVideoAndSonChannel() throws IOException, NoSuchAlgorithmException {
//初始化系统,请配置自己的账号信息,正式使用时请全局统一设置
String userId = "xxx";
String appId = "xxx";
String appSecret = "xxx";
LiveGlobalConfig.init(appId, userId, appSecret);
log.debug("--初始化完成--");
QuickCreateVideoChannelRequest quickCreateVideoChannelRequest = new QuickCreateVideoChannelRequest();
QuickCreateChannelResponse quickCreateChannelResponse;
Calendar instance = Calendar.getInstance();
instance.set(Calendar.DAY_OF_MONTH, instance.get(Calendar.DAY_OF_MONTH) + 1);
//创建频道
//频道相关基础设置-频道名
quickCreateVideoChannelRequest.setName("带子频道的纯视频直播场景")
//频道相关基础设置-频道密码
.setChannelPasswd(getRandomString(6))
//频道相关基础设置-连麦人数
.setLinkMicLimit(5)
//频道相关基础设置-观看页显示的主讲人描述
.setPublisher("thomas教授")
//频道相关基础设置-是否无延迟
.setPureRtcEnabled(LiveConstant.Flag.YES.getFlag())
//频道相关基础设置-开播时间
.setStartTime(instance.getTime().getTime())
//==========================================
//频道初始化设置-频道图标地址
.setCoverImg("https://wwwimg.polyv.net/assets/dist/images/v2020/page-home/brand-advantage/row-2-3.svg")
//频道初始化设置-引导图地址
.setSplashImg(
"https://wwwimg.polyv.net/assets/dist/images/v2020/news-info-md/product-dynamic-bg_v3.jpg")
//频道初始化设置-频道描述
.setDesc("POLYV保利威是易方信息科技股份有限公司旗下拥有自主知识产权的视频云计算服务平台,其中包含 云点播 、云直播 " +
"和其它视频服务,提供API、SDK技术支持,并拥有国家专利级别的PlaySafe®视频版权保护技术及三套CDN加速,致力为用户提供稳定、安全、快速的企业级视频云服务。")
//频道初始化设置-设置暖场图
.setCoverImage("https://s1.videocc.net/live-watch/assets/img/default-splash-img.07657078.jpg")
//频道初始化设置-点击暖场图跳转的地址
.setCoverHref("http://www.baidu.com")
//频道初始化设置-设置暖场视频
// .setWarmUpFlv("http://www.w3school.com.cn/example/html5/mov_bbb.mp4")
//==========================================
//聊天室讲师信息-昵称
.setNickname("thomas-gogo")
//聊天室讲师信息-讲师头衔
.setActor("刘老师")
//聊天室讲师信息-讲师头像
.setAvatar(
"https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=2069606413,3553249962&fm=26&gp=0" +
".jpg");
LiveCreateSonChannelListRequest liveCreateSonChannelListRequest = new LiveCreateSonChannelListRequest();
List<LiveCreateSonChannelListRequest.SonChannel> sonChannels = new ArrayList<>();
//纯视频场景只能创建助教,不允许创建嘉宾
sonChannels.add(setSonChannelsInfo2());
liveCreateSonChannelListRequest.setSonChannels(sonChannels);
//请求服务器,创建带子频道的纯视频频道
quickCreateChannelResponse = new LiveChannelQuickCreatorServiceImpl().quickCreateVideoSence(quickCreateVideoChannelRequest,
liveCreateSonChannelListRequest);
Assert.assertNotNull(quickCreateChannelResponse);
log.debug("快速创建纯视频直播频道成功,{}", JSON.toJSONString(quickCreateChannelResponse));
//无延迟纯视频模式只支持客户端开播
if (LiveConstant.Flag.YES.getFlag().equals(quickCreateVideoChannelRequest.getPureRtcEnabled())) {
log.debug("客户端开播地址:https://live.polyv.net/start-client.html?channelId={} , 登录密码: {}",
quickCreateChannelResponse.getLiveChannelBasicInfoResponse().getChannelId(),
quickCreateVideoChannelRequest.getChannelPasswd());
} else {
log.debug("网页开播地址:https://live.polyv.net/web-start/login?channelId={} , 登录密码: {}",
quickCreateChannelResponse.getLiveChannelBasicInfoResponse().getChannelId(),
quickCreateVideoChannelRequest.getChannelPasswd());
}
log.debug("网页观看地址:https://live.polyv.cn/watch/{} ",
quickCreateChannelResponse.getLiveChannelBasicInfoResponse().getChannelId());
//无延迟纯视频模式只支持客户端助教视频连麦
if (LiveConstant.Flag.YES.getFlag().equals(quickCreateVideoChannelRequest.getPureRtcEnabled())) {
log.debug("助教客户端进入直播间地址:https://live.polyv.net/teacher.html , 登录频道: {}, 登录密码: {}",
quickCreateChannelResponse.getSonChannelInfos().get(0).getAccount(),
sonChannels.get(0).getPasswd());
} else {
log.debug("助教进入直播间地址:https://live.polyv.net/teacher.html , 登录频道: {}, 登录密码: {}",
quickCreateChannelResponse.getSonChannelInfos().get(0).getAccount(),
sonChannels.get(0).getPasswd());
}
/**
* todo : B端客户的业务逻辑,将quickCreateChannelResponse的相关信息保持到自己的DB中组织业务逻辑
*/
/**
* todo : 采用网页开播或者客户端开播,直播结束后 ,可以拉取用户观看直播的观看数据,对观看效果做进一步的分析,改进直播流程和细节
*/
//打印观看日志
printViewLog(quickCreateChannelResponse.getLiveChannelBasicInfoResponse().getChannelId());
}
/**
* 设置子频道信息-助教
* @return 子频道列表
*/
private LiveCreateSonChannelListRequest.SonChannel setSonChannelsInfo2() {
LiveCreateSonChannelListRequest.SonChannel sonChannel2 = new LiveCreateSonChannelListRequest.SonChannel();
sonChannel2.setRole(null)
.setNickname("助教-王小姐")
.setPasswd(getRandomString(10))
.setActor("王老师")
.setAvatar("https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=356414612,1103487565&fm=15&gp=0" +
".jpg");
return sonChannel2;
}
/**
* 打印频道观看日志
* @param channelId
* @throws IOException
* @throws NoSuchAlgorithmException
*/
private void printViewLog(String channelId) throws IOException, NoSuchAlgorithmException {
LiveListChannelViewlogRequest liveListChannelViewlogRequest = new LiveListChannelViewlogRequest();
LiveListChannelViewlogResponse liveListChannelViewlogResponse;
Calendar instance = Calendar.getInstance();
instance.set(Calendar.DAY_OF_MONTH, instance.get(Calendar.DAY_OF_MONTH) + 2);
//依据频道号和起止时间查询观看日志
liveListChannelViewlogRequest.setChannelId(channelId)
.setStartTime(new Date())
.setEndTime(instance.getTime());
liveListChannelViewlogResponse = new LiveChannelViewdataServiceImpl().listChannelViewlog(
liveListChannelViewlogRequest);
Assert.assertNotNull(liveListChannelViewlogResponse);
if (liveListChannelViewlogResponse != null) {
//to do something ......
log.debug("测试分页查询频道观看日志成功,{}", JSON.toJSONString(liveListChannelViewlogResponse));
}
}
請求描述
| 參數名 | 必選 | 類型 | 說明 |
|---|---|---|---|
| name | true | String | 自訂頻道名稱,一般是課程主題、會議主題、培訓主題等,例如 財務制度培訓、烏鎮峰會 |
| channelPasswd | true | String | 自訂頻道密碼,B端講師透過該密碼進入直播間開播,長度不能超過16位,必須同時包含字母和數字 |
| linkMicLimit | false | Integer | 連麥人數,-1=<取值範圍<=帳號級的連麥人數,-1:表示使用帳號預設的連麥人數,最大16人(註:帳號級連麥人數需通知平台管理員設定才生效) |
| publisher | false | String | 觀看頁顯示的主講人描述 |
| pureRtcEnabled | false | String | 是否為無延遲直播,Y 表示開啟,預設為N |
| coverImg | false | String | 頻道圖示地址 |
| splashImg | false | String | 引導圖地址 |
| desc | false | String | 直播介紹 |
| startTime | false | Long | 直播開始時間,13位時間戳,設定為0 表示關閉直播開始時間顯示 |
| coverImage | false | String | 暖場圖片地址,圖片大小建議:800x450,支援PNG、JPEG、GIF格式 |
| coverHref | false | String | 點擊暖場圖片後瀏覽器跳轉地址 |
| warmUpFlv | false | String | 暖場影片地址(http地址),行動端不支援FLV影片檔案,建議使用MP4影片檔案 |
| nickname | false | String | 講師暱稱 |
| actor | false | String | 講師頭銜,講師暱稱不為空時該參數必填 |
| avatar | false | String | 頭像圖片地址 |
返回描述
| 參數名 | 類型 | 說明 |
|---|---|---|
| liveChannelBasicInfoResponse | LiveChannelBasicInfoResponse | 頻道資訊【詳見LiveChannelBasicInfoResponse參數描述】 |
| sonChannelInfos | Array | 子頻道資訊【詳見LiveSonChannelInfoResponse參數描述】 |
LiveChannelBasicInfoResponse參數描述
| 參數名 | 類型 | 說明 |
|---|---|---|
| channelId | String | 頻道號 |
| name | String | 頻道名稱 |
| channelPasswd | String | 頻道密碼 |
| publisher | String | 主持人名稱 |
| startTime | Date | 直播開始時間,關閉時為null |
| pageView | Integer | 頁面累計觀看數 |
| likes | Integer | 觀看頁點讚數 |
| coverImg | String | 頻道圖示url |
| splashImg | String | 頻道引導圖url |
| splashEnabled | String |
