前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >腾讯云伪直播方案介绍

腾讯云伪直播方案介绍

原创
作者头像
fankhu
修改2021-07-12 09:22:27
11.9K0
修改2021-07-12 09:22:27
举报
文章被收录于专栏:云原生技术方案

随着云原生、直播技术的不断发展,线上授课、重大赛事、网剧轮播等直播场景不断丰富,很多直播平台已经在以上场景都支持了伪直播功能,本文对腾讯云现有的各种伪直播方案进行梳理,并针对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:计算防盗链签名

二 云直播拉流转推方案

腾讯云直播控制台提供拉流转推工具,若您直播源无推流能力或点播视频内容需通过直播形式分发,拉流转推服务提供内容拉取并推送的功能,无需进行直播推流,即可快速拉取已有的视频/直播,推送到目标地址上。

注意事项

  • 最多支持创建20个拉流转推任务,如果需要提高限制需要提工单申请。
  • 使用拉流转推服务会产生拉流转推任务时长账单,详细费用请参见 拉流转推计费说明

三 导播台SAAS

云导播台集成轮播功能,提供丰富的直播编辑能力。

云导播台

四 serverless+TRTC

当用户业务场景需要支持超低延迟观看,并且同时支持主播及观众连麦互动场景,serverless云函数提供开箱即用、灵活便捷、可编程的在线媒体流输入能力,支持将已有的录播视频或者 RTMP 直播流推送到实时音视频 TRTC 房间进行直播

使用云函数为 TRTC 输入在线媒体流

五 serverless+云直播

以上四种方案在腾讯云官网已经有较为详细的文档,接下来以serverless+快直播webrtc为例,介绍云函数+快直播实现伪直播的示例

serverless+云直播的的方式与上文TRTC的方式类似,只是将TRTC替换为云直播:

实现步骤:

5.1 创建云函数

  1. 登录云函数控制台,选择左侧导航栏中的【函数服务】。
  2. 在“函数服务”页面上方选择地域,并单击【新建】进入新建函数页面,模糊搜索"rtmp",选择“视频文件转RTMP模板”进入下一步。如下图所示:
可使用模板函数修改业务逻辑
可使用模板函数修改业务逻辑

5.2 准备直播推流及播放地址

参考 云直播地址生成器

注意UDP格式地址即为快直播地址
注意UDP格式地址即为快直播地址

5.3 测试函数功能

1 使用 Postman 构造 HTTP 请求,传入点播文件地址和直播rtmp推流地址,其中文件地址为对象存储文件地址,快直播和普通直播的推流地址为同一个

2 请求发送后会收到异步函数响应 “Async run task submitted”

3 在“函数详情”页面中选择【日志查询】页签,查看函数执行状态

4 使用播放器观看快直播或标准直播地址

快直播需要用webrtc播放,参考: 腾讯云webrtc播放器demo

webtrc player
webtrc player

5 在云直播控制台流数据查看播放统计数据

流数据查询
流数据查询

6 模板代码示例

代码语言:javascript
复制
# -*- 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 云直播地址生成器

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 腾讯云现有方案概览
  • 一 点播伪直播方案介绍
    • 实现步骤:
      • 步骤1:上传视频到云点播
        • 步骤2:将视频转码为 HLS
          • 步骤3:开启 Key 防盗链
            • 步骤4:计算防盗链签名
            • 二 云直播拉流转推方案
              • 注意事项
                • 5.1 创建云函数
                • 5.2 准备直播推流及播放地址
                • 5.3 测试函数功能
            • 三 导播台SAAS
            • 四 serverless+TRTC
            • 五 serverless+云直播
            • 六 注意事项
            相关产品与服务
            云直播
            云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档