一對一直播系統搭建方法展示:Java 實現阿里雲直播

準備步驟

創建 阿里雲賬號

根據 流程 完成實名認證,以確保可以使用阿里雲相應服務

在密鑰管理頁面獲取阿里雲訪問密鑰,AccessKeyId 和 AccessKeySecret

開通阿里雲直播服務

關鍵點

阿里雲直播服務端提供了 一系列 API ,但如果只是單純的直播[推流和拉流] ,實際不需要使用這些 API

推流準備

推流即直播人員進行視頻播放的操作,這需要使用推流客戶端 第三方推流工具 OBS

在推流工具中需要指定推流地址、流名稱、鑑權密鑰

如果上述信息阿里雲驗證合法,既可以開始直播,在阿里雲後端可以看到正在直播的流信息

拉流準備

拉流即直播觀衆通過視頻播放器在線獲取直播信息,播放器使用 阿里雲播放器 即可,該播放器目前只是阿里雲的點播和直播服務

獲取拉流地址後傳入播放器,即可開始觀看直播

Java 開發注意點

在阿里雲直播的文檔中有提供 Java SDK

目前 SDK 中推薦引入的版本號是 2.3.0 ,但其實所有 API 參照的都是最新版 SDK ,最新的版本號可在 阿里雲SDK頻道 找到

但如果只是單純的直播[推流和拉流] ,則不需要進行以上操作

推流的關鍵點在於 直播鑑權

此處介紹的直播鑑權只是說的 auth_key 的拼接和驗證規則

完整的推流和拉流地址並不知這些,需要依舊案例參考

獲取推流地址

此處獲取的只是推流地址的房間號及其他請求參數

完整的推流地址需要加上阿里雲直播中心地址和用戶的產品名稱

直播中心地址 http://video-center.alivecdn.com

產品名稱[支持自定義] /appName/

vhost 用於接收拉流地址,即申請阿里雲直播時準備的直播域名

此處使用 Java MD5加密 實現字串加密,加密後長度需要是 32 位

加密串中的 Constants.ALI_LIVE_PRIVATE_KEY 可在阿里雲後端的直播鑑權處獲取1

// 獲取推流地址

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);

}

// 唯一標識

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 用於表示接受的直播視頻類型,阿里雲官方還提供其他幾種類型,可在文檔中查看

拉流地址和推流地址最大的區別在於請求地址的不同,拉流是請求自己提供給阿里雲的直播域名,而拉流是請求阿里雲的直播中心

而且推流時需要指定 vhost 告知阿里雲直播域名,但拉流時不需要

獲取到拉流地址後可直接參照 Java + jQuery 實現阿里雲播放器接口 實現播放器的對接

在播放器的的配置中指明 isLive: true 表名是直播操作

上述筆記中實現的是點播接口,利用的通過 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);

}

// 獲取請求參數

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);

}

// 唯一標識

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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章