边转边播

最近更新时间:2024-06-25 17:11:51

我的收藏

产品简介

边转边播是和预转码不同的即时处理同步转码功能。用户将视频上传至对象存储 COS 后,通过边转边播功能即可实现在不同终端和网络环境下播放视频。同时,用户也无需将视频进行提前转码,边转边播功能会在视频被第一次播放时按需转码视频分片。使用边转边播功能可以帮您节约较大的存储和转码成本,同时由于按需转码,您可以在原视频文件上传完成后立即播放,从而获得很好的播放体验。



功能架构

用户将视频文件上传至腾讯云对象存储(COS)后,可指定转码参数生成一个媒体播放列表(m3u8)。手机、平板或电视等终端设备的播放器,获取到该播放列表后,即可触发实时转码,从 COS 拉取视频文件(ts分片)播放视频。在播放过程中,系统可以适配网络环境和设备要求,触发不同码率的视频转码任务,以确保流畅的观看体验。



说明:
如需使用边转边播,可 提交工单 开通白名单。
生成播放列表不产生处理费用,视频播放触发转码时按照音视频转码标准计费,详情见 音视频转码费用



适用场景

网盘视频播放

网盘中大部分视频都是冷视频,用户上传视频到网盘后,各种网盘客户端立即能根据客户播放频率与网络情况选择不同的分辨率进行播放。既保证了播放的实时性,又能确保视频在不同设备上的兼容性,同时大幅降低存储成本。

社交 IM 软件视频预览

在即时通讯或社交媒体平台中,发送方把视频发送完毕(发送到服务端存储完成),接收方立刻可以开始播放视频,提高交流的实时性。历史聊天记录中长期不被观看的视频,转码生成的视频文件可以定期清理,再次播放时可立刻播放。

在线教育

网课播放时,使用边转边播可以在分发时可以满足不同终端观众播放流畅度与高清化诉求,无需要预先对录制文件二次转码为标清、高清、超高清等多个分辨率,大幅降低下行流量和预处理成本。



功能特性

标准化

支持标准HLS协议、支持和预转码保持一致添加字幕、水印、加密视频。

低成本

对视频按需分片转码,只有在播放时才会进行转码;使用COS生命周期对转码生成的视频文件定期回收或对冷视频删除,以减少存储成本;预处理方案为了保证客户的观看效果,全量视频都转码存储导致业务成本巨大,边转边播只需存储一份原始视频。

高效率

0等待时间,无需等待转码完成,生成播放列表后即可播放;智能预转设置,提升开播体验。



前提条件

已开通 COS 服务、创建存储桶并上传文件到存储桶。具体操作请参见 存储桶文件
已开通数据万象服务并绑定存储桶。具体操作请参见 存储桶绑定



使用方法

步骤一:生成播放列表

说明:
本步骤参考 生成播放列表 API 文档。

请求示例

2 func InvokeGeneratePlayListJob() {
3 // 函数内替换为自己桶
4 c := getClient("https://test-1234567890.cos.ap-chongqing.myqcloud.com", "https://test-1234567890.ci.ap-chongqing.myqcloud.com")
5 createJobOpt := &cos.CreateGeneratePlayListJobOptions{
6 Tag: "GeneratePlayList",
7 Input: &cos.JobInput{
8 Object: "a.mp4",
9 // Vod: &cos.VodInfo{
10 // FileId: "243791581857019308",
11 // },
12 },
13 Operation: &cos.GeneratePlayListJobOperation{
14 Output: &cos.JobOutput{
15 Region: "ap-chongqing",
16 Bucket: "test-1250000000",
17 Object: "live/a.m3u8",
18 },
19 Transcode: &cos.LiveTanscode{
20 Video: &cos.LiveTanscodeVideo{
21 Codec: "H.264",
22 Width: "960", // 设置480、720、960、1080
23 Crf: "23",
24 },
25 Container: &cos.Container{
26 Format: "hls",
27 ClipConfig: &cos.ClipConfig{
28 Duration: "5",
29 },
30 },
31 TransConfig: &cos.LiveTanscodeTransConfig{
32 HlsEncrypt: &cos.HlsEncrypt{
33 IsHlsEncrypt: false, //true
34 },
35 InitialClipNum: "2",
36 CosTag: "a=a&b=b",
37 },
38 },
39 },
40 }
41 createJobRes, _, err := c.CI.CreateGeneratePlayListJob(context.Background(), cr
42 log_status(err)
43 fmt.Printf("%+v\\n", createJobRes.JobsDetail)
44 }

步骤二:获取签名后的播放列表

1、查看播放密钥

2. 在左侧导航栏中,单击存储桶列表,进入存储桶列表管理页面。
3. 找到需要操作的存储桶,单击该存储桶名称,进入该存储桶管理页面。
4. 在左侧导航栏中,单击 数据处理 > 媒体处理,进入媒体处理管理页面。




2、对播放链接进行签名

请求示例
func main() {
InvokeGeneratePlayListJob()
// 替换成您的密钥
tak := os.Getenv("COS_SECRETID")
tsk := os.Getenv("COS_SECRETKEY")
token := &URLToken{
SessionToken: "",
}
// 替换成您的桶名称
appId := "1250000000"
// 替换成您的桶名称
bucketId := "test-1250000000"
// 替换成您桶所在的region
region := "ap-chongqing"
// 替换成您需要播放的视频名称
objectKey := "live/a.m3u8"

GetCOSDomainURL(tak, tsk, token, appId, bucketId, region, objectKey)
// 替换为自己cdn域名
cdn := "http://abc.cdn.com"
GetCDNDomainURL(cdn, objectKey)
// 替换为自己播放密钥,控制台可以查询
// var playkey = []byte("aaaaaaaaaaa")
// 生成token
// jwtToken, _ := GenerateToken(appId, bucketId, objectKey, playkey)
// GetCOSDomainVideoEncryptionURL(tak, tsk, token, bucketId, region, objectKey, jwtToken)
// GetCDNDomainURL(cdn, objectKey, jwtToken)
}

步骤三:播放视频

播放视频同时会对视频进行探测触发实时转码,可以直接粘贴步骤二的结果链接粘贴到支持 HLS 的播放器中播放。