技术标签: 加密媒体扩展HTML5 DRM 内容解密模块 drm解决方案 HTML5视频DRM 如何嵌入HTML5播放器
海海软件DRM-X 4.0 HTML5 视频播放使用HTML5 Video 标签,您可以很轻松的通过标准的HTML5标签嵌入视频,并且可以使用市面上流行的HTML5播放器,像VideoJS,您可以使用JavaScript与HTML5播放器进行交互。
在head中引入VideoJS:
<!--引用VideoJS脚本-->
<link rel="stylesheet" type="text/css" href="css/video-js.css" />
<script src="js/video.js" type="text/javascript" charset="utf-8"></script>
<!--使用自定义皮肤-->
<link rel="stylesheet" type="text/css" href="css/skin/TechSkin-skin.css" />
您也可以根据您网站的风格使用其他的播放器皮肤。
在这里推荐一个VideoJS的皮肤生成工具,您可以在上面自定义播放器皮肤风格。
https://codepen.io/heff/pen/EarCt
在body中嵌入VideoJS播放器:
注意:对于iOS在线播放,为了确保Xvast浏览器可以识别到您的视频地址,请确保Video标签的ID为xvast_player。
<div id="LoadingText" style="display: none;" align="center">
正在跳转到获取权限页面...
</div>
<div id="cellular_button" align="center"></div>
<div align="center">
<script type="text/javascript">
// 检测当前的浏览器是否为Xvast,若非Xvast浏览器,
// 将会提示用户在Xvast浏览器中打开受保护的文件,并提示用户下载Xvast浏览器。
if(navigator.userAgent.indexOf("Xvast") == -1){
document.write('提示:请在Xvast浏览器中打开受保护文件。下载Xvast');
}else{
// 加入HTML5的vide标签;
// VideoJS会自动改变video标签的ID,这里的xvast_player将会自动变成变成xvast_player_html5_api;
// 使用src属性指定视频URL;
// class="video-js" 调用VideoJS的样式
// data-setup 中 "autoplay":true 自动播放,false不自动播放;
// 在data-setup中,可以通过 "playbackRates": [0.5, 0.7, 1, 1.5, 2, 3, 4]添加播放速度的功能;
document.write('<video id="xvast_player" controls="controls" src="https://cn.haihaisoft.com/download/drmx4/Stay_P.mp4" class="video-js" data-setup=\'{ "autoplay":false, "width": 856, "height": 480 }\'></video>');
}
</script>
</div>
Javascript代码:
<script type="text/javascript">
document.onreadystatechange = function () {
if (document.readyState == "complete") { // 页面加载完之后执行,必须;
// 获取HTML5播放器
// VideoJS会自动在Video标签的ID后自动加上_html5_api;
myVid=document.getElementById("xvast_player_html5_api");
// 获取播放器返回的详细信息,如果需要获取许可证,将会返回获取许可证的URL,
// 不然将会返回受保护文件的详细信息和许可证信息。
isSupp=myVid.canPlayType('xvast');
// 检测是否为手机访问
if(navigator.userAgent.indexOf("Mobile Xvast") > 0){
var con = window.navigator.connection;
var network = con.type; // 移动网络:cellular; 无线网络:wifi
// 检测手机是使用移动网络还是wifi
if (network == "cellular"){ // 如果手机使用移动网络,需要为页面添加获取许可证的按钮
document.getElementById("cellular_button").innerHTML = '<button style="height: 50px" class="m_g_b" onClick="supportType(event,\'video/ogg\',\'theora, vorbis\')">播放加密的文件(点击两次)</button>';
}
}
// 如果返回信息包含URL,说明需要获取许可证。
if(isSupp.indexOf("http")>0){
// 显示提示,非必须;
document.getElementById("LoadingText").style.display='block';
// 通过substring截取获取许可证的URL;
licURL = isSupp.substring(isSupp.indexOf("http"));
// 跳转到获取许可证页面验证并获取许可证。
window.location.href = licURL;
}
}
}
</script>
下面的方法提供参考,用来获取更多信息,包含许可证信息,非必须,根据您的需求添加。
function supportType(e,vidType,codType){
myVid=document.getElementById(“xvast_player_html5_api”);
isSupp=myVid.canPlayType(“xvast”);
myVid.play();
licURL = isSupp.substring(isSupp.indexOf(“http”));
if(isSupp.indexOf(“http”)>0){
window.location.href = licURL;
}else{
if(isSupp.indexOf(“License”)>0){
// 获取打开次数
var openCount=isSupp.substring(isSupp.indexOf(":"),isSupp.indexOf(";"));
// 获取许可证的过期时间
var ft=isSupp.substring(isSupp.indexOf(";")+1);
var ut = filetime_to_unixtime(ft);
var d = new Date(ut * 1000);
e.target.parentNode.innerHTML ="打开次数" + openCount + ", 过期日期:" + d.toLocaleString();
return;
}
if(isSupp.indexOf("Error ID = 3")>0){
e.target.parentNode.innerHTML ="许可证已经过期。请关闭Xvast,重新打开受保护的文件,来获取新的许可证";
return;
}
}
}
成都市武侯计算机实验小学刘浩上课中。刘浩送教下乡期间指导青年教师教学。刘浩为孩子们捐赠御寒衣物。作为武侯区第十一批支教教师,刘浩在2015年8月下旬到白玉县支教,在海拔3000米高原的白玉县一待就是两年。这里的工作、生活给他留下了深刻的印象,有阳光、有微笑,有充实、也收获了成长。在来到白玉的第二天,作为组长的刘浩便带领全体5名支教教师积极投入支教工作。他利用周末休息时间将大家聚集到一起,详细询问了...
▼点击上方蓝字 关注网易智能聚焦AI,读懂下一个大时代!【网易智能讯 1月29日消息】昨日,《麻省理工科技评论》新兴科技峰会EmTech China在北京开幕。会上,谷歌DeepMind研究科学家Oriol Vinyals发表了演讲,他提出了数据和任务在研究机器学习和人工智能领域的重要性,并介绍了基于AlphaGo在深度强化学习方面取得的突破性成就,以及目前如何利用机器学习战胜《星际争霸II》的玩
系统声音服务(System Sound Services)提供了一个接口,用于播放不超过30秒的声音。它支持的文件格式有限,具体地说只有CAF、AIF和使用PCM或IMA/ADPCM数据的WAV文件。由于这些函数没有提供操纵声音和控制音量的功能,所以当你为多媒体或者游戏创建专门的配乐时,不要使用系统声音服务。iOS使用系统声音服务来支持三种不同的通知:1. 声音:立刻播放一个简单的
首先声明,网上一些文档仅供学习使用,或多或少简化了安全证书相关的步骤。但是!!实际工作中,安全证书非常有必要。所以这里强调:准备工作一定要有域名,有安全证书,有docker用户密码!目录一,观察理解run镜像仓库的命令参数1.1 创建好registry以后1.1.1 push镜像,报错:没有授权1.1.2 push镜像,报错:不被信任的证书1.2 如何在集群其他的机器(不是仓库所在的宿主机)上传镜像1.3 如何让k8s能够顺利的从私有仓库拉取镜像步骤如下1.3.1 将docker登录仓库的认证信息,用.
高光谱解混方法概述问题引入问题何来?基础知识核心任务基础方法线性与非线性模型线性混合模型非线性混合模型非线性方法的概述高光谱解混流程大气校正(Atmospheric Correction)数据减少(Data Reduction)解混(Unmixing)反演(Inversion)本文为论文笔记,目的是自己看过的论文别忘了。。。问题引入问题何来?由于高光谱成像仪(又称Hyperspectral Cameras HSCs)的快速发展,它可以在一瞬间收集到成百上千的光谱通道,这远远多于过去的多光谱摄像机。由
c++里的可变参数 在c++编程中,有时我们需要编写一些在源代码编写阶段无法确定参数个数,有时甚至无法确定参数类型的函数。 如果想通过一个同名函数实现多个参数相加的操作,我们首先会想到通过函数重载来实现,例如:int sum(int i1, int i2);int sum(int i1, int i2, int i3);...//还可以重载更多类似函数但如果参数的个数无法确定呢,我们不可能对每一种情况都进行重载。那么,需要的是这样一类函数:它们可以在运行时取任意的实参个数并根据实参的个数自
1 问题描述:在 springboot 项目中有时候会需要读取一些资源文件,例如 office的 docx 文档或者 png、jpg的图片。在多模块项目中资源文件需要放到启动项目的 Resources 文件夹示例代码如下:InputStream pngInStream = Thread.currentThread().getContextClassLoader().getRe...
http://www.linuxdiyf.com/bbs/thread-68473-1-1.htmlopenmpi的安装步骤参考www.openmpi.org的faq就能搞定了。稍记一下供以后参考:1)从www.openmpi.org下载压缩包openmpi-1.2.4-tar.bz2,放到/tmp下, 解压缩tar jxf 2) cd openmpi-1.2.4, ./configure --prefix=/usr/local/openmpi, make all install3) cd; vi .bas
这是一个大数据作业完成过程的记录,基础仅有一个Ubuntu系统,学习过程中借鉴了很多博主的相关介绍,在这里作一下总结,也记录一下自己学习过程中遇到的坑和解决方案。希望对其他做类似作业的人有所帮助。(一)前期环境准备一、项目环境Ubuntu 18.04(本人在Win10下装了双系统)hadoop 2.10.1JDK1.8Eclipse(2020-03):必须要带有JavaEE Development Tools的版本MySQL5.7、MySQL驱动包5.1.49Tomcat 8.5(tomc
Spring Data JPA其诸多优点给我们的工作带来了很多便利,但对于接触不久的同学来说,有些情况让我们头疼。一些复杂的查询,比如涉及到聚合函数、动态多条件等,着实有些棘手。在不够了解的情况下,觉得Spring Data JPA在这方面不太人性化,有时候我们干脆使用原生sql粗暴的来解决这类查询问题。但这与Spring Data JPA的初衷是相悖的,在不断的学习中,慢慢发现Spring Da...
OO第二单元总结0. 前言作为程序员,今天你决定翘掉晚上的加班,约女朋友看电影。电影是 20:00 开始。虽然翘掉了加班,但你从公司出来,就已经 19:00 了。公司在望京 SOHO,约会地点在朝阳大悦城。(这点时间,祝你好运吧)也许你运气真的很好,19:50 就赶到商场了。心里想:“还有10分钟才开始,电影院在 F8,乘个直梯,两分钟就到,今天真美好。”你按了上行按钮,并行的...
题目描述:按要求输入如下格式的杨辉三角11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1最多输出10层输入:输入只包含一个正整数n,表示将要输出的杨辉三角的层数。输出:对应于该输入,请输出相应层数的杨辉三角,每一层的整数之间用一个空格隔开样例输入:5样例输出:11 11 2 11 3 3 11 4 6 4 1实现代码:#include<cstdio>/* 此题解决思路是先打表,在进行输入输出。*/int