C# 实现腾讯云点播之媒体上传常用接口

 

目录

关于腾讯云点播媒体管理

开发前准备

范例运行环境

常用上传API

申请上传

确认上传

拉取上传

小结


关于腾讯云点播媒体管理

腾讯云点播(Video On Demand)服务基于多年技术积累与基础设施建设,为有音视频应用相关需求的客户提供包括音视频存储管理、音视频转码处理、音视频加速播放、音视频加密、音视频AI能力的一站式解决方案,可通过云平台进行上传后的媒资管理。

目前云点播服务使用的是 API 3.0 版本,要使用腾讯云点播 API,需要先执行以下步骤:

  1. 在腾讯云 云点播控制台 开通腾讯云点播(VOD)服务。
  2. 在访问管理控制台中的 云 API 密钥 页面里获取 appid、secretid、secretkey 内容。
  3. 调用 API 执行操作。

本文将主要介绍如何使用云点播服务之媒体上传的常用接口实现。

开发前准备

(1)调用 API 之前,需要生成 HMAC-SHA1加密返回签名,请参考如下代码:

/// HMAC-SHA1加密返回签名
<param name="secret">密钥</param>
<param name="strOrgData">源文</param>
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();
//应用ID
string secretId = tca.secretId;
//应用key
string 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

申请上传

ApplyUpload 方法用于申请媒体文件的上传,获取文件上传到云点播的元信息(包括上传路径、上传签名等),用于后续上传接口。其关键属性方法说明如下:

序号参数类型说明
1MediaTypestring

媒体格式,包括:

视频:WMV、RM、MOV、MPEG、MP4、3GP、FLV、AVI、RMVB、TS、ASF、MPG、WEBM、MKV 、M3U8、WM、ASX、RAM、MPE、VOB、DAT、MP4V、M4V、F4V、MXF、QT、OGG。

音频:MP3、M4A、FLAC、OGG、WAV、RA、AAC、AMR。

2MediaNamestring媒体名称,如 test.mp4

实现代码如下:

public string ApplyUpload(string MediaType, string MediaName)
{string medianame = "";if (MediaName != ""){medianame = "&MediaName=" + MediaName;}TCAcount tca = new TCAcount("");//请求地址string settingUrl = "https://vod.tencentcloudapi.com/";//应用IDstring secretId = tca.secretId;//应用keystring secretKey = tca.secretKey;//时间戳string timesTamp = GetTimeStamp();//Noncevar nonce = new Random().Next(10000, 99999);//拼接参数string paramsStr = string.Format(@"Action=ApplyUpload{4}&MediaType={3}&Nonce={0}&Region=ap-beijing&SecretId={1}&SignatureMethod=HmacSHA1&Timestamp={2}&Version=2018-07-17",nonce, secretId, timesTamp, MediaType,medianame);//生成签名参数//                      string requestText = settingUrl + "?" + paramsStr;string requestText = "POST" + settingUrl.Replace("https://", "") + "?" + paramsStr;//获得请求签名string signText = GetHmacSha1Sign(secretKey, requestText);//这里一定要进行URL编码,不然调用API会报错signText = HttpUtility.UrlEncode(signText, Encoding.UTF8);paramsStr = string.Format(@"Action=ApplyUpload{5}&MediaType={4}&Nonce={0}&Region=ap-beijing&SecretId={1}&Signature={2}&SignatureMethod=HmacSHA1&Timestamp={3}&Version=2018-07-17",nonce, secretId, signText, timesTamp, MediaType,medianame);string resultStr = SendRequest(settingUrl, paramsStr);if (resultStr.IndexOf("VodSessionKey") != -1){Newtonsoft.Json.Linq.JObject jsonObj = Newtonsoft.Json.Linq.JObject.Parse(resultStr);return jsonObj["Response"]["VodSessionKey"].ToString();}return "";
} //applyupload

确认上传

CommitUpload 方法用于确认媒体文件上传到腾讯云点播的结果,并存储媒体信息,返回文件的播放地址和文件 ID,其关键属性方法说明如下:

