边转边播

最近更新时间:2025-06-03 17:07:26

我的收藏

功能简介

边转边播是和普通音视频转码不同的即时处理同步转码功能。用户将视频上传至对象存储 COS 后,通过边转边播功能即可实现在不同终端和网络环境下实时播放转码后的视频。相比于普通转码,边转边播具有以下几点优势:
无需预先转码,可针对需要播放的视频进行按需转码,边转码边播放,播放无需等待。
可提前预转视频的前几秒,播放时无需等待,秒级开播跳播,接近本地的播放体验。
不播放的视频可不转码,显著节省转码和存储成本。
几乎等同于普通转码的配置参数支持,高度自定义。

功能架构

边转边播支持以下两种方式进行使用:
播放列表形式:对 COS 中的视频生成一份 m3u8播放列表,使用 m3u8终端播放器获取该播放列表,触发实时转码并进行视频播放。
URL 参数形式:在访问 COS 视频链接时,在链接后添加边转边播参数进行实时边转边播。
说明:
如需使用边转边播,可 提交工单 开通白名单。
生成播放列表不产生处理费用,视频播放触发转码时按照音视频转码标准计费,详情请参见 音视频转码费用
边转边播不支持匿名播放。

播放列表形式

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

说明:
生成播放列表不产生处理费用,视频播放触发转码时按照音视频转码标准计费,详情请参见 音视频转码费用

URL 参数形式

URL 参数形式的边转边播也会生成一份 m3u8 播放列表,但与上面的播放列表形式相比,URL 参数形式无需用户主动生成播放列表,用户在访问视频链接时,可在视频链接后添加边转边播参数,后台将自动实时生成一份播放列表文件,手机、平板或电视等终端设备的播放器,在读取带边转边播参数的视频链接时,后台将自动重定向该链接到播放列表文件,触发实时转码,从 COS 拉取视频文件(转码后的 ts 分片)播放视频。


适用场景

网盘视频播放

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

社交 IM 软件视频预览

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

在线教育

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

功能特性

标准化

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

低成本

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

高效率

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

前提条件

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

使用方法

以播放列表形式为例,可参考以下步骤进行边转边播:

步骤一:生成播放列表

通过 生成播放列表 API 接口生成播放列表。

请求示例

func InvokeGeneratePlayListJob() {
// 函数内替换为自己桶
c := getClient("https://test-1234567890.cos.ap-chongqing.myqcloud.com", "https://test-1234567890.ci.ap-chongqing.myqcloud.com")
createJobOpt := &cos.CreateGeneratePlayListJobOptions{
Tag: "GeneratePlayList",
Input: &cos.JobInput{
Object: "a.mp4",
// Vod: &cos.VodInfo{
// FileId: "243791581857019308",
// },
},
Operation: &cos.GeneratePlayListJobOperation{
Output: &cos.JobOutput{
Region: "ap-chongqing",
Bucket: "test-1250000000",
Object: "live/a.m3u8",
},
Transcode: &cos.LiveTanscode{
Video: &cos.LiveTanscodeVideo{
Codec: "H.264",
Width: "960", // 设置480、720、960、1080
Crf: "23",
},
Container: &cos.Container{
Format: "hls",
ClipConfig: &cos.ClipConfig{
Duration: "5",
},
},
TransConfig: &cos.LiveTanscodeTransConfig{
HlsEncrypt: &cos.HlsEncrypt{
IsHlsEncrypt: false, //true
},
InitialClipNum: "2",
CosTag: "a=a&b=b",
},
},
},
}
createJobRes, _, err := c.CI.CreateGeneratePlayListJob(context.Background(), cr
log_status(err)
fmt.Printf("%+v\\n", createJobRes.JobsDetail)
}

步骤二:对播放列表中的视频信息进行签名授权,获取带签名的播放列表

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)
}

步骤3:播放视频

经过步骤2添加加密鉴权信息后,可使用 HLS 播放器进行视频的播放,播放视频时会实时对视频进行转码,可以直接粘贴步骤2的结果链接粘贴到支持 HLS 的播放器中播放。您也可以参见 HLS 视频加密播放实践