腾讯云智能创作伪直播(点播转直播)_音视频解决方案_同尘科技

智能创作 2年前 (2023-07-24) 浏览 52

功能概述

伪直播(点播转直播)是将点播视频通过云转推功能转化为直播流,并将其分发到不同的直播平台,支持多个点播视频循环播放、单次播放等功能。可应用于在线教育、活动直播、电竞赛事等将录播视频转为直播的场景。整个方案的简要技术架构为:

实现步骤概要

使用云转推实现伪直播(点播转直播)功能,只需要按如下几步操作即可完成:

步骤1:准备工作

开通云点播

请参考 云点播 – 快速入门 – 步骤1 开通云点播服务。

创建智能创作平台

请参考 智能创作 – 控制台指南 – 创建平台 创建平台。

获取 API 密钥

请求云 API 需要使用到开发者的 API 密钥(即 SecretId 和 SecretKey)。如果还未创建过密钥,请参见 创建密钥文档 生成新的 API 密钥。说明 如果已创建过密钥,请参见 查看密钥文档 获取 API 密钥。

准备点播视频源

请自行准备点播视频源。为方便测试,这里准备了三个测试视频,可直接测试使用:测试视频1:http://1810000000.vod2.myqcloud.com/b64e98acvodcq1810000000/c20be6785285890809599844312/f0.mp4测试视频2:http://1810000000.vod2.myqcloud.com/b64e98acvodcq1810000000/f69747475285890810007930755/f0.mp4测试视频3:http://1810000000.vod2.myqcloud.com/b64e98acvodcq1810000000/edeb76835285890810014330867/f0.mp4注意点播输入源必须符合伪直播场景要求,否则会出现转推异常,详情请参见 点播视频源预处理最佳实践 。

准备直播推流及播放域名

请参考 云直播 – 标准直播 – 快速入门 准备直播推流域名及播放域名,如果您已经有直播推流域名及播放域名可忽略。文中后续以如下直播推流和播放域名作为示例:推流域名1:rtmp://push.example.com/cme/live1播放域名1:https://play.example.com/cme/live1.flv推流域名2:rtmp://push.example.com/cme/live2播放域名2:https://play.example.com/cme/live2.flv注意这里推流域名及播放域名仅为示例,不可推流和播放。线上使用时,请换成您系统使用的直播推流域名及播放域名。

步骤2:创建云转推项目

创建云转推项目 API 的接口为 创建项目。为了简化操作,建议您使用 API Export 创建项目。本文中使用的点播视频源以 准备工作-准备点播视频源 准备的视频源为例,可以直接使用该视频测试。这里通过一个接口调用示例说明关键参数设置:

https://cme.tencentcloudapi.com/?Action=CreateProject&Platform=test&Category=STREAM_CONNECT&Name=云转推项目&Owner.Id=user_id_700099304&Owner.Type=PERSON&StreamConnectProjectInput.MainInput.InputType=VodPull&StreamConnectProjectInput.MainInput.VodPullInputInfo.inputUrls.0=http://1810000000.vod2.myqcloud.com/b64e98acvodcq1810000000/c20be6785285890809599844312/f0.mp4&StreamConnectProjectInput.MainInput.VodPullInputInfo.inputUrls.1=http://1810000000.vod2.myqcloud.com/b64e98acvodcq1810000000/f69747475285890810007930755/f0.mp4&StreamConnectProjectInput.MainInput.VodPullInputInfo.inputUrls.2=http://1810000000.vod2.myqcloud.com/b64e98acvodcq1810000000/edeb76835285890810014330867/f0.mp4&StreamConnectProjectInput.Outputs.0.Id=1&StreamConnectProjectInput.Outputs.0.Name=推流1&StreamConnectProjectInput.Outputs.0.Type=URL&StreamConnectProjectInput.Outputs.0.PushUrl=rtmp://push.example.myqcloud.com/cme/live1&StreamConnectProjectInput.Outputs.1.Id=2&StreamConnectProjectInput.Outputs.1.Name=推流2&StreamConnectProjectInput.Outputs.1.Type=URL&StreamConnectProjectInput.Outputs.1.PushUrl=rtmp://push.example.myqcloud.com/cme/live2&

下面基于智能创作的 Java SDK 提供一个简单的示例:

