前言

公司需求,上传的视频需要加上公司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. #模型转换,动态规划#洛谷 1758 [NOI2009] 管道取珠

    题目 分析 考虑每种情况的方案数平方之和,可以被转换成有两个人同时独立进行该游戏,问最后情况相同的方案数. 那么设 \(dp[i][j][k][o]\) 表示第一个人在上管道拿了 \(i\) 个,下管 ...

  2. 使用脚本整合指定文件/文件夹,执行定制化 ESLint 命令

    背景 最近面对一个庞大的项目,但是只需要修改某个模块,每次都手搓命令太麻烦了,于是就想着能不能写个脚本来辅助处理这些事情. 解决方案 定制化一键 ESLint,执行文件下载地址: https://gi ...

  3. 4步成功将三方库——speexdsp移植到OpenHarmony

     战码先锋,PR征集令(以下简称"战码先锋")第二期正如火如荼地进行中,涉及OpenAtom OpenHarmony(以下简称"OpenHarmony")主干仓 ...

  4. C 语言入门:如何编写 Hello World

    C 语言简介 C 语言是由 Dennis Ritchie 于 1972 年在贝尔实验室创建的一种通用编程语言.尽管年代久远,它仍然是一款非常流行的语言.它之所以受欢迎的主要原因是它是计算机科学领域的基 ...

  5. 掌握 Spring IoC 容器与 Bean 作用域:详解 singleton 与 prototype 的使用与配置

    在您的应用程序中,由 Spring IoC 容器管理的形成其核心的对象被称为 "bean".一个 bean 是由 Spring IoC 容器实例化.组装和管理的对象 这些 bean ...

  6. Redis Pipelining 底层原理分析及实践

    作者:vivo 互联网服务器团队-Wang Fei Redis是一种基于客户端-服务端模型以及请求/响应的TCP服务.在遇到批处理命令执行时,Redis提供了Pipelining(管道)来提升批处理性 ...

  7. HDC2021技术分论坛:鸿蒙智联平台——智能硬件伙伴的最佳拍档

    作者:chengjie,鸿蒙智联生态服务平台运营经理 您在产品开发和运营过程中是否遇到过以下问题: 产品开发千头万绪,无从下手?产品上市后不能清晰地了解消费者的使用情况?用户的意见无法及时传递和答复, ...

  8. ContOS7搭建RAID-5磁盘阵列

    RAID5:分布式奇偶校验的独立磁盘结构 RAID5就是raid0和RAID1的一种折中,既提升了磁盘读写能力,又有一定的容错能力,成本也低: 实验开始: 1.挂载四块5G硬盘 2.进行分区:fdis ...

  9. JavaScript中字符串小知识

    1. 字符串是不可变的 字符串一旦创建就是不可变的,后续的修改都是新建一个新的字符串而不是在原有的字符串上修改 // 在内存中开辟 可以存放五个字母的空间 str指向该空间 let str = 'fi ...

  10. HL7简介

    HL7是特定于医疗保健的标准组织,其主要重点是创建一组定义的国际消息传递标准,以支持应用程序和设备之间的互操作性和通信.这些消息标准可以分为三个主要的 HL7标准版本,HL7版本2(v2).版本3(v ...