0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MPEG-DASH视频流中6种最常见的隐患

LiveVideoStack 来源:LiveVideoStack 作者:LiveVideoStack 2022-05-30 10:32 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群


作为dash.js项目的首席开发人员,我们经常面对这样的情况:我们必须评估DASH传输失败是由dash.js播放器实现中的实际bug引起,还是由错误的内容生成引起。在本文中,我们将分享一些在DASH传输中出现的常见错误,以及我们通常在面对这些错误时所总结的一些见解。

/ DRM的特定问题 /

“想要安全,请使用https”

在播放受到DRM保护的视频的时候,经常会出现一个与底层应用托管有关的错误。为了能够使用EME(加密媒体扩展,DRM播放以及与CDM通信时必须用到的W3C API),Web浏览器通常必须使用https。如果使用http调用应用,dash.js将输出警告:无法进行DRM播放。

No supported version of EME detected on this user agent! - Attempts to play encrypted content will fail!

保护自己免受保护

DRM本身是一个比较复杂的话题。有一个显而易见的事实是:有三种主要的DRM系统,分别是:Google Widevine、Microsoft PlayReady和Apple FairPlay。在Google Chrome和Mozilla Firefox中,需要Widevine才能启动DRM播放,但是老款Edge却只支持PlayReady。一些设备(如智能电视或者FireTV)同时支持Widevine和PlayReady。因此,在特定平台试图播放DRM保护内容之前,我们需要评估具体平台底层对DRM的功能支持。当使用dash.js时,一旦找到并选择了合适的DRM系统,就会显示如下输出:

DRM: KeySystem Access Granted (com.widevine.alpha)!

如果某个平台支持多种DRM系统,那么定义选择优先级会很有用。


{    "com.widevine.alpha": {        "serverURL": "someurl",        "priority": 1    },    "com.microsoft.playready": {        "serverURL": "someurl",        "priority": 2    }}

比如按照上例中的配置,dash.js会优先考虑使用Widewine DRM, 而不是PlayReady。

你可以在之前的博文中了解到更多DRM知识:https://websites.fraunhofer.de/video-dev/enabling-hardware-drm-on-android-chrome-using-the-encrypted-media-extensions/

https://websites.fraunhofer.de/video-dev/dash-js-license-acquisition-for-multiple-eme-versions/

模式化一切

在《dash.js:多个EME版本的许可获取》(dash.js: License acquisition for multiple EME versions)[1]一文中,我们描述了dash.js 内容保护模型的概念,从中得到的关键点是:dash.js实现了三种不同版本的EME(被封装在不同的内容保护模型中)。遗憾的是,很多设备(向那些“乐于”为智能电视和机顶盒开发的人问候)需要定制其中一种保护模型。在此类设备上调试DRM问题时,这件事很值得做:总是检查EME调用是否需要被前置或者另做修改。

/播放时序的特定问题 /

“请保证您的播放器的当前播放时间不要掉出滑动窗口”

当开发DASH播放器或者创建DASH MPD时,一个关键概念是要理解DASH时序模型。你可以通过阅读

DASH-IF IOP guidelines[2]DASH-IF implementation guidelines: restricted timing model[3]了解DASH时序模型。

我们经常遇到的一个问题由视频流引起,其中可用媒体切片的呈现时间在时移缓冲区之外。当给出了带有 的明确时间信息时,播放器能够调整自身操作。下图就说明了这种调整:

2ce061c4-dfae-11ec-ba43-dac502259ad0.png

播放器使用 MPD@timeShiftBufferDepth属性确定DVR窗口。除此之外,从“UTC now”时间中减去当前的即时直播延迟时间,就能得到“实际的DVR窗口时长”(比“名义的DVR窗口时长”要短)。在直播期间,上层应用只能在有效的DVR窗口内进行播放移动。

在上面的示例中,最后一个可用切片(第5个切片)的呈现结束时间在DVR窗口之外。在这种情况下,播放器将找不到可供下载和播放的切片。在这种情况下,dash.js可以将anchor time(基准时间)调整到最近已播放切片的presentation end time(该切片的呈现截止时间),从而得出用于计算有效DVR窗口的调整值,以避免播放停顿。该功能通过调整设置参数实现,如下所示:


player.updateSettings({   streaming:     {     calcSegmentAvailabilityRangeFromTimeline: true    }})

使用Offset避免Upset

为了能够在DASH视频流中插入广告,MPD经常使用多种分段时间。让我们来看一个非常简单的示例:我们想向主要内容(main content)添加一个中贴片广告。

2d133fa4-dfae-11ec-ba43-dac502259ad0.png

这种情况下,我们在切换为广告内容前,先播放8秒主要内容。广告结束后,我们重新播放主要内容。所有分段持续时间总和构成了18秒媒体呈现持续时间。

为了将视频切片对应到媒体缓冲区中的目标位置,MSE对切片的内部呈现时间戳(既最早的呈现时间EPT,Earliest Presentation Time)添加了可配置的timestampOffset。因此,应用可以通过调整timestampOffset控制切片在缓冲区中的位置。

