天天看點

騰訊雲僞直播方案介紹騰訊雲現有方案概覽一 點播僞直播方案介紹二 雲直播拉流轉推方案三 導播台SAAS四 serverless+TRTC五 serverless+雲直播六 注意事項

随着雲原生、直播技術的不斷發展,線上授課、重大賽事、網劇輪播等直播場景不斷豐富,很多直播平台已經在以上場景都支援了僞直播功能,本文對騰訊雲現有的各種僞直播方案進行梳理,并針對serverless+雲直播方案進行詳細介紹。

騰訊雲現有方案概覽

方案 底層能力 适用場景 接入複雜度 延遲
點播轉碼 雲點播 通過HLS播放,限制觀看時間,限制調整觀看進度,适合對延遲及播放格式要求不高的場景 簡單 10s以上
雲直播拉流轉推 雲直播 使用雲直播拉流轉推能力,可将一個檔案作為拉流來源,适用于僞直播任務數量較少的場景。 根據播放協定不同,webtrc<rtmp<flv<HLS
SAAS服務 導播台SAAS 通過雲導播台能力,通過圖形頁面操作轉推,适用于無開發人員,開箱即用的場景 簡單 同上
serverless+TRTC 雲函數+TRTC 基于serverless+實時音視訊技術,适用于為超低延遲及互動連麥場景 1S > T >300ms
serverless+雲直播 雲函數+快直播/标準直播 基于serverless+實時音視訊技術,适用于較低延遲及純觀看場景 簡單 根據播放協定不同,通常延遲webtrc<rtmp<flv<HLS

一 點播僞直播方案介紹

僞直播依托于點播的播放控制能力,将點播檔案增加“限制觀看時間”和“同步觀看進度”兩種通路控制的功能,使點播檔案達成類直播效果,使用者可以首先生成點播檔案,在指定的直播時間使用點播檔案進行類直播分發,有效的降低直播的風險與成本

使用限制:

該方案中僞直播本質上是點播,是以并不具備标準直播的一些能力,例如:

  • 不支援對“一場”僞直播進行資料統計。
  • 無法感覺“一場”僞直播的開始和結束。
  • 不支援對正在進行的僞直播做暫停/終止等操作。
  • 不支援對已分發出去的僞直播連結進行禁用。
  • 不支援動态改變視訊内容(例如實時轉碼、打水印等)。

實作步驟:

步驟1:上傳視訊到雲點播

步驟2:将視訊轉碼為 HLS

步驟3:開啟 Key 防盜鍊

步驟4:計算防盜鍊簽名

二 雲直播拉流轉推方案

騰訊雲直播控制台提供拉流轉推工具,若您直播源無推流能力或點播視訊内容需通過直播形式分發,拉流轉推服務提供内容拉取并推送的功能,無需進行直播推流,即可快速拉取已有的視訊/直播,推送到目标位址上。
騰訊雲僞直播方案介紹騰訊雲現有方案概覽一 點播僞直播方案介紹二 雲直播拉流轉推方案三 導播台SAAS四 serverless+TRTC五 serverless+雲直播六 注意事項

注意事項

  • 最多支援建立20個拉流轉推任務,如果需要提高限制需要提工單申請。
  • 使用拉流轉推服務會産生拉流轉推任務時長賬單,詳細費用請參見 拉流轉推計費說明。

三 導播台SAAS

雲導播台內建輪播功能,提供豐富的直播編輯能力。

雲導播台

騰訊雲僞直播方案介紹騰訊雲現有方案概覽一 點播僞直播方案介紹二 雲直播拉流轉推方案三 導播台SAAS四 serverless+TRTC五 serverless+雲直播六 注意事項

四 serverless+TRTC

當使用者業務場景需要支援超低延遲觀看,并且同時支援主播及觀衆連麥互動場景,serverless雲函數提供開箱即用、靈活便捷、可程式設計的線上媒體流輸入能力,支援将已有的錄播視訊或者 RTMP 直播流推送到實時音視訊 TRTC 房間進行直播

使用雲函數為 TRTC 輸入線上媒體流

騰訊雲僞直播方案介紹騰訊雲現有方案概覽一 點播僞直播方案介紹二 雲直播拉流轉推方案三 導播台SAAS四 serverless+TRTC五 serverless+雲直播六 注意事項

五 serverless+雲直播

以上四種方案在騰訊雲官網已經有較為詳細的文檔,接下來以serverless+快直播webrtc為例,介紹雲函數+快直播實作僞直播的示例

serverless+雲直播的的方式與上文TRTC的方式類似,隻是将TRTC替換為雲直播:

騰訊雲僞直播方案介紹騰訊雲現有方案概覽一 點播僞直播方案介紹二 雲直播拉流轉推方案三 導播台SAAS四 serverless+TRTC五 serverless+雲直播六 注意事項

實作步驟:

5.1 建立雲函數

  1. 登入雲函數控制台,選擇左側導航欄中的【函數服務】。
  2. 在“函數服務”頁面上方選擇地域,并單擊【建立】進入建立函數頁面,模糊搜尋"rtmp",選擇“視訊檔案轉RTMP模闆”進入下一步。如下圖所示:
