行业知识
C# 实现腾讯云点播之媒体管理常用接口
目录
关于腾讯云点播媒体管理
开发前准备
范例运行环境
常用媒体管理API
删除媒体
禁播媒体
获取媒体详细信息
查询媒体
小结
关于腾讯云点播媒体管理
腾讯云点播(Video On Demand)服务基于多年技术积累与基础设施建设,为有音视频应用相关需求的客户提供包括音视频存储管理、音视频转码处理、音视频加速播放、音视频加密、音视频AI能力的一站式解决方案,可通过云平台进行上传后的媒资管理。
目前云点播服务使用的是 API 3.0 版本,要使用腾讯云点播 API,需要先执行以下步骤:
- 在腾讯云 云点播控制台 开通腾讯云点播(VOD)服务。
- 在访问管理控制台中的 云 API 密钥 页面里获取 appid、secretid、secretkey 内容。
- 调用 API 执行操作。
本文将主要介绍如何使用云点播服务之媒体管理相关的常用接口实现。
开发前准备
(1)调用 API 之前,需要生成 HMAC-SHA1加密返回签名,请参考如下代码:
/// HMAC-SHA1加密返回签名密钥源文public static string GetHmacSha1Sign(string secret, string strOrgData){ var hmacsha1 = new HMACSHA1(Encoding.UTF8.GetBytes(secret)); var dataBuffer = Encoding.UTF8.GetBytes(strOrgData); var hashBytes = hmacsha1.ComputeHash(dataBuffer); return Convert.ToBase64String(hashBytes);} (2)secretId 及 secretKey 的获取在后续范例中均封装为 TCAcount 类,创建及访问示例如下:
TCAcount tca = new TCAcount();//应用IDstring secretId = tca.secretId;//应用keystring secretKey = tca.secretKey;
(3) 用到两个时间戳函数,代码如下:
public string getTimestamp(int seconds){ TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0); return Convert.ToInt64(ts.TotalSeconds + seconds).ToString();}public string GetTimeStamp(DateTime dtime){ TimeSpan tspan = dtime.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, 0); return Convert.ToInt64(tspan.TotalSeconds).ToString();} (4) SendRequest 方法实现访问 API URL 地址并 POST 数据,以获取返回结果 Json 的功能,参考代码如下:
public static string SendRequest(string url, string completeUrl){ ServicePointManager.SecurityProtocol = (SecurityProtocolType)192 | (SecurityProtocolType)768 | (SecurityProtocolType)3072; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.ProtocolVersion = HttpVersion.Version10; request.Host = url.Replace("https://", "").Replace("/", ""); byte[] data = Encoding.UTF8.GetBytes(completeUrl); request.ContentLength = data.Length; Stream newStream = request.GetRequestStream(); newStream.Write(data, 0, data.Length); newStream.Close(); HttpWebResponse response = null; string content; try { response = (HttpWebResponse)request.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8); content = reader.ReadToEnd(); } catch (WebException e) { response = (HttpWebResponse)e.Response; using (Stream errData = response.GetResponseStream()) { using (StreamReader reader = new StreamReader(errData)) { content = reader.ReadToEnd(); } } } return content;} (5) 需要引用 Newtonsoft.Json.dll 动态链接库。
范例运行环境
操作系统: Windows Server 2019 DataCenter
.net版本: .netFramework4.0 或以上
开发工具:VS2019 C#
常用媒体管理API
删除媒体
DeleteMedia 方法用于删除媒体及其对应的视频处理文件(原始文件、如转码视频、雪碧图、截图、微信发布视频等),可单独删除指定 ID 的视频文件下的原文件、转码视频、微信发布视频等(注意:原文件删除后,无法发起转码、微信发布等任何视频处理操作),方法返回字符串,为空则表示成功,否则返回 “Error”,其关键属性方法说明如下:
| 序号 | 参数 | 类型 | 说明 |
|---|---|---|---|
| 1 | FileId | string | 媒体文件的唯一标识。如:7447398156998994860 |
实现代码如下:
public string DeleteMedia(string FileId){ ArrayList data = new ArrayList(); TCAcount tca = new TCAcount(""); //请求地址 string settingUrl = "https://vod.tencentcloudapi.com/"; //应用ID string secretId = tca.secretId; //应用key string secretKey = tca.secretKey; //时间戳 string timesTamp = GetTimeStamp(); //Nonce var nonce = new Random().Next(10000, 99999); //拼接参数 string paramsStr = string.Format(@"Action=DeleteMedia&FileId={3}&Nonce={0}&Region=ap-guangzhou&SecretId={1}&SignatureMethod=HmacSHA1&Timestamp={2}&Version=2018-07-17", nonce, secretId, timesTamp, FileId); //生成签名参数 string requestText = "POST" + settingUrl.Replace("https://", "") + "?" + paramsStr; //获得请求签名 string signText = GetHmacSha1Sign(secretKey, requestText); //这里一定要进行URL编码,不然调用API会报错 signText = HttpUtility.UrlEncode(signText, Encoding.UTF8); string text = HttpUtility.UrlEncode(FileId, Encoding.UTF8); paramsStr = string.Format(@"Action=DeleteMedia&FileId={4}&Nonce={0}&Region=ap-guangzhou&SecretId={1}&Signature={2}&SignatureMethod=HmacSHA1&Timestamp={3}&Version=2018-07-17", nonce, secretId, signText, timesTamp, text); string resultStr = SendRequest(settingUrl, paramsStr); if (resultStr.IndexOf("Error") != -1) { return "Error"; } return "";} //delete media 禁播媒体
ForbidMediaDistribution 方法对媒体禁播,除了点播控制台可以预览,其他场景访问视频各种资源的 URL(原始文件、转码输出文件、截图等)均会返回 403,禁播/解禁操作全网生效时间约 5~10 分钟,该方法返回 ArrayList,列表返回的是不成功或不存在的fileid,如果为0则表示禁播都已成功,其关键属性方法说明如下:
| 序号 | 参数 | 类型 | 说明 |
|---|---|---|---|
| 1 | FileIds | string | 要提交的禁播或恢复播放的 FileId 列表,每次最多可提交 20 个,以逗号进行分隔 示例值:"7447398156998994860,7447398156998994861" |
| 2 | Stop | bool | 为 true 则表示禁播,为 false 则表示恢复播放 |
实现代码如下:
//禁播媒体,列表以逗号分隔,stop为true,则禁播,反之恢复,该操作可能有5到10分钟延迟,列表返回的是不成功或不存在的fileid,如果为0则都成功public ArrayList ForbidMediaDistribution(string FileIds,bool Stop){ ArrayList data = new ArrayList(); string Operation = Stop == true ? "forbid" : "recover"; if (FileIds == "") { return data; } string[] fs = FileIds.Split(','); string paras = ""; for (int p = 0; p 获取媒体详细信息
DescribeMediaInfos 方法可以获取多个媒体文件的多种信息,每一个媒体文件表示一个MediaFile 类,该类的说明和实现代码如下:
public class MediaFile{ public string FileId = ""; //FileID public string MediaUrl = ""; //媒体播放URL public string Name = ""; //媒体名称 public string Type = ""; //媒体分类 public string CreateTime = ""; //媒体创建时间 public string ExpireTime = ""; //媒体有效时间 public string Vid = ""; //媒体Vid public string Size=""; //媒体文件尺寸 public string Duration=""; //媒体时间 public string Bitrate=""; //媒体比特率 public string Height=""; //媒体高像素 public string Width=""; //媒体宽像素 public string Rotate = ""; //媒体旋转角度 public MediaFile() { }} DescribeMediaInfos方法的关键属性方法说明如下:
| 序号 | 参数 | 类型 | 说明 |
|---|---|---|---|
| 1 | FileIds | string | 要获以详情的 FileId 列表,每次最多可提交 20 个,以逗号进行分隔 示例值:"7447398156998994860,7447398156998994861" |
实现代码如下:
public ArrayList DescribeMediaInfos(string FileIds){ ArrayList data = new ArrayList(); if (FileIds == "") { return data; } string[] fs=FileIds.Split(','); string paras = ""; for(int p=0;p
上一篇:Docker 中的挂载机制