前言

公司需求,上传的视频需要加上公司Logo,同时播放需要采用流式播放禁止下载。 现有的环境在阿里云上,所以自然想到了阿里云的产品【媒体处理】的转码功能。

转码配置

配置比较简单,采用阿里云HLS标准加密方式 参考阿里云官方文档即可【文档地址】,采用工作流方式,自动触发。

流程图如下。

工作流的配置需要额外注意的是KeyUri,该Url为业务站点应用对应的视频解密api, 此Url会在MPS加密后自动写入m3u8文件中,播放器播放时在解析m3u8文件后,也会自动请求该Url,将读取到的ts文件进行解密播放。

播放与解密

流程图

解密服务

这里可以按照自己的开发语言,我这边使用的是.net core。 官方文档提供了python和java 两个版本,调用Kms密钥服务将密文进行解密。

一个简单的m3u8文件如下

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:5
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="https://example.aliyundoc.com?Ciphertext=aabbccddeeff&MediaId=fbbf98691ea44b7c82dd75c5bc8b****"
#EXTINF:4.127544,
15029611683170-00001.ts
#EXT-X-ENDLIST

其中Ciphertext为密文,MediaId 为媒体服务对应的mediaId,播放时使用。

解密api的请求代码如下(C#)

        private Client CreateClient()
{
Config config = new Config
{
// 您的AccessKey ID
AccessKeyId = _config.AccessKeyId,
// 您的AccessKey Secret
AccessKeySecret = _config.AccessKeySecret,
Endpoint = _config.Endpoint,
};
return new Client(config);
}
   private async Task<string> DecryptRequest(string mediaId, string ciphertext)
{
var client = CreateClient();
DecryptRequest request = new DecryptRequest();
request.CiphertextBlob = ciphertext;
try
{
DecryptResponse response = await client.DecryptAsync(request);
string plaintext = response.Body.Plaintext; Console.WriteLine($"plaintext:{plaintext}");
Console.WriteLine($"KeyId:{response.Body.KeyId}");
Console.WriteLine($"KeyVersionId:{response.Body.KeyVersionId}");
Console.WriteLine($"RequestId:{response.Body.RequestId}");
return plaintext;
}
catch (Exception ex)
{
throw ex;
}
}

不过按理来讲需要在这里要额外校验当前用户的身份,如果没有对应的身份标识,则应该返回httpCode 403. 验证标识的方式可采用 cookie token或其他方式,但这块儿的http请求是由 Aliplayer发出的,在前后端分离的项目中暂时还不清楚如何在请求头上加上自己的临时票据 也就是上面播放流程图中的MtsHlsUriToken参数,需要请教大佬解答了。

视频播放

 视频播放可以采用两种方式即 播放地址播放mps用户方式播放, 参考地址

播放地址播放

这里需要保证Bucket 【防盗链】和【跨域】设置都需要对web站点所在域名放入白名单中

因为视频时采用HLS标准加密方式的,如果想要使用播放地址进行播放的话,可以采用Aliplayer播放器播放,当然你也可以采用其他开源的播放器进行播放。不过如果使用其他h5 流式播放器播放的话 需要注意读取.ts视频段的时候需要确保Bucket公共读,否则就需要改写对应的播放器源码实现通过临时签名方式读取.ts文件。

以下是初始化web h5播放器的部分代码段

  <div id="player-con"></div>
<script>
var player = new Aliplayer({
id: "player-con",
source: "https://*****.oss-cn-shanghai.aliyuncs.com/m3u8_1280/test.m3u8",
width: "100%",
height: "500px",
autoplay: true,
isLive: false
}, function (player) {
console.log("The player is created");
}); </script>

MPS用户播放

mps用户播放暂时支持支通过aliplayer播放器播放的,采用mediaId进行播放。  MediaId指的是【媒体处理】服务进行视频转码后端统一的mediaId,好处是可以跨多清晰度。

  1. 为加密视频文件单独放在一个Bucket上,配置为私有读,或者公共读都可以,因为视频文件已经做过内容加密。是否公共读都可以的。
  2. 添加CDN加速域名,参考文档进行基本配置,注意这里如果视频所在的Bucket是私有读的话,需要在CDN中开启【私有Bucket回源】,剩下的CDN的域名证书配置之类的就不说了。
  var config = {
"id": "player-con",
"vid": {{mediaId}},
"accId": {{accessKeyId}},
"accSecret": {{accessKeySecret}},
"stsToken": {{securityToken}},
"authInfo": {{authInfo}},
"domainRegion":{{domainRegion}},
"format": {{format}},
"mediaType": "video",
"width": "100%",
"height": "500px",
"autoplay": true,
"isLive": false,
"rePlay": false,
"playsinline": true,
"preload": true,
"controlBarVisibility": "hover",
"useH5Prism": true,
};
var player = new Aliplayer(config, function (player) {
console.log("The player is created");
});

参考

Aliplayer通过HLS流式播放Aliyun Mps(媒体处理)转码的加密视频的更多相关文章

  1. 【官方文档】Nginx模块Nginx-Rtmp-Module学习笔记(三)流式播放Live HLS视频

    源码地址:https://github.com/Tinywan/PHP_Experience HTTP Live Streaming(HLS)是由Apple Inc.实施的非常强大的流视频协议.HLS ...

  2. IOS(苹果手机)使用video播放HLS流,实现在内部播放及全屏播放(即非全屏和全屏播放)。

    需求: 实现PC及移动端播放HLS流,并且可以自动播放,在页面内部播放及全屏播放功能. 初步:PC及安卓机使用hls.js实现hls流自动播放及全屏非全屏播放 首先使用了hls.js插件,可以实现在P ...

  3. 用video标签流式加载

    video标签 浏览器的video标签通常是接收一个src属性,然后浏览器就会根据这个src属性来自动加载视频.这个过程是浏览器来加载video的. 这种方式有什么问题吗? mp4文件不能流式加载 w ...

  4. 【Azure媒体服务 Azure Media Service】Azure Media Service中Stream Endpoint 说明 (流式处理终结点)

    Azure 媒体服务是一个基于云的媒体工作流平台,用于生成需要编码.打包.内容保护和直播活动广播的解决方案. 在视频的直播,点播方案中,媒体服务的架构主要由三部分构成: 推流端,把本地视频或直播内容推 ...

  5. 【Android】 修复ijkPlayer进行m3u8 hls流播放时seek进度条拖动不准确的问题

    项目中使用的播放器是ijkPlayer,发现播放切片特点的hls流(m3u8格式的视频)拖动seekBar的时候会莫名的跳转或者seek不到准确的位置,发现网友也遇到了同样的问题,ijk的开发者也说明 ...

  6. EasyNVR、EasyDSS二次开发之:RTMP、HLS流在web页面进行无插件播放示例Demo代码

    不管是基于EasyNVR还是EasyDSS,都是支持无插件直播,这也是未来视频直播的一个趋势.对于传统的浏览器插件播放谁用谁知道: 以上是软件自带播放展示 背景需求 对于EasyNVR和EasyDSS ...

  7. DirectSound学习(二)--流式缓冲区

    使用流式缓冲方式播放波形音频文件比较复杂,主要原因是在只有一个缓冲区提供给用户的前提下,这个缓冲区在提供给声卡播放数据的同是还需要用户不断的定时向其中写入数据.要注意从缓冲区这时是一个环形缓冲区,声音 ...

  8. Apple公司Darwin流式服务器源代码分析

    当前,伴随着Internet的飞速发展,计算机网络已经进入到每一个普通人的家庭.在这个过程中,一个值得我们关注的现象是:Internet中存储和传输内容的构成已经发生了本质的改变,从传统的基于文本或少 ...

  9. Others-阿里专家强琦:流式计算的系统设计和实现

    阿里专家强琦:流式计算的系统设计和实现 更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloud 阿里云数据事业部强琦为大家带来题为“流式计算的系统设计与实现”的演讲,本 ...

  10. vue播放video插件vue-video-player实现hls, rtmp播放全过程

    1.安装插件 1 npm install vue-video-player -S 2.配置插件 在main.js里添加 1 import VideoPlayer from 'vue-video-pla ...

随机推荐

  1. #结论#洛谷 3199 [HNOI2009]最小圈

    题目 求有向图最小平均权值回路. \(n\leq 3*10^3,m\leq 10^4\) 分析 设 \(f_k(x)\) 表示从点 \(x\) 出发恰好走 \(k\) 条边的最短路, 那么答案就是 \ ...

  2. 使用OHOS SDK构建lua

    参照OHOS IDE和SDK的安装方法配置好开发环境. 从github下载源码. 执行如下命令: git clone --depth=1 https://github.com/lua/lua.git ...

  3. 提升面试成功率:深入理解 C++ 11 新特性

    C++11是C++语言的一个重大更新,引入了许多新特性,包括自动类型推导.lambda表达式.右值引用.智能指针等等.这些新特性使得C++更加现代化.高效.易用.也是面试容很容易被问到一个问题,下面我 ...

  4. HMS Core Discovery第15期直播预告|构筑立体世界,共造沉浸式营销

    [导读] AR技术,是一种将真实世界信息和虚拟世界信息"无缝"衔接的技术,现如今AR技术受到日益广泛的关注,在我们生活中发挥着重要的作用,并显示出巨大的潜力--它是如何改变我们观察 ...

  5. Python制作词云--stylecloud简单使用

    安装 pip install stylecloud 使用 from stylecloud import gen_stylecloud gen_stylecloud('zhangsan lisi wan ...

  6. mysql 必知必会整理—触发器[十五]

    前言 现在很多都是程序用于触发的,而不是触发器了. 正文 需要MySQL 5 对触发器的支持是在MySQL 5中增加的.因此,本章内容适用于MySQL 5或之后的版本. MySQL语句在需要时被执行, ...

  7. 重新整理.net core 计1400篇[八] (.net core 中的依赖注入的深入理解)

    生命周期策略 在实例Transient 和 Scoped 中,所以实现Idisposable 接口的服务实例会被当前IServiceProvider 对象保存起来,当IService 对象的Dispo ...

  8. 腾讯音乐:说说Redis脑裂问题?

    Redis 脑裂问题是指,在 Redis 哨兵模式或集群模式中,由于网络原因,导致主节点(Master)与哨兵(Sentinel)和从节点(Slave)的通讯中断,此时哨兵就会误以为主节点已宕机,就会 ...

  9. 力扣686(java)-重复叠加字符串匹配(中等)

    题目: 给定两个字符串 a 和 b,寻找重复叠加字符串 a 的最小次数,使得字符串 b 成为叠加后的字符串 a 的子串,如果不存在则返回 -1. 注意:字符串 "abc" 重复叠加 ...

  10. 力扣640(java)-求解方程(中等)

    题目: 求解一个给定的方程,将x以字符串 "x=#value" 的形式返回.该方程仅包含 '+' , '-' 操作,变量 x 和其对应系数. 如果方程没有解,请返回 "N ...