官方参考文档:http://dev.polyv.net/2017/videoproduct/v-playerapi/html5player/html5-docs/

1.上传视频之前根据自己需要对所上传的视频进行加密设置

下面说一下对于加密视频的H5播放 重点就在创建playsafe--获取token

1. 页面播放器加载

<div id="player"></div>
<script src="//player.polyv.net/script/player.js"></script>
<script>
var player = polyvPlayer({
wrap: '#player',
width: 800,
height: 533,
vid: '7d9f485283907d3f2cf12a866910b682_7',
playsafe: function(vid, next) { //不是加密视频playsafe不需要
$.ajax({
type: 'post',
url: '服务端用来获取token的url',
data: {
vid: vid
},
}).done(function (res) {
var result = JSON.parse(res);
playsafe = result.data.token;
next(playsafe);
});
}
});
</script>

2. Token 获取(服务端来获取)

  (1) 获取客户端IP

  (2) 创建加密生成sign所需参数

  (3) 将参数 userid、 videoid、 ts、 viewerip、 viewerid、 viewername、 extraparams 按照ASCII升序 key + value + ... + key + value拼接成字符串

  (4) 将拼接好的字符串首尾拼接secretkey

  (5) 将拼接好的字符串通过MD5加密 取大写MD5(32位)

  (6) post请求polyv 获取token

c#代码如下:

public string GetPolyToken(string vid)
{
var userId = "7d9f485283"; // polyv 提供的服务器间的通讯验证
var secret = "1NM4HdSS9P"; // polyv 提供的接口调用签名访问的key
var ip = "112.53.65.101"; // 客户端真实ip
var timeStamp = Convert.ToInt64((DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalMilliseconds).ToString(); // 毫秒级时间戳(13位)
var viewerId = "12345"; //观看者id
var viewerName = "12345"; //用户昵称(中文需要urlencode('张三'))
var extraParam = "HTML5"; //自定义参数
// 1. 创建加密生成 sign 的所需参数
Dictionary<string, string> parameters = new Dictionary<string, string>
{
{"userId", userId},
{"videoId", vid},
{"ts", timeStamp},
{"viewerIp", ip},
{"viewerId", viewerId},
{"viewerName", viewerName},
{"extraParams", extraParam}
};
// 2.将参数 userid、 videoid、 ts、 viewerip、 viewerid、 viewername、 extraparams 按照ASCII升序 key + value + ... + key + value 拼接成字符串 ascDicStr
var ascDic = parameters.OrderBy(o => o.Key).ToDictionary(o => o.Key, p => p.Value.ToString());
var ascDicStr = "";
foreach (var kv in ascDic)
{
ascDicStr += kv.Key + kv.Value;
}
// 3. 首尾拼接 secretkey
var signStr = secret + ascDicStr + secret;
// 4. 取大写MD5(32位) eg:DFC38BAACA122385A055D99739834A6D
var sign1 = MD5(signStr);
var sign = sign1.Replace("-", "");
// 5. 将生成的 sign 作为参数一并传给polyv用来获取token
parameters.Add("sign",sign);
string serviceUrl = "https://hls.videocc.net/service/v1/token";
//模拟 post 请求
HttpWebRequest request = null;
HttpWebResponse response = null;
Stream reqStream = null;
request = (HttpWebRequest)WebRequest.Create(serviceUrl);
request.Method = "post"; //设置为post请求
request.ReadWriteTimeout = 5000;
request.KeepAlive = false;
request.ContentType = "application/x-www-form-urlencoded;charset=utf-8";
byte[] postData = Encoding.UTF8.GetBytes(BuildQuery(parameters, "utf8")); //使用utf-8格式组装post参数
reqStream = request.GetRequestStream();
reqStream.Write(postData, 0, postData.Length);
response = (HttpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader streamReader = new StreamReader(responseStream, Encoding.GetEncoding("gb2312"));
string retString = streamReader.ReadToEnd();
streamReader.Close();
responseStream.Close();
return retString;
} //组装请求参数
private string BuildQuery(IDictionary<string, string> parameters, string encode)
{
StringBuilder postData = new StringBuilder();
bool hasParam = false;
IEnumerator<KeyValuePair<string, string>> dem = parameters.GetEnumerator();
while (dem.MoveNext())
{
string name = dem.Current.Key;
string value = dem.Current.Value;
// 忽略参数名或参数值为空的参数
if (!string.IsNullOrEmpty(name))
{
if (hasParam)
{
postData.Append("&");
}
postData.Append(name);
postData.Append("=");
if (encode == "gb2312")
{
postData.Append(HttpUtility.UrlEncode(value, Encoding.GetEncoding("gb2312")));
}
else if (encode == "utf8")
{
postData.Append(HttpUtility.UrlEncode(value, Encoding.UTF8));
}
else
{
postData.Append(value);
}
hasParam = true;
}
}
return postData.ToString();
} /// <summary>
/// MD5 hash加密
/// </summary>
/// <param name="s"></param>
/// <returns></returns>
public static string MD5(string s)
{
var md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
var result = BitConverter.ToString(md5.ComputeHash(UnicodeEncoding.UTF8.GetBytes(s.Trim())));
return result;
}

  

.NET MVC对接POLYV——HTML5播放器播放加密视频的更多相关文章

  1. 使用vlc播放器播放rtsp流视频

    可参考: 使用vlc播放器做rtsp服务器 web网页中使用vlc插件播放相机rtsp流视频 使用vlc进行二次开发做自己的播放器 首先需要安装vlc播放器,下载及安装步骤略 使用vlc播放器播放rt ...

  2. 【转】C# 视频监控系列(12):H264播放器——播放录像文件

    原文地址:http://www.cnblogs.com/over140/archive/2009/03/23/1419643.html?spm=5176.100239.blogcont51182.16 ...

  3. 第十一篇、HTML5隐藏播放器播放背景音乐

    html5添加网页背景音乐  一个客户要求给网站添加一个背景音乐,我用的是html5添加网页背景音乐的代码,在此记录一下以后有用. html5方法一:<audio autoplay=" ...

  4. .net C# 网页播放器 支持多种格式 媒体播放器 播放器 代码

    .avi格式代码片断如下:<object id='video' width='400' height='200' border='0' classid='clsid:CFCDAA03-8BE4- ...

  5. flv网页播放器播放失败

    在IIS6.0上发布网站时,在路径正确的情况下,网页flv播放器还是无法播放flv视频的解决方法. 1.打开IIS6.0管理器,打开发布的网站,点击打开属性窗口. 2.在HTTP头选项里找到MIME类 ...

  6. java调用本地播放器播放视频文件。调用本地播放器不能播放指定文件的说明。

    public class OpenExe extends HttpServlet { //打开本地播放器并播放视频 public static void openExe(String file) { ...

  7. EasyPlayer-RTSP-Android安卓播放器播放RTSP延迟优化策略,极低延时!

    EasyPlayer-RTSP-Android安卓RTSP播放器低延迟播放延时优化策略 EasyPlayer-RTSP-Android播放器是一款专门针对RTSP协议进行过优化的流媒体播放器,其中我们 ...

  8. 如何实现Windows平台RTMP播放器/RTSP播放器播放窗口添加OSD文字叠加

    好多开发者在做Windows平台特别是单屏多画面显示时,希望像监控摄像机一样,可以在播放画面添加OSD台标,以实现字符叠加效果,大多开发者可很轻松的实现以上效果,针对此,本文以大牛直播SDK (Git ...

  9. .net利用本地播放器播放视频文件代码

    前台点击按钮,执行js事件,跳转到后台代码: function funShowVideo(index) {            var iTop = (window.screen.availHeig ...

随机推荐

  1. mysql函数之六:mysql插入数据后返回自增ID的方法,last_insert_id(),selectkey

    mysql插入数据后返回自增ID的方法 mysql和oracle插入的时候有一个很大的区别是,oracle支持序列做id,mysql本身有一个列可以做自增长字段,mysql在插入一条数据后,如何能获得 ...

  2. 微信小程序之工具js封装与使用

    工具库的创建与使用 创建一个common文件夹 在common文件夹中创建一个utils文件夹 在utils文件夹中创建util.js // 工具 function tool() { console. ...

  3. python开发mysql:mysql安装(windows)&密码找回&存储引擎简介&库表的增删改查

    一,mysql安装 下载地址 https://dev.mysql.com/downloads/file/?id=471342 解压后,将目录C:\mysql-5.7.19-winx64\bin添加到计 ...

  4. 单片机keil C中的data、bdata、idata、xdata、hdata、pdata、code解释

    从数据存储类型来说,8051系列有片内.片外程序存储器,片内.片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code.data.xdata.idata以及根据51系列特点而设定的 ...

  5. JSP搭建

    Tomcat7已经发布多时,Tomcat7增加了对Servlet 3.0,JSP 2.2和JSP-EL 2.2的支持.支持web application内存泄露的检测和防护等很多新功能.本片教程主要介 ...

  6. 代码说明call和apply方法的区别 (咱们这方面讲解的少,这样的题有变式,需要举例讲解一下)

    这两个都是函数的方法,可以改变this的指向,fn.call(obj,param1,param2,…) call传入单个参数 fn.apply(obj,[param1,param2,...]) app ...

  7. dd命令的解释

    dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. 注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512:c=1:k=1024:w=2 参数注释: 1. if=文件名:输入 ...

  8. 图灵机器人,web录音实现自动化交互问答

    一.图灵机器人 介绍 图灵机器人 是以语义技术为核心驱动力的人工智能公司,致力于“让机器理解世界”,产品服务包括机器人开放平台.机器人OS和场景方案. 官方地址为: http://www.tuling ...

  9. java基础篇之HashMap

    HashMap和C#中的Dictionary基本一样 键是唯一值 值可以是对象 循环HashMap的方式:一: 1,通过Set<T> st = hs.keySet()找到所有的key值集合 ...

  10. 非root配置linux下vim

    在机子目录下建立 .vim文件夹 例如 /home/xxx/.vim 在~文件夹下建立.vimrc文件 这是你自己配置文件 vim虽然启用了格式化高亮.行号显示,以及括号匹配.自动缩进等编辑功能,对于 ...