Java 實現(xiàn)阿里云直播

阿里云播放器直接在線點播視頻以及直播技術(shù),此處記錄直播實現(xiàn)過程

更多精彩

官網(wǎng)

阿里云直播-快速入門

準(zhǔn)備步驟

  1. 創(chuàng)建 阿里云賬號
  2. 根據(jù) 流程 完成實名認(rèn)證,以確保可以使用阿里云相應(yīng)服務(wù)
  3. 在密鑰管理頁面獲取阿里云訪問密鑰,AccessKeyId 和 AccessKeySecret
  4. 開通阿里云直播服務(wù)

關(guān)鍵點

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

推流準(zhǔn)備

  1. 推流即直播人員進行視頻播放的操作,這需要使用推流客戶端 第三方推流工具 OBS
  2. 在推流工具中需要指定推流地址、流名稱、鑒權(quán)密鑰
  3. 如果上述信息阿里云驗證合法,既可以開始直播,在阿里云后端可以看到正在直播的流信息

拉流準(zhǔn)備

  1. 拉流即直播觀眾通過視頻播放器在線獲取直播信息,播放器使用 阿里云播放器 即可,該播放器目前只是阿里云的點播和直播服務(wù)
  2. 獲取拉流地址后傳入播放器,即可開始觀看直播

Java 開發(fā)注意點

  1. 在阿里云直播的文檔中有提供 Java SDK
    • 目前 SDK 中推薦引入的版本號是 2.3.0 ,但其實所有 API 參照的都是最新版 SDK ,最新的版本號可在 阿里云SDK頻道 找到
  2. 但如果只是單純的直播[推流和拉流] ,則不需要進行以上操作
  3. 推流的關(guān)鍵點在于 直播鑒權(quán)
    • 此處介紹的直播鑒權(quán)只是說的 auth_key 的拼接和驗證規(guī)則
    • 完整的推流和拉流地址并不知這些,需要依舊案例參考

獲取推流地址

  1. 此處獲取的只是推流地址的房間號及其他請求參數(shù)
  2. 完整的推流地址需要加上阿里云直播中心地址用戶的產(chǎn)品名稱
    • 直播中心地址 http://video-center.alivecdn.com
    • 產(chǎn)品名稱[支持自定義] /appName/
  3. vhost 用于接收拉流地址,即申請阿里云直播時準(zhǔn)備的直播域名
  4. 此處使用 Java MD5加密 實現(xiàn)字串加密,加密后長度需要是 32 位
  5. 加密串中的 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);
}

獲取拉流地址

  1. 此處獲取的拉流地址是完整的,因為拉流地址是直接獲取后傳入前端的阿里云播放器中
  2. 注意房間名后面加的后綴 .m3u8 用于表示接受的直播視頻類型,阿里云官方還提供其他幾種類型,可在文檔中查看
  3. 拉流地址和推流地址最大的區(qū)別在于請求地址的不同,拉流是請求自己提供給阿里云的直播域名,而拉流是請求阿里云的直播中心
  4. 而且推流時需要指定 vhost 告知阿里云直播域名,但拉流時不需要
  5. 獲取到拉流地址后可直接參照 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);
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,150評論 25 708
  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,211評論 3 119
  • 用兩張圖告訴你,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 14,041評論 2 59
  • 我想要那種暴尸荒野無人問津的感覺
    張畏也閱讀 199評論 0 0
  • 【誰不是孤軍奮戰(zhàn)】 “嗨,我即將出發(fā),去往遙遠(yuǎn)的旅途,摘那最美的花,捕那最鮮的魚,送給我最愛的姑娘?!?新來的駐場...
    阿如花閱讀 595評論 0 1

友情鏈接更多精彩內(nèi)容