序号参数类型说明
1VodSessionKeystring点播会话,取申请上传接口的 ApplyUpload 方法返回值 VodSessionKey。

实现代码如下:

public string CommitUpload(string VodSessionKey)
{TCAcount tca = new TCAcount("");//请求地址string settingUrl = "https://vod.tencentcloudapi.com/";//应用IDstring secretId = tca.secretId;//应用keystring secretKey = tca.secretKey;//时间戳string timesTamp = GetTimeStamp();//Noncevar nonce = new Random().Next(10000, 99999);//拼接参数string paramsStr = string.Format(@"Action=CommitUpload&Nonce={0}&Region=ap-beijing&SecretId={1}&SignatureMethod=HmacSHA1&Timestamp={2}&Version=2018-07-17&VodSessionKey={3}",nonce, secretId, timesTamp, VodSessionKey);//生成签名参数//                      string requestText = settingUrl + "?" + paramsStr;string requestText = "POST" + settingUrl.Replace("https://", "") + "?" + paramsStr;//获得请求签名string signText = GetHmacSha1Sign(secretKey, requestText);//这里一定要进行URL编码,不然调用API会报错signText = HttpUtility.UrlEncode(signText, Encoding.UTF8);paramsStr = string.Format(@"Action=CommitUpload&Nonce={0}&Region=ap-beijing&SecretId={1}&Signature={2}&SignatureMethod=HmacSHA1&Timestamp={3}&Version=2018-07-17&VodSessionKey={4}",nonce, secretId, signText, timesTamp, VodSessionKey);string resultStr = SendRequest(settingUrl, paramsStr);return resultStr;
} //CommitUpload

拉取上传

PullUpload 方法用于将一个网络上的视频拉取到云点播平台,其关键属性方法说明如下:

序号参数类型说明
1MediaUrlstring

要拉取的媒体 URL,暂不支持拉取 Dash 格式(可以支持 HLS)。
支持的扩展名如下:

视频:WMV、RM、MOV、MPEG、MP4、3GP、FLV、AVI、RMVB、TS、ASF、MPG、WEBM、MKV 、M3U8、WM、ASX、RAM、MPE、VOB、DAT、MP4V、M4V、F4V、MXF、QT、OGG。

音频:MP3、M4A、FLAC、OGG、WAV、RA、AAC、AMR。

请确保媒体 URL 可以访问,示例 :http://www.test.com/test.mp4

实现代码如下:

public string PullUpload(string MediaUrl)
{TCAcount tca = new TCAcount("");//请求地址string settingUrl = "https://vod.tencentcloudapi.com/";//应用IDstring secretId = tca.secretId;//应用keystring secretKey = tca.secretKey;//时间戳string timesTamp = GetTimeStamp();//Noncevar nonce = new Random().Next(10000, 99999);//拼接参数string paramsStr = string.Format(@"Action=PullUpload&MediaUrl={3}&Nonce={0}&SecretId={1}&SignatureMethod=HmacSHA1&Timestamp={2}&Version=2018-07-17",nonce, secretId, timesTamp, MediaUrl);//生成签名参数//                      string requestText = settingUrl + "?" + paramsStr;string requestText = "POST" + settingUrl.Replace("https://", "") + "?" + paramsStr;//获得请求签名string signText = GetHmacSha1Sign(secretKey, requestText);//这里一定要进行URL编码,不然调用API会报错signText = HttpUtility.UrlEncode(signText, Encoding.UTF8);paramsStr = string.Format(@"Action=PullUpload&MediaUrl={4}&Nonce={0}&SecretId={1}&Signature={2}&SignatureMethod=HmacSHA1&Timestamp={3}&Version=2018-07-17",nonce, secretId, signText, timesTamp, MediaUrl);string resultStr = SendRequest(settingUrl, paramsStr);if (resultStr.IndexOf("TaskId") != -1){Newtonsoft.Json.Linq.JObject jsonObj = Newtonsoft.Json.Linq.JObject.Parse(resultStr);return jsonObj["Response"]["TaskId"].ToString();}return "";
} //pullupload

小结

