Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C# 实现腾讯云点播之媒体上传常用接口

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

作者头像
初九之潜龙勿用
发布于 2024-06-20 05:31:46
发布于 2024-06-20 05:31:46
30100
代码可运行
举报
文章被收录于专栏:技术文章技术文章
运行总次数:0
代码可运行

关于腾讯云点播媒体管理

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

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

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

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

开发前准备

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/// 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 类,创建及访问示例如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
TCAcount tca = new TCAcount();
//应用ID
string secretId = tca.secretId;
//应用key
string secretKey = tca.secretKey;

(3) 用到两个时间戳函数,代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 的功能,参考代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 方法用于申请媒体文件的上传,获取文件上传到云点播的元信息(包括上传路径、上传签名等),用于后续上传接口。其关键属性方法说明如下:

序号

参数

类型

说明

1

MediaType

string

媒体格式,包括: 视频: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。

2

MediaName

string

媒体名称,如 test.mp4

实现代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public string ApplyUpload(string MediaType, string MediaName)
{
                string medianame = "";
                if (MediaName != "")
                {
                    medianame = "&MediaName=" + MediaName;
                }
                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=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,其关键属性方法说明如下:

序号

参数

类型

说明

1

VodSessionKey

string

点播会话,取申请上传接口的 ApplyUpload 方法返回值 VodSessionKey。

实现代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public string CommitUpload(string VodSessionKey)
{
                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=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 方法用于将一个网络上的视频拉取到云点播平台,其关键属性方法说明如下:

序号

参数

类型

说明

1

MediaUrl

string

要拉取的媒体 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

实现代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public string PullUpload(string MediaUrl)
{
                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=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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C# 实现腾讯云点播之媒体管理常用接口
腾讯云点播(Video On Demand)服务基于多年技术积累与基础设施建设,为有音视频应用相关需求的客户提供包括音视频存储管理、音视频转码处理、音视频加速播放、音视频加密、音视频AI能力的一站式解决方案,可通过云平台进行上传后的媒资管理。
初九之潜龙勿用
2024/06/20
1860
【玩转腾讯云】腾讯云DDNS 解决方案(1)
前提条件 已经在qcloud上注册了域名,并随意定义了域名解析地址; 拥有云API秘钥,SecretId、SecretKey; 拥有可外网访问的IP地址; Linux可以访问外网。 获取解析记录 #!/bin/bash domain='你的域名,例如qq.com' subDomain='你希望解析的子域名,例如wx.qq.com,则只输入wx' sId='你的云API秘钥SecretId' sKey='你的云API秘钥SecretKey' signatureMethod='HmacSHA1' timest
franket
2020/03/14
23.4K0
使用腾讯云云点播对视频进行HLS加密
加密并不是百分百不会泄露,只是增加直接获取被加密资源的代价,别人录屏等等也是可以的,防不胜防
沈唁
2019/12/30
3.9K1
利用API自动更新腾讯dnspod子域名解析记录实现ddns
由于个人网络是动态IP地址,导致每次重启路由器都会更换IP地址,或者是租约到期也会更新IP地址。 更换IP地址后每次都需要重新设置DNSPod,假如设置不及时还可能会影响到个人搭建的某些服务。 所以当时我就在想有没有办法实现定期查询本地IP地址与DNSPod记录IP地址是否相同, 相同则不进行任何操作,不同则自动上报更新IP地址。于是乎有了下面这个利用DNSPod的API实现动态更新IP地址的方法。
铭心
2024/12/20
7350
【玩转腾讯云】腾讯云DDNS 解决方案(2)
修改解析记录 #!/bin/bash #/usr/bin/ddns recordId='根据上面返回结果,手工填入,好像是几位数字' domain='你的域名,例如qq.com' subDomain='你希望解析的子域名,例如wx.qq.com,则只输入wx' sId='你的云API秘钥SecretId' sKey='你的云API秘钥SecretKey' signatureMethod='HmacSHA1' timestamp=`date +%s` nonce=`head -200 /dev/urandom
franket
2020/03/14
9.9K0
腾讯云API:用Python使用腾讯云API(cvm实例)
腾讯云API地址:https://cloud.tencent.com/document/api
None-xiaomi
2018/05/30
26.2K10
C# 查询腾讯云直播流是否存在的API实现
在云考试中,为防止作弊行为的发生,会在考生端部署音视频监控系统,当然还有考官方监控墙系统。在实际应用中,考生一方至少包括两路直播流:
初九之潜龙勿用
2024/06/20
2530
C# 查询腾讯云直播流是否存在的API实现
腾讯云 上传视频_云点播系统源码
所需jar包http://download.csdn.net/download/sinat_36596988/10195891
全栈程序员站长
2022/11/17
15.8K0
CKafka系列学习文章 - 用java实现API调用(十一)
导语:上一章节我们了解了怎么手动拼接请求URL和用API2.0签名自动生成请求URL,来调用CKafka的接口,这一章将进入开发阶段,用java实现拼接请求URL,进行API调用。
发哥说消息队列
2019/09/06
6740
Python 和 PHP 对腾讯云签名 hmac_sha256 算法实现
开宗明义,米扑科技在使用腾讯云的API接口签名中,按照官方示例开发PHP、Python的接口,经常会提示签名错误
阳光岛主
2019/02/18
2.6K0
腾讯云服务视频,腾讯云点播的视频上传和转码功能
有些用户烦恼腾讯云储存上传大文件的各种不方便,比如不能转码(要转码得先把mp4文件从云存储上下载下来,然后通过服务器执行ffmpeg操作,最后再把切割的ts文件上传到腾讯云,过程复杂且容易出错),不能获取实时的上传进度等等,所以就发现腾讯云点播这项技术。相对来说通过腾讯云点播既能实现上传进度的获取,而且还能上传完成后自动转码,比如自动把mp4转换为m3u8格式的清单文件来进行分片加载,这样子既能大大加快加载速度,还能保护视频链接的url,所以就记录一下这种技术的使用原理。
tengxunyun8点com活动整理
2019/04/30
16.6K0
腾讯云服务视频,腾讯云点播的视频上传和转码功能
如何设计一个API签名
大部分情况下,我们使用已有的API签名方案(如腾讯云API签名、阿里云APi签名、亚马逊API签名等等)即可,无需从零开始设计一个API签名方案。写这篇文章的主要目的,是希望通过思考如何去设计一个可用API签名的过程,更好地理解现有的各种大同小异的签名方案背后的设计原理,从而更好地保护好我们的API接口。当然,有需要自己设计一个签名方案的场景也可参考一下。
林喜东
2019/12/22
5.6K1
如何设计一个API签名
Python实现腾讯云CDB备份文件自动上传到COS
一、背景 需求:目前遇到的客户需求为将腾讯云CDB备份文件自动上传到腾讯云COS内,再次抛砖引玉,还有很多类似的需求均可以采用此类方法解决,线下IDC数据文件备份至云端COS内,或根据文件下载地址url将文件上传至COS内。 思路:首先获取到CDB的备份下载url,通过COS的API上传文件,大佬如有更好的方法欢迎一块讨论。 二、技术细节 COS:COS有API同时有SDK,这就很方便我们来通过Python对COS进行各类操作,COS SDK for Python CDB:CDB有API但是CDB的查询备份
KaliArch
2018/07/16
2.7K0
Python实现腾讯云CDB备份文件自动上传到COS
GitHub Actions + 腾讯云COS + SCF云函数 + 自动刷新CDN 完美自动化部署静态网站
作为强迫症患者,一直对自动化部署非常痴迷,个人认为全自动部署最重要的就是稳定可靠,经过研究测试,最终使用GitHub和腾讯云两大平台,成功完成了全自动部署网站的实践.
用户8851537
2021/07/30
1.6K0
C#结合JavaScript实现上传视频到腾讯云点播平台
在云培训系统里,制作视频课件是我们的主要工作之一,制作完成后如果将这些素材存储到服务器并进行分发播放,是摆在我们面前的一个问题。最终我们选择了腾讯云点播服务,其加速分发播放几乎适用所有需要展示图片或音视频媒体内容的在线场景,借助遍布全球的大量 CDN 加速节点,在复杂的网络环境也能提供高质量的媒体内容访问服务。
初九之潜龙勿用
2024/06/20
3240
如何使用腾讯云云硬盘API
腾讯云控制台允许您以类似于使用硬盘驱动器的方式管理腾讯云CVM的额外存储。只需点击腾讯云简化的GUI或图形用户界面,即可为我们的CVM添加云硬盘。但是,这不是一个在大型集群的实用方法,因此腾讯云提供了相关API。我们可以通过腾讯云官方命令行工具直接与API进行交互。
好烟
2018/08/13
5.4K0
【腾讯云的1001种玩法】WordPress 发布/更新文章、提交/审核评论自动清理腾讯云CDN缓存
张戈
2017/03/17
2.9K0
【腾讯云的1001种玩法】WordPress 发布/更新文章、提交/审核评论自动清理腾讯云CDN缓存
【非官方教程】【视频】云API实践教程(上)
云API存在的目的是什么?有控制台给我们提供给中便利,我们为什么要用API来做一些操作?
None-xiaomi
2018/07/11
1K0
教你如何截取视频制作表情包
一天,小罗妹妹在家看着综艺节目,为自己家idol 坤坤哥哥,疯狂打call,被里面的节目效果,逗得捧腹大笑,这时看到了坤坤哥哥特别好笑的一个动作表情,想要保存下来,和朋友分享,怎么办呢,小罗妹妹非常苦恼,
林俊标-pjblin
2020/12/11
7.5K1
教你如何截取视频制作表情包
腾讯云API:让你的代码更加稳定(Python版)
之前发了两个文章,是关于腾讯云API的使用的文章,主要是小Demo的展示,用来帮助初学者,或者最初使用者作为参考。但是有些人可能有疑问,或者新的想法,你这代码是否可以进行一些“黑科技”,当然可以。首先,上一下之前的两个代码:
None-xiaomi
2018/06/01
4K1
推荐阅读
相关推荐
C# 实现腾讯云点播之媒体管理常用接口
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验