騰訊雲僞直播方案介紹騰訊雲現有方案概覽一 點播僞直播方案介紹二 雲直播拉流轉推方案三 導播台SAAS四 serverless+TRTC五 serverless+雲直播六 注意事項

可使用模闆函數修改業務邏輯

5.2 準備直播推流及播放位址

參考 雲直播位址生成器

騰訊雲僞直播方案介紹騰訊雲現有方案概覽一 點播僞直播方案介紹二 雲直播拉流轉推方案三 導播台SAAS四 serverless+TRTC五 serverless+雲直播六 注意事項

注意UDP格式位址即為快直播位址

5.3 測試函數功能

1 使用 Postman 構造 HTTP 請求,傳入點播檔案位址和直播rtmp推流位址,其中檔案位址為對象存儲檔案位址,快直播和普通直播的推流位址為同一個

騰訊雲僞直播方案介紹騰訊雲現有方案概覽一 點播僞直播方案介紹二 雲直播拉流轉推方案三 導播台SAAS四 serverless+TRTC五 serverless+雲直播六 注意事項

2 請求發送後會收到異步函數響應 “Async run task submitted”

騰訊雲僞直播方案介紹騰訊雲現有方案概覽一 點播僞直播方案介紹二 雲直播拉流轉推方案三 導播台SAAS四 serverless+TRTC五 serverless+雲直播六 注意事項

3 在“函數詳情”頁面中選擇【日志查詢】頁簽,檢視函數執行狀态

騰訊雲僞直播方案介紹騰訊雲現有方案概覽一 點播僞直播方案介紹二 雲直播拉流轉推方案三 導播台SAAS四 serverless+TRTC五 serverless+雲直播六 注意事項

4 使用播放器觀看快直播或标準直播位址

快直播需要用webrtc播放,參考: 騰訊雲webrtc播放器demo

騰訊雲僞直播方案介紹騰訊雲現有方案概覽一 點播僞直播方案介紹二 雲直播拉流轉推方案三 導播台SAAS四 serverless+TRTC五 serverless+雲直播六 注意事項

webtrc player

5 在雲直播控制台流資料檢視播放統計資料

騰訊雲僞直播方案介紹騰訊雲現有方案概覽一 點播僞直播方案介紹二 雲直播拉流轉推方案三 導播台SAAS四 serverless+TRTC五 serverless+雲直播六 注意事項

流資料查詢

6 模闆代碼示例

# -*- coding: utf8 -*-
import json
import os
import subprocess
import logging
import sys
import re
import requests

#ffmpeg指令
#視訊轉flv推流RTMP
video_2rtmp = '/tmp/ffmpeg -re -reconnect 1 -reconnect_at_eof 1 -reconnect_streamed 1 -reconnect_delay_max 2 -progress /dev/stdout -ss %s -i "%s"  -c copy -f flv -flvflags no_duration_filesize "%s" '

def main_handler(event, context):

    # 為了适配windows端使用者
    # 将ffmeg檔案複制到/tmp下并賦予執行權限
    subprocess.run(
        'cp ./ffmpeg /tmp/ffmpeg && chmod 755 /tmp/ffmpeg',
        shell=True)
    
    #判斷請求是否從API網關傳遞
    if "body" in event.keys():
        body = event['body']
        data = json.loads(body)
        # 視訊檔案位址,必選項
        video_url = data['video_url']

        print("==== video_url ====")
        print(video_url)
        # RTMP推流位址,需包含鑒權資訊,必選項
        rtmp_url = data['rtmp_url']

        print("==== rtmp_url ====")
        print(rtmp_url)

        # 播放起始時間點,可選參數,預設從檔案頭開始
        if 'ss' in data:
            ss = data['ss']
        else:
            ss = '00:00:00.00'
    # 其他觸發器邏輯可以自行添加
    else:
        return {"code": 410, "errorMsg": "event does not come from APIGW"}

    child = subprocess.Popen(video_2rtmp %(ss, video_url, rtmp_url), stdout=subprocess.PIPE, stderr=subprocess.STDOUT, close_fds=True, shell=True)

    while True:
        # 實時進度資訊
        line = child.stdout.readline().decode("utf-8")
        print(line)

        # 提取進度中時間資訊
        time = re.search("time=[0-9]+:[0-5][0-9]:[0-5][0-9].[0-9]+", line)
        if time:
            # 時間格式 time=00:00:00.00 如需要記錄,可以将該資訊寫入持久化存儲
            print(time.group())

        if line.strip() == '' and child.poll() is not None:
            break

    return {
        "isBase64Encoded": False,
        "statusCode": 200,
        "headers": {'Content-Type': 'text/html'},
        "body": ""
    }           

複制

六 注意事項

以上僞直播方案僅提供内容拉取與推送服務,請確定内容已獲得授權并符合内容傳播相關的法律法規。若因版權問題或内容違規,雲直播會停止相關的功能服務并保留追究法律責任的權利。

參考文檔:

1 如何将點播視訊轉為類直播效果

2 雲直播拉流轉推

3 技術解碼 | 僞直播及拉流多平台轉推介紹

4 使用雲函數為 TRTC 輸入線上媒體流

5 雲直播位址生成器