现在,以上所述对我们的示例而言又有什么意义呢?让我们假设主要内容中的第一个切片和广告内容中的第一个切片的EPT为0。在DASH视频流中,一个切片的呈现时间与其分段时间的开始有关。如果我们仅仅将每个切片的MSE.timestampOffset设置为每个分段时间的起始时间会发生什么?如下所示:分段时间1和分段时间2没有问题。


--- Period 1 ---MSE.timestampOffset = Period@start = 0BufferPosition(Seg 1) = MSE.timestampOffset + EPT = 0 + 0 = 0 BufferPosition(Seg 4) = MSE.timestampOffset + EPT = 0 + 6 = 6 --- Period 2 --- MSE.timestampOffset = Period@start = 8BufferPosition(Seg 1) = MSE.timestampOffset + EPT = 8 + 0 = 8 BufferPosition(Seg 2) = MSE.timestampOffset + EPT = 8 + 2 = 10

但问题出现在分段时间3。因为我们从第5个切片开始,EPT没有设置为0。


--- Period 3 ---MSE.timestampOffset = Period@start = 12BufferPosition(Seg 5) = MSE.timestampOffset + EPT = 12 + 8 = 20 

没有将分段时间3的第一个切片定位在媒体呈现时间线中的第12秒,而是在第20秒时结束了。幸运的是,有一个方法很容易解决刚刚的问题:在MPD中,我们可以为每个时间段分配一个单独的@presentationTimeOffset (注意:在此示例中,我们做了一些简化处理)。

在MPD中,对于每个 Representation而言,@presentationTimeOffset都不同。dash.js 使用@presentationTimeOffset来计算 MSE.timestampOffset。我们将@presentationTimeOffset的值设置为该时段中第一个切片的EPT:


--- Period 3 ---MSE.timestampOffset = Period@start - @presentationTimeOffset = 12 - 8 = 4BufferPosition(Seg 5) = MSE.timestampOffset + EPT = 4 + 8 = 12 BufferPosition(Seg 6) = MSE.timestampOffset + EPT = 4 + 10 = 14 

现在所有切片都处在媒体缓冲区的正确位置,我们终于得到了一个连续的媒体呈现时间线。

关注缓冲——前方空隙

基于MSE的播放器有一个大问题,那就是时间线中的时间空隙。大部分MSE实现无法处理这种情况,因为其中的媒体缓冲并不连续,而且一旦播放位置到达空隙,缓冲就会停止。那么当我们在讨论空隙以及产生空隙的原因时,到底意味着什么?从我们的经验来看,空隙主要由以下两个原因引起:

  • 后续时间段没有对齐,结果时间段边界处的切片也无法对齐。

  • 切片中的总媒体样本持续时间短于其呈现持续时间所指示的时间。

最终就导致了如下情况的发生:

2d6b2462-dfae-11ec-ba43-dac502259ad0.png

在这种情况下,切片1和切片2完美对齐,然而切片2和切片3之间有一个空隙。为了避免出现播放停止,dash.js会适时启用一个复杂的空隙跳转机制。可以通过如下设置启用和配置该机制:

player.updateSettings({   streaming:     {            jumpGaps: true,            jumpLargeGaps: true,            smallGapLimit: 1.5,    }})

/ 结语 /

本篇文章中,我们分享了MPEG-DASH视频流中6种最常见的隐患。

当播放受到DRM保护的视频时,我们强调需要https,并概括了使用特定DRM系统平台的重要性。除此之外,我们推动了实现EME旧版本的需求。

MPEG-DASH的时序模型并不容易理解。错误的DVR窗口会导致播放停止和失败。在多时段广告插入的背景下,使用MPD的具体属性将时间段对齐以避免媒体缓冲的不连续很重要。此外,当MSE实现无法处理媒体缓冲中的空隙时,应避免媒体时间线中的空隙。

dash.js播放器能够处理大部分以上情况,并帮助识别和解决此类问题。

审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 视频传输
    +关注

    关注

    3

    文章

    138

    浏览量

    21644
  • DRM
    DRM
    +关注

    关注

    0

    文章

    48

    浏览量

    15660

原文标题:MPEG-DASH视频传输中的常见问题

