html5 播放加密视频播放器,.NET MVC对接POLYV——HTML5播放器播放加密视频

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

c529edd967fa23f183ab2a0503dbb2f2.png

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

1. 页面播放器加载

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);

});

}

});

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 parameters = new Dictionary

{

{"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 parameters, string encode)

{

StringBuilder postData = new StringBuilder();

bool hasParam = false;

IEnumerator> 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();

}

///

/// MD5 hash加密

///

///

///

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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值