import com.tencentcloudapi.common.Credential;import com.tencentcloudapi.common.profile.ClientProfile;import com.tencentcloudapi.common.profile.HttpProfile;import com.tencentcloudapi.common.exception.TencentCloudSDKException;import com.tencentcloudapi.cme.v20191029.CmeClient;import com.tencentcloudapi.cme.v20191029.models.*;
public class CreateProject{ public static void main(String [] args) { try{ // 需要传入准备工作中获取的 SecretId,SecretKey,此处还需注意密钥对的保密 Credential cred = new Credential("SecretId", "SecretKey"); HttpProfile httpProfile = new HttpProfile(); httpProfile.setEndpoint("cme.tencentcloudapi.com"); ClientProfile clientProfile = new ClientProfile(); clientProfile.setHttpProfile(httpProfile); CmeClient client = new CmeClient(cred, "", clientProfile);
// 以下为关键参数部分 CreateProjectRequest req = new CreateProjectRequest(); // 平台,填写准备工作中创建的平台 req.setPlatform("test"); req.setName("云转推测试");
// 项目归属,目前仅支持归属个人的项目,请参考注意事项部分 Entity entity1 = new Entity(); entity1.setType("PERSON"); entity1.setId("user_id_700099304"); req.setOwner(entity1);
// 项目类型,固定为 STREAM_CONNECT req.setCategory("STREAM_CONNECT"); req.setDescription("云转推测试项目"); StreamConnectProjectInput streamConnectProjectInput1 = new StreamConnectProjectInput(); StreamInputInfo streamInputInfo1 = new StreamInputInfo(); // 视频源类型,固定为 VodPull streamInputInfo1.setInputType("VodPull"); VodPullInputInfo vodPullInputInfo1 = new VodPullInputInfo();
// 点播视频源列表,将按顺序播放 String[] inputUrls1 = { "http://1810000000.vod2.myqcloud.com/b64e98acvodcq1810000000/bec21e445285890810010546287/f0.mp4", "http://1810000000.vod2.myqcloud.com/b64e98acvodcq1810000000/f69747475285890810007930755/f0.mp4", "http://1810000000.vod2.myqcloud.com/b64e98acvodcq1810000000/edeb76835285890810014330867/f0.mp4" }; vodPullInputInfo1.setInputUrls(inputUrls1);
// 循环次数,注意:目前支持播放一次、指定播放次数及无限循环播放。填0为播放一次 vodPullInputInfo1.setLoopTimes(0L); streamInputInfo1.setVodPullInputInfo(vodPullInputInfo1); streamConnectProjectInput1.setMainInput(streamInputInfo1);
// 设置输出 StreamConnectOutput[] streamConnectOutputs1 = new StreamConnectOutput[2]; StreamConnectOutput streamConnectOutput1 = new StreamConnectOutput(); streamConnectOutput1.setId("1"); streamConnectOutput1.setName("转推流1"); streamConnectOutput1.setType("URL"); streamConnectOutput1.setPushUrl("rtmp://push.example.myqcloud.com/cme/live1"); streamConnectOutputs1[0] = streamConnectOutput1;
StreamConnectOutput streamConnectOutput2 = new StreamConnectOutput(); streamConnectOutput2.setId("2"); streamConnectOutput2.setName("转推流2"); streamConnectOutput2.setType("URL"); streamConnectOutput2.setPushUrl("rtmp://push.example.myqcloud.com/cme/live2"); streamConnectOutputs1[1] = streamConnectOutput2;
streamConnectProjectInput1.setOutputs(streamConnectOutputs1); req.setStreamConnectProjectInput(streamConnectProjectInput1);
// 返回的 resp 是一个 CreateProjectResponse 的实例,与请求对象对应 CreateProjectResponse resp = client.CreateProject(req);
// 输出 json 格式的字符串回包,可拿到创建项目返回的项目 Id System.out.println(CreateProjectResponse.toJsonString(resp)); } catch (TencentCloudSDKException e) { System.out.println(e.toString()); } }}

注意关于归属 Owner 参数,请参考文档 账号 部分。本示例没有添加备输入源,添加方式与主输入源一致。添加备输入源是为防止主输入源出现异常时切换到备输入源转推。创建项目成功后,可拿到云转推的项目 ID,后续操作步骤都以项目 ID:cmepid_6107a30cd488c00001b1ab8b 为例。

步骤3:发起转推

发起转推 API 接口为 操作云转推项目。为了简化操作,建议您使用 API Export 发起转推。这里通过一个接口调用示例说明关键参数设置:

https://cme.tencentcloudapi.com/?Action=HandleStreamConnectProject&Platform=test&ProjectId=cmepid_6107a30cd488c00001b1ab8b&Operation=Start&

下面基于智能创作的 Java SDK 提供一个简单的示例:

import com.tencentcloudapi.common.Credential;import com.tencentcloudapi.common.profile.ClientProfile;import com.tencentcloudapi.common.profile.HttpProfile;import com.tencentcloudapi.common.exception.TencentCloudSDKException;import com.tencentcloudapi.cme.v20191029.CmeClient;import com.tencentcloudapi.cme.v20191029.models.*;
public class HandleStreamConnectProject{ public static void main(String [] args) { try{ // 需要传入准备工作中获取的 SecretId,SecretKey,此处还需注意密钥对的保密 Credential cred = new Credential("SecretId", "SecretKey"); HttpProfile httpProfile = new HttpProfile(); httpProfile.setEndpoint("cme.tencentcloudapi.com"); ClientProfile clientProfile = new ClientProfile(); clientProfile.setHttpProfile(httpProfile); CmeClient client = new CmeClient(cred, "", clientProfile);
// 以下为关键参数 HandleStreamConnectProjectRequest req = new HandleStreamConnectProjectRequest();
// 平台,填写准备工作中创建的平台 req.setPlatform("test"); // 项目 Id,填步骤2 创建项目时返回的项目 Id req.setProjectId("cmepid_6107a30cd488c00001b1ab8b"); // 操作参数,固定为 "Start" req.setOperation("Start");
// 返回的 resp 是一个 HandleStreamConnectProjectResponse 的实例,与请求对象对应 HandleStreamConnectProjectResponse resp = client.HandleStreamConnectProject(req);
// 输出 json 格式的字符串回包 System.out.println(HandleStreamConnectProjectResponse.toJsonString(resp)); } catch (TencentCloudSDKException e) { System.out.println(e.toString()); } }}

步骤4:观看直播

发起转推完成后,可以使用 VLC 等播放器观看直播(测试播放域名为:https://play.example.myqcloud.com/cme/live1.flv 或者 https://play.example.myqcloud.com/cme/live2.flv),将可看到直播画面。

步骤5:停止转推

停止转推接口为 操作云转推项目。为了简化操作,建议您使用 API Export 停止转推。这里通过一个接口调用示例说明关键参数设置:

https://cme.tencentcloudapi.com/?Action=HandleStreamConnectProject&Platform=test&ProjectId=cmepid_6107a30cd488c00001b1ab8b&Operation=Stop&

下面基于智能创作的 Java SDK 提供一个简单的示例:

import com.tencentcloudapi.common.Credential;import com.tencentcloudapi.common.profile.ClientProfile;import com.tencentcloudapi.common.profile.HttpProfile;import com.tencentcloudapi.common.exception.TencentCloudSDKException;import com.tencentcloudapi.cme.v20191029.CmeClient;import com.tencentcloudapi.cme.v20191029.models.*;
public class HandleStreamConnectProject{ public static void main(String [] args) { try{ // 需要传入准备工作中获取的 SecretId,SecretKey,此处还需注意密钥对的保密 Credential cred = new Credential("SecretId", "SecretKey"); HttpProfile httpProfile = new HttpProfile(); httpProfile.setEndpoint("cme.tencentcloudapi.com"); ClientProfile clientProfile = new ClientProfile(); clientProfile.setHttpProfile(httpProfile); CmeClient client = new CmeClient(cred, "", clientProfile);

// 以下为关键参数 HandleStreamConnectProjectRequest req = new HandleStreamConnectProjectRequest(); // 平台,填写准备工作中创建的平台 req.setPlatform("test"); // 项目 Id,填步骤2 创建项目时返回的项目 Id req.setProjectId("cmepid_6107a30cd488c00001b1ab8b"); // 操作参数,固定为 "Stop" req.setOperation("Stop");
// 返回的 resp 是一个 HandleStreamConnectProjectResponse 的实例,与请求对象对应 HandleStreamConnectProjectResponse resp = client.HandleStreamConnectProject(req);
// 输出 json 格式的字符串回包 System.out.println(HandleStreamConnectProjectResponse.toJsonString(resp)); } catch (TencentCloudSDKException e) { System.out.println(e.toString()); } }}

点播视频源预处理最佳实践

实际推流过程中,如果点播输入源质量不可控,会造成转推后直播画面异常(花屏、倍速播放、卡顿等),常见的异常有:码率过高(超过 4M),转推为直播流后,播放端可能因为网络带宽不够而出现播放卡顿。输入源文件不在腾讯云点播存储,转推时无法走内网拉流,因外网异常出现拉流失败或者卡顿。视频源封装格式异常(目前仅支持音频编码格式:LC-AAC, 视频编码格式:H264/HEVC),造成转推画面倍速播放、卡顿。输入源为多个点播视频源时,帧率和分辨率均不同,转推成直播流时,会造成直播画面花屏。视频源为 FLV 封装格式,文件大于 2G,或者视频源为 hls 封装格式但 TS 分片数大于3000,可能会影响转推,造成转推后直播画面卡顿。视频源音/视频 DTS 时间戳非顺序递增,出现回退或跳跃,会造成转推后直播画面卡顿。为解决上述问题,需要将源视频上传到腾讯云点播走内网拉流,同时对源视频进行转码(也称之为“清洗”)。下面以使用云点播控制台及使用云点播 API 上传视频并清洗为例说明简要操作步骤。

使用点播控制台上传并清洗源视频

步骤1:上传视频

将点播视频源上传腾讯云点播,转推时可以走内网拉流,避免拉流时网络抖动等影响。可参考 云点播 – 快速入门 – 步骤2 上传一个测试视频,单击 此处 查看本测试视频,如下图所示:
说明建议使用较短的视频文件进行测试(例如时长为几十秒的视频),避免转码过程耗时太长。

步骤2:发起视频清洗

1. 在云点播控制台 视频管理 页面勾选新上传的测试视频,然后单击视频处理 :
2. 在弹框中,处理类型选择转码,然后单击转码模板 :
3. 选择所需的转码模板,目前系统已经预置好了视频源清洗转码模板 VodToLiveAdaptiveTranscode(模板 ID 80000),然后单击确定。
4. 单击确定,发起转码:
5. 在任务管理的列表中可见当前转码任务的状态为“处理中”,表示视频正在转码:


步骤3:查看转码结果

1. 进入控制台 任务管理,等待列表中的测试视频状态变为“正常”(表示转码已完成)。单击测试视频右侧的管理,进入任务详情页面:
2. 在基本信息标签页下的标准转码列表 中,转出了 VodToLiveAdaptiveTranscode 规格的视频。可以单击复制地址复制转码视频的 URL,然后作为云转推的点播输入源 URL。

调用云 API 上传并清洗源视频

实际使用过程中,需要调用腾讯云点播 API 来进行点播视频上传及清洗,下面简要介绍操作步骤。1. 视频上传到云点播:
将点播视频上传到腾讯云点播,转推时可以走内网拉流,避免拉流时网络抖动影响。腾讯云点播提供了多种方式将视频上传到云点播,请参见 云点播-最佳实践-媒体上传 。2. 点播视频进行转码清洗:
为保证转推输入点播视频源符合要求,建议使用云点播的转码功能进行视频清洗,然后使用转码后的视频源进行转推。点播侧提供了完整的转码方案,具体接入方法请参见 云点播-最佳实践-如何对视频进行转码 。关于转码模板参数配置问题,目前系统已经配置好了转码模板 ID:80000,请直接使用。该转码模板配置如下:

配置项 配置内容
封装格式 MP4
视频编码格式 H264
宽高 同源
帧率 同源(但最低不低于 25fps,不高于 60fps)
音频编码格式 AAC
声道数 2
音频采样率 44100Hz
音视频码率 根据目标宽高自适应,但最大不高于9M

注意因 UGC 生产的视频源质量不可控,强烈建议按上述方案将视频上传到腾讯云点播并发起清洗。为简化接口调用,云点播侧可以在上传视频后,指定视频处理任务流进行转码清洗。具体实现方案请参见 上传视频后自动转码 ,云点播侧已配置好了一个任务流 VodToLivePreProcessProcedure,请直接使用。

对音视频的解决方案有疑惑?想了解解决方案收费? 联系解决方案专家

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心,购买腾讯云享受折上折,更有现金返利:同意关联,立享优惠

阿里云解决方案也看看?: 点击对比阿里云的解决方案

- 0人点赞 -

发表点评 (0条)

not found

暂无评论,你要说点什么吗?