azure - 段名称需要添加访问签名时如何播放HLS流

标签 azure signature http-live-streaming m3u8

我正在开发一个播放HLS流的媒体播放器APP。我们的视频片段存储在 Azure Blob 存储中。现在就可以播放 HLS 链接了

https://myazure.blob.com/folder/info.m3u8

但问题是,我们希望为所有视频容器及其片段添加共享访问签名(SAS),以保护它们不被公共(public)访问,因此在访问片段时,https 链接需要包含 SAS。例如,当播放名为“out0000.mp4”的片段时,链接应该类似于

https://myazure.blob.com/folder/out0000.mp4?sv=2016-05-31&sr=c&si=SignaturePublicb0&sig=pUKa1i%2F9GdjAj1VhLe%2FVU5NBNig%3D

通过添加SAS来访问info.m3u8就可以了,

https://myazure.blob.com/folder/info.m3u8?sv=2016-05-31&sr=c&si=SignaturePublicb0&sig=pUKa1i%2F9GdjAj1VhLe%2FVU5NBNig%3D

但是在info.m3u8中,格式是这样的

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:YES
#EXTINF:5.100000,
out0000.mp4
#EXTINF:5.000000,
out0001.mp4
#EXTINF:5.000000,
out0002.mp4
#EXTINF:5.000000,
out0003.mp4
...

段名称后面没有 SAS。因此玩家无法访问这些片段并进行播放。

而且我不想更改 info.m3u8 以包含每个段的 SAS。有办法解决这个问题吗?有什么建议么?谢谢。

顺便说一句,我在 Android 中使用 MediaPlayer,在 iOS 中使用 AVPlayer。

最佳答案

遵循HLS原则 您通常有一个链接到的主 m3u8 视频的每个质量版本的manifest.m3u8。 其中每个这样的manifest.m3u8都列出了视频片段,每个片段都带有.ts(传输流)扩展名。 可能存在进一步的划分,例如每个由 list 表示的章节以及每个章节下的质量版本文件夹。 所有 .ts 段都不适合由用户单独访问, 仅来自 m3u8 索引。 每种语言的文件夹等可能会有进一步的安排。 因此,通过将每个 list 和子文件夹与段一起放置 在只有具有 list 文件夹适当访问权限的登录查看者可访问的文件夹中,那么只有这些用户才能 访问内容。 HLS详情请见:https://www.vdocipher.com/blog/2017/08/hls-streaming-hls-encryption-secure-hls-drm/ Amazon Cloudfront 支持使用签名 Cookie 的解决方案: https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-signed-cookies.html

关于azure - 段名称需要添加访问签名时如何播放HLS流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45819649/

相关文章:

azure - Application Insights 报告每个服务器请求的重复事件

function - 关于 Julia 函数参数语法的问题

c++ - 使用 C++11 检查函数签名是否相同?

android - html5 中的 hls 在 android chrome 浏览器中不起作用

c# - 尝试将 Azure Blob 存储 URI 添加到 Azure 存储表时出错

azure - 在azure中重新启动应用程序服务后出现500.30错误

Azure 应用服务计划 - 分钟/天是什么意思?

java - java中的异常或null

ios - 如何在 AVPlayer 中播放 AES-128 加密的 HLS 视频

ios - HLS 'EVENT' 播放列表无法在播放器中启动