简介
本文档提供关于视频加密的相关 API 概览以及 SDK 示例代码。
API | 操作描述 |
提交一个视频加密转码任务。 |
生成视频加密转码任务
方法原型
func (s *CIService) CreateJob(ctx context.Context, opt *CreateJobsOptions) (*CreateJobsResult, *Response, error)
参数说明
请求示例
// 将 examplebucket-1250000000 和 COS_REGION 修改为真实的信息bu, _ := url.Parse("https://examplebucket-1250000000.cos.COS_REGION.myqcloud.com")cu, _ := url.Parse("https://examplebucket-1250000000.ci.COS_REGION.myqcloud.com")b := &cos.BaseURL{BucketURL: bu, CIURL: cu}c := cos.NewClient(b, &http.Client{Transport: &cos.AuthorizationTransport{SecretID: os.Getenv("SECRETID"),SecretKey: os.Getenv("SECRETKEY"),},})createJobOpt := &cos.CreateJobsOptions{Tag: "Transcode",Input: &cos.JobInput{Object: "input/test.mp4",},Operation: &cos.MediaProcessJobOperation{Output: &cos.JobOutput{Region: "ap-chongqing",Object: "output/test",Bucket: "test-1234567890",},Transcode: &cos.Transcode{Container: &cos.Container{Format: "hls",},Video: &cos.Video{Codec: "H.264",},Audio: &cos.Audio{Codec: "AAC",},TimeInterval: &cos.TimeInterval{Start: "10",Duration: "",},TransConfig: &cos.TransConfig{HlsEncrypt: &cos.HlsEncrypt{IsHlsEncrypt: true,},},},UserData: "hello world",},}createJobRes, _, err := c.CI.CreateJob(context.Background(), createJobOpt)log_status(err)fmt.Printf("%+v\\n", createJobRes.JobsDetail)
获取加密视频播放地址
type URLToken struct {SessionToken string `url:"x-cos-security-token,omitempty" header:"-"`}type JwtTokens struct {// base infoType string `json:"Type"`AppId string `json:"AppId"`BucketId string `json:"BucketId"`Object string `json:"Object"`Issuer string `json:"Issuer"`// time infoIssuedTimeStamp int64 `json:"IssuedTimeStamp"`ExpireTimeStamp int64 `json:"ExpireTimeStamp"`// other infoRandom int64 `json:"Random"`// times infoUsageLimit int `json:"UsageLimit"`// secret infoProtectSchema string `json:"ProtectSchema"`PublicKey string `json:"PublicKey"`ProtectContentKey int `json:"ProtectContentKey"`}func (token JwtTokens) Valid() error {return nil}// 生成jwtfunc GenerateToken(appId string, bucketId string, objectKey string, secret []byte) (string, error) {t := time.Now()now := t.Unix()payLoad := JwtTokens{// 固定为 CosCiToken, 必填参数Type: "CosCiToken",// app id,必填参数AppId: appId,// 播放文件所在的BucketId, 必填参数BucketId: bucketId,// 播放文件名Object: url.QueryEscape(objectKey),// 固定为client,必填参数Issuer: "client",// token颁发时间戳,必填参数IssuedTimeStamp: now,// token过期时间戳,非必填参数,默认1天过期ExpireTimeStamp: t.Add(time.Hour * 24 * 6).Unix(),// token使用次数限制,非必填参数,默认限制100次UsageLimit: 20,// 保护模式,填写为 rsa1024 ,则表示使用 RSA 非对称加密的方式保护,公私钥对长度为 1024 bitProtectSchema: "rsa1024",// 公钥。1024 bit 的 RSA 公钥,需使用 Base64 进行编码PublicKey: "xxx",// 是否加密解密密钥(播放时解密ts视频流的密钥),1表示对解密密钥加密,0表示不对解密密钥加密。ProtectContentKey: 0,}//使用指定的签名方法创建签名对象token := jwt.NewWithClaims(jwt.SigningMethodHS256, payLoad)//使用指定的secret签名并获得完成的编码后的字符串tokenreturn token.SignedString(secret)}// COS环境func GetCOSDomainVideoEncryptionURL(tak string, tsk string, token *URLToken, bucketId string, region string, objectKey string, jwtToken string) string {u, _ := url.Parse("https://" + bucketId + ".cos." + region + ".myqcloud.com")b := &cos.BaseURL{BucketURL: u}c := cos.NewClient(b, &http.Client{Transport: &cos.AuthorizationTransport{SecretID: tak,SecretKey: tsk,SessionToken: token.SessionToken,},})ctx := context.Background()// 获取预签名presignedURL, err := c.Object.GetPresignedURL3(ctx, http.MethodGet, objectKey, time.Hour, token)if err != nil {fmt.Printf("Error: %v\\n", err)return ""}resultUrl := presignedURL.String() + "&ci-process=pm3u8&expires=43200&&tokenType=JwtToken&token=" + jwtTokenreturn resultUrl}// CDN域名func GetCDNDomainVideoEncryptionURL(cdn string, objectKey string, jwtToken string) string {url := cdn + "/" + objectKeyresultUrl := url + "?ci-process=pm3u8&signType=no&expires=43200&&tokenType=JwtToken&token=" + jwtTokenreturn resultUrl}func main() {// 替换成您的密钥tak := os.Getenv("COS_SECRETID")tsk := os.Getenv("COS_SECRETKEY")token := &URLToken{SessionToken: "",}// 替换成您的桶名称appId := "1250000000"// 替换成您的桶名称bucketId := "test-1250000000"// 替换成您桶所在的regionregion := "ap-chongqing"// 替换成您需要播放的视频名称objectKey := "live/a.m3u8"// 替换为自己cdn域名cdn := "http://abc.cdn.com"// 替换为自己播放密钥,控制台可以查询var playkey = []byte("aaaaaaaaaaa")// 生成tokenjwtToken, _ := GenerateToken(appId, bucketId, objectKey, playkey)playUrl = GetCOSDomainVideoEncryptionURL(tak, tsk, token, bucketId, region, objectKey, jwtToken)fmt.Println(playUrl)playUrl = GetCDNDomainVideoEncryptionURL(cdn, objectKey, jwtToken)fmt.Println(playUrl)}
播放地址使用
SDK 代码完整示例