腾讯云点播服务 API 提供了非常丰富与完善的管理功能列表,在这里我们仅是以满足自身应用需要而提取的常用媒体上传管理功能,更多详情请参照如下链接:

https://cloud.tencent.com/document/product/266/31753

本文代码仅供您参考使用,您可以参照官方文档开发出更加贴合自身需求的应用,感谢您的阅读,希望本文能够对您有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/16797.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AIGC 003-Controlnet升级你的SD让图像生成更加可控!

AIGC 003-Controlnet升级你的SD让图像生成更加可控&#xff01; 文章目录 0 论文工作1 论文方法2 效果 0 论文工作 ControlNet 论文 (Adding Conditional Control to Text-to-Image Diffusion Models) 提出了一种名为 ControlNet 的神经网络结构&#xff0c;旨在为大型文本到图…

解决Tomcat启动闪退:详细指南与故障排除技巧

解决Tomcat启动闪退&#xff1a;详细指南与故障排除技巧 检查日志文件端口冲突JVM 参数问题检查环境变量检查 web 应用升级或重新安装操作系统权限防火墙/安全软件检查内存设置 检查日志文件 查看 Tomcat 的日志文件&#xff0c;通常位于 logs 目录下&#xff0c;如 catalina.…

StackExchange.Redis跑起来,为什么这么溜?

StackExchange.Redis 是一个高性能的 Redis 客户端库&#xff0c;主要用于 .NET 环境下与 Redis 服务器进行通信&#xff0c;大名鼎鼎的stackoverflow 网站就使用它。它使用异步编程模型&#xff0c;能够高效处理大量请求。支持 Redis 的绝大部分功能&#xff0c;包括发布/订阅…

创意学习剪辑利器:一键添加动图水印,轻松提升视频专业度与创意新境界!

在数字化时代&#xff0c;视频已成为我们生活中不可或缺的一部分。无论是学习分享、工作展示还是生活记录&#xff0c;视频都以其直观、生动的形式&#xff0c;赢得了广大用户的喜爱。然而&#xff0c;如何在众多的视频中脱颖而出&#xff0c;展现出自己的专业度和创意&#xf…

[AI OpenAI] OpenAI 安全更新

AI 首尔峰会中分享我们的实践 我们自豪地构建并发布了在能力和安全性方面都处于行业领先地位的模型。 超过一亿用户和数百万开发者依赖于我们安全团队的工作。我们将安全视为我们必须在多个时间范围内投资并取得成功的事项&#xff0c;从使今天的模型与我们未来预期的更具能力…

谷歌浏览器使用vue插件查看表单提交的数据

1.查看组件&#xff1a; 对应代码里主页面引用的组件名&#xff1a; 表单名称&#xff0c;对应组件里form表单名&#xff1a; 左边的层次结构&#xff1a; 右边层次结构&#xff1a;

Excel/WPS《超级处理器》同类项处理,合并同类项与拆分同类项目

在工作中处理表格数据&#xff0c;经常会遇到同类项处理的问题&#xff0c;合并同类项或者拆分同类项&#xff0c;接下来介绍使用超级处理器工具如何完成。 合并同类项 将同一列中的相同内容合并为一个单元格。 1&#xff09;用分隔符号隔开 将AB列表格&#xff0c;合并后为…

Spring中@Component注解

Component注解 在Spring框架中&#xff0c;Component是一个通用的注解&#xff0c;用于标识一个类作为Spring容器管理的组件。当Spring扫描到被Component注解的类时&#xff0c;会自动创建一个该类的实例并将其纳入Spring容器中管理。 使用方式 1、基本用法&#xff1a; Co…

Android 通过adb命令查看设备尺寸和设置

Android adb查看设备尺寸 # 查看设备尺寸 adb shell wm size import re wm_size_value re.search(r"Physical size: (\w)x(\w)", wm_sizes).groups() wm_x, wm_y int(wm_size_value[0]), int(wm_size_value[1]) # 上面获取具体数值# 改变设备屏幕显示尺寸比例 adb…

xmindparser思维导图初试,用shell语言

