阿里云播放器直接在線點播視頻以及直播技術(shù),此處記錄直播實現(xiàn)過程
更多精彩
- 更多技術(shù)博客,請移步 IT人才終生實訓(xùn)與職業(yè)進階平臺
官網(wǎng)
準(zhǔn)備步驟
- 創(chuàng)建 阿里云賬號
- 根據(jù) 流程 完成實名認(rèn)證,以確保可以使用阿里云相應(yīng)服務(wù)
- 在密鑰管理頁面獲取阿里云訪問密鑰,AccessKeyId 和 AccessKeySecret
- 開通阿里云直播服務(wù)
關(guān)鍵點
- 阿里云直播服務(wù)端提供了 一系列 API ,但如果只是單純的直播[推流和拉流] ,實際不需要使用這些 API
推流準(zhǔn)備
- 推流即直播人員進行視頻播放的操作,這需要使用推流客戶端 第三方推流工具 OBS
- 在推流工具中需要指定推流地址、流名稱、鑒權(quán)密鑰
- 如果上述信息阿里云驗證合法,既可以開始直播,在阿里云后端可以看到正在直播的流信息
拉流準(zhǔn)備
- 拉流即直播觀眾通過視頻播放器在線獲取直播信息,播放器使用 阿里云播放器 即可,該播放器目前只是阿里云的點播和直播服務(wù)
- 獲取拉流地址后傳入播放器,即可開始觀看直播
Java 開發(fā)注意點
- 在阿里云直播的文檔中有提供 Java SDK
- 目前 SDK 中推薦引入的版本號是 2.3.0 ,但其實所有 API 參照的都是最新版 SDK ,最新的版本號可在 阿里云SDK頻道 找到
- 但如果只是單純的直播[推流和拉流] ,則不需要進行以上操作
- 推流的關(guān)鍵點在于 直播鑒權(quán)
- 此處介紹的直播鑒權(quán)只是說的 auth_key 的拼接和驗證規(guī)則
- 完整的推流和拉流地址并不知這些,需要依舊案例參考
獲取推流地址
- 此處獲取的只是推流地址的房間號及其他請求參數(shù)
- 完整的推流地址需要加上阿里云直播中心地址和用戶的產(chǎn)品名稱
- 直播中心地址
http://video-center.alivecdn.com - 產(chǎn)品名稱[支持自定義]
/appName/
- 直播中心地址
-
vhost用于接收拉流地址,即申請阿里云直播時準(zhǔn)備的直播域名 - 此處使用 Java MD5加密 實現(xiàn)字串加密,加密后長度需要是 32 位
- 加密串中的
Constants.ALI_LIVE_PRIVATE_KEY可在阿里云后端的直播鑒權(quán)處獲取
// 獲取推流地址
public String getPushUri(String roomName, Long endTime) {
return getRoomName(roomName) + "vhost=" + Constants.ALI_LIVE_PULL_URL + "&" + generateAuthKey(roomName, endTime);
}
// 房間號
private String getRoomName(String roomName) {
return roomName + "?";
}
// 完整驗簽串
private String generateAuthKey(String roomName, Long endTime) {
return "auth_key=" + endTime + generateUuid() + generateEncryptStr(roomName, endTime);
}
// 唯一標(biāo)識
private String generateUuid() {
String uuid = "0";
String uid = "0";
return "-" + uuid + "-" + uid + "-";
}
// 驗簽密鑰
private String generateEncryptStr(String roomName, Long endTime) {
String uri = Constants.ALI_LIVE_APP_NAME + roomName;
return md5(uri + "-" + endTime + generateUuid() + Constants.ALI_LIVE_PRIVATE_KEY);
}
獲取拉流地址
- 此處獲取的拉流地址是完整的,因為拉流地址是直接獲取后傳入前端的阿里云播放器中
- 注意房間名后面加的后綴
.m3u8用于表示接受的直播視頻類型,阿里云官方還提供其他幾種類型,可在文檔中查看 - 拉流地址和推流地址最大的區(qū)別在于請求地址的不同,拉流是請求自己提供給阿里云的直播域名,而拉流是請求阿里云的直播中心
- 而且推流時需要指定
vhost告知阿里云直播域名,但拉流時不需要 - 獲取到拉流地址后可直接參照 Java + jQuery 實現(xiàn)阿里云播放器接口 實現(xiàn)播放器的對接
- 在播放器的的配置中指明
isLive: true表名是直播操作 - 上述筆記中實現(xiàn)的是點播接口,利用的通過
vid獲取playAuth的方式,這不適用于直播 - 直播需要直接指定
source: url即可
- 在播放器的的配置中指明
public String getPullUrl(String roomName, Long endTime) {
roomName += ".m3u8";
return "http://" + Constants.ALI_LIVE_PULL_URL + generateUri(roomName) + generateAuthKey(roomName, endTime);
}
// 獲取請求參數(shù)
private String generateUri(String roomName) {
return Constants.ALI_LIVE_APP_NAME + getRoomName(roomName);
}
// 房間號
private String getRoomName(String roomName) {
return roomName + "?";
}
// 完整驗簽串
private String generateAuthKey(String roomName, Long endTime) {
return "auth_key=" + endTime + generateUuid() + generateEncryptStr(roomName, endTime);
}
// 唯一標(biāo)識
private String generateUuid() {
String uuid = "0";
String uid = "0";
return "-" + uuid + "-" + uid + "-";
}
// 驗簽密鑰
private String generateEncryptStr(String roomName, Long endTime) {
String uri = Constants.ALI_LIVE_APP_NAME + roomName;
return md5(uri + "-" + endTime + generateUuid() + Constants.ALI_LIVE_PRIVATE_KEY);
}