前言

公司需求,上传的视频需要加上公司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. Matplotlib绘图设置---坐标轴刻度和标签设置

    每个axes对象都有xaxis和yaxis属性,且xaxis和yaxis的每一个坐标轴都有主要刻度线/标签和次要刻度线/标签组成,标签位置通过一个Locator对象设置,标签格式通过一个Formatt ...

  2. 学习Source Generators之打包成Nuget使用

    前面我们简单的实现了一个从swagger生成实体类的Generator,在实际使用中,通过nuget包引用使用会更方便,那么本篇文章将介绍如何将Generator打包成Nuget来使用. 打包Nuge ...

  3. HarmonyOS:使用MindSpore Lite引擎进行模型推理

      场景介绍 MindSpore Lite是一款AI引擎,它提供了面向不同硬件设备AI模型推理的功能,目前已经在图像分类.目标识别.人脸识别.文字识别等应用中广泛使用. 本文介绍使用MindSpore ...

  4. jenkins 持续集成和交付——一个java构件小栗子(四)

    前言 介绍一下java 构建的小栗子. 正文 maven 管理 java 是用maven 管理包的,那么我们是要安装maven的. 还是那句话,安装这种东西呢,去官网下载然后自己安装,不要用yum a ...

  5. winform之在主窗体中不显示子窗体的菜单栏

    在MDi窗体嵌入子窗体后不显示菜单栏 背景: 由于之前做的一个程序的功能全部都是放在一个界面上的,有一个功能能够在数据库查询数据,并返回到界面上,数据量比较小的时候还好,但是数据量多了,导致它阻塞的其 ...

  6. ASP.NET Core Web API下基于Keycloak的多租户用户授权的实现

    在上文<Keycloak中授权的实现>中,以一个实际案例介绍了Keycloak中用户授权的设置方法.现在回顾一下这个案例: 服务供应商(Service Provider)发布/Weathe ...

  7. Oracle 在PL/SQL将字符串分割输出

    Oracle 在PL/SQL将字符串分割输出 示例如下: declare begin for maina in (select tt.line ll from (select regexp_subst ...

  8. 力扣41(java)-缺失的第一个正数(困难)

    题目: 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数. 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案. 示例 1: 输入:nums = [1,2,0 ...

  9. 力扣217(java&python)-存在重复元素(简单)

    题目: 给你一个整数数组 nums .如果任一值在数组中出现 至少两次 ,返回 true :如果数组中每个元素互不相同,返回 false . 示例 1: 输入:nums = [1,2,3,1]输出:t ...

  10. 【视频特辑】提效神器!如何用Quick BI高效配置员工的用数权限

    ​简介:随着企业数字化进程逐步加速,企业所产生和积累的数据资源日益增多.每当员工的用数权限发生变动,管理员都需要进行复杂繁琐的重复性配置流程,不仅耗时耗力还容易出错. 如何能便捷地对员工用数权限进行高 ...