需求 xmindparser 用 shell 画思维导图 x mind&#xff0c;可以/storage/emulated/0/字体/黑体.ttf 保存/storage/emulated/0/print/图片/input图纸/任务实施 ①. 首先要知道用什么库&#xff0c;都有哪些思维导图库 ②. 初步知道每一种库&#xff0c;尽管这很繁琐 ③. 尝试在…

企业微信hook接口协议,ipad协议http,已读消息

已读消息 参数名必选类型说明uuid是String每个实例的唯一标识&#xff0c;根据uuid操作具体企业微信send_userid是long要发送的人idisRoom是bool是否是群消息 请求示例 {"uuid":"1753cdff-0501-42fe-bb5a-2a4b9629f7fb","send_userid":788130255…

学习JavaScript底层逻辑之预编译

认识预编译前首先需要知道声明提升的概念 1. 变量声明&#xff0c;声明提升 在JavaScript中&#xff0c;变量声明&#xff08;使用var、let、const关键字&#xff09;会被提升到当前作用域的顶部。但其初始化&#xff08;赋值&#xff09;部分仍然保留在原地。 例如&#xff…

Unity学习日志

目录 获取相机可视范围的世界坐标(2D) 视口转世界坐标和屏幕转世界坐标的区别: 屏幕转世界坐标 视口转屏幕坐标 视口转屏幕结合3D数学实现可视范围的怪物生成 transform.up游戏对象的方向问题 其实还有一种不用Translate的写法: 修改 transform.up 的行为和影响 C#抽象…

全国各城市间驾车耗时和距离矩阵数据集(更新至2022年)

数据简介&#xff1a;城市之间距离越远&#xff0c;耗时越长。经济发达地区的交通状况较好。各城市之间的驾车耗时和距离存在差异。有些城市之间的交通非常便捷&#xff0c;而有些城市之间的交通则较为不便。这表明中国的交通网络发展尚不平衡&#xff0c;需进一步优化。特别是…

Excel如何统计非数值内容行数

需要用到sum函数&#xff0c;具体公式如下&#xff1a; SUM(IF(ISNONTEXT(G4:G199),0,1))

Java集合框架详解:深入探讨Java中的集合框架

前言 Java集合框架是Java语言中用于存储和操作大量数据的基石。集合框架提供了一套灵活的接口和实现&#xff0c;使得数据的存储、访问和管理变得异常简单。在本专栏中&#xff0c;我们将深入探讨Java集合框架&#xff0c;包括List、Set、Map等集合的使用和内部实现。 集合框…

Go 语言简介 -- 高效、简洁与现代化编程的完美结合

在现代软件开发领域&#xff0c;选择合适的编程语言对于项目的成功至关重要。Go 语言&#xff08;又称 Golang &#xff09;自 2009 年由Google发布以来&#xff0c;以其简洁的语法、高效的并发模型以及强大的性能&#xff0c;迅速成为开发者们的新宠。Go语言不仅融合了传统编译…

icloud照片怎么恢复到相册?2个方法,轻松解决烦恼

在现代生活中&#xff0c;照片承载着我们的回忆和珍贵的时刻&#xff0c;而iCloud提供了便捷的云存储服务&#xff0c;让用户可以方便地备份和同步手机上的照片、视频等文件。 然而&#xff0c;有时候我们可能会不小心删除了在iCloud上的照片&#xff0c;或者想要将iCloud照片…

青岛大学物理科学学院郭向欣教授

男&#xff0c;1973年1月生&#xff0c;山东济宁人。中国科学院百人计划杰出海外人才和上海市浦江人才&#xff0c;山东省泰山学者特聘教授&#xff0c;青岛市创业创新领军人才。固态离子学理事。博士&#xff0c;教授&#xff0c;博士生导师。 研究工作一直聚焦金属锂二次电池…

Golang:Sirupsen/logrus是一个日志库

Sirupsen/logrus是一个日志库 文档 https://github.com/Sirupsen/logrus 安装 go get github.com/sirupsen/logrus代码示例 package mainimport ("github.com/sirupsen/logrus" )func main() {var log logrus.New()log.Trace("Something very low level.&…