文章出处:【微信号:livevideostack,微信公众号:LiveVideoStack】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    开源:Air8101 硬件平台 RTMP 视频实现

    Air8101是支持2.4G WIFI6和蓝牙(BLE 5.4)的 WiFi SoC,最大支持 200W 像素的静态图像拍照,支持1024*720分辨率的10寸屏显示,同时兼容DVP/USB摄像头即插即用,支持多路视频采集及RTMP推
    的头像 发表于 04-21 14:27 436次阅读
    开源:Air8101 硬件平台 RTMP <b class='flag-5'>视频</b>推<b class='flag-5'>流</b>实现

    Renesas ICS662 - 03:HDTV音频/视频时钟源的卓越之选

    HDTV音频/视频时钟源,看看它如何为我们的设计带来便利和高性能。 文件下载: 662M-03LFT.pdf 一、产品概述 ICS662 - 03主要为从HDTV中派生的音频采样时钟速率提供同步时钟生成
    的头像 发表于 04-12 13:50 431次阅读

    芯片烧录总是出错?常见 6 个问题及解决办法

    做电子生产和 SMT 贴片的朋友,经常会遇到芯片烧录不稳定、报错、漏烧、错烧等问题。今天结合我们做烧录机多年的经验,总结一下最常见的原因和解决思路,欢迎同行交流。 常见 6 个问题及解决办法: 1.
    的头像 发表于 04-10 15:30 197次阅读
    芯片烧录总是出错?<b class='flag-5'>常见</b> <b class='flag-5'>6</b> 个问题及解决办法

    高压变频器最常见的用途有哪些?

    延长设备使用寿命。以下是高压变频器最常见的几类用途及其技术特点的详细分析: 一、电力行业的革命性应用 在火力发电厂,高压变频器主要应用于锅炉给水泵、引风机、送风机等关键设备。以某600MW机组为例,采用高压变频器
    的头像 发表于 03-07 07:33 599次阅读
    高压变频器<b class='flag-5'>最常见</b>的用途有哪些?

    临时用电有哪些常见安全隐患?提供用电安全解决方案

    为进一步加强全市限额以下小型房屋建筑工程安全生产管理,依据相关法律法规和标准,梳理了管理 通用要求 和 常见安全隐患 。今天发布常见安全隐患的第二篇—— 临时用电 施工现场
    的头像 发表于 01-13 17:12 1215次阅读
    临时用电有哪些<b class='flag-5'>常见</b>安全<b class='flag-5'>隐患</b>?提供用电安全解决方案

    嵌入式程序设计4常用模式

    1. 模板方法模式 模板方法模式是框架中最常用的设计模式。 其根本的思路是将算法由框架固定,而将算法具体的操作交给二次开发者实现。 例如一个设备初始化的逻辑,框架代码如下: TBool
    发表于 12-25 07:12

    Termux手机摄像头采集图像/视频 部署 YOLO 模型推理

    Termux手机摄像头采集图像/视频 部署 YOLO 模型推理
    的头像 发表于 12-14 07:26 3292次阅读

    RK3576轻松搭建RTMP视频,基于FFmpeg+Nginx协同

    延迟+稳定推。推端负责将视频数据通过RTMP流媒体协议传输给RTMP流媒体服务器;拉端从流媒体服务器通过RTMP协议获取到
    的头像 发表于 12-11 17:17 1241次阅读
    RK3576轻松搭建RTMP<b class='flag-5'>视频</b>推<b class='flag-5'>流</b>,基于FFmpeg+Nginx协同

    ‌MX-DaSH线对板连接器系统技术解析与应用指南

    Molex MX-DaSH线对线连接器系统通过将电源、接地电路和高速数据连接集成到一个连接器系统来优化汽车线束。该连接器系统降低了汽车和商用车辆应用的重量、尺寸和成本要求。MX-DaSH系列支持向
    的头像 发表于 11-17 11:51 1144次阅读
    ‌MX-<b class='flag-5'>DaSH</b>线对板连接器系统技术解析与应用指南

    Jtti Linux操作系统最常见的10大优势

    。以下是Linux操作系统最常见的十大优势: 1. 开源自由 ? Linux的开源性质是其最大的优势之一。任何人都可以自由地查看、修改和分发其源代码。这意味着用户不仅可以根据自己的需求进行定制,还可以避免被锁定在某些专有软件的限制。Linux的自由
    的头像 发表于 11-06 15:32 448次阅读

    散热路径的工艺与应用解析

    背景:两常见的散热设计思路 在大电流或高功率器件应用,散热和载能力是PCB设计必须解决的难题。
    的头像 发表于 09-15 14:50 965次阅读

    如何保存al视频的一帧照片?

    如何保存al视频的一帧照片
    发表于 07-11 08:07

    贴片晶振常见封装介绍

    贴片晶体振荡器作为关键的时钟频率元件,其性能直接关系到系统运行的稳定性。今天,凯擎小妹带大家聊聊贴片晶振常见封装——金属面封装与陶瓷面封装。
    的头像 发表于 07-04 11:29 1489次阅读
    贴片晶振<b class='flag-5'>中</b>两<b class='flag-5'>种</b><b class='flag-5'>常见</b>封装介绍

    FCX3上的视频乱码怎么解决?

    我们在使用 CX3 和 1.3.5 EzUSB SDK 运行视频传感器时遇到了一些间歇性问题。 打开视频任意时间后,视频似乎已损坏,就像
    发表于 05-16 07:32

    ESD防护设计的10个常见误区,你中招了吗?

    在现代电子产品,ESD(静电放电)防护已成为设计不可忽视的一环。然而,即便是经验丰富的工程师,也常会在ESD设计掉进一些看似“理所当然”的误区。以下总结了10个在实际设计中最常见
    的头像 发表于 04-24 09:51 1186次阅读
    ESD防护设计<b class='flag-5'>中</b>的10个<b class='flag-5'>常见</b>误区,你中招了吗?