0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

MPEG-DASH視頻流中6種最常見的隱患

LiveVideoStack ? 來(lái)源:LiveVideoStack ? 作者:LiveVideoStack ? 2022-05-30 10:32 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群


作為dash.js項(xiàng)目的首席開發(fā)人員,我們經(jīng)常面對(duì)這樣的情況:我們必須評(píng)估DASH傳輸失敗是由dash.js播放器實(shí)現(xiàn)中的實(shí)際bug引起,還是由錯(cuò)誤的內(nèi)容生成引起。在本文中,我們將分享一些在DASH傳輸中出現(xiàn)的常見錯(cuò)誤,以及我們通常在面對(duì)這些錯(cuò)誤時(shí)所總結(jié)的一些見解。

/ DRM的特定問題 /

“想要安全,請(qǐng)使用https”

在播放受到DRM保護(hù)的視頻的時(shí)候,經(jīng)常會(huì)出現(xiàn)一個(gè)與底層應(yīng)用托管有關(guān)的錯(cuò)誤。為了能夠使用EME(加密媒體擴(kuò)展,DRM播放以及與CDM通信時(shí)必須用到的W3C API),Web瀏覽器通常必須使用https。如果使用http調(diào)用應(yīng)用,dash.js將輸出警告:無(wú)法進(jìn)行DRM播放。

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

保護(hù)自己免受保護(hù)

DRM本身是一個(gè)比較復(fù)雜的話題。有一個(gè)顯而易見的事實(shí)是:有三種主要的DRM系統(tǒng),分別是:Google Widevine、Microsoft PlayReady和Apple FairPlay。在Google Chrome和Mozilla Firefox中,需要Widevine才能啟動(dòng)DRM播放,但是老款Edge卻只支持PlayReady。一些設(shè)備(如智能電視或者FireTV)同時(shí)支持Widevine和PlayReady。因此,在特定平臺(tái)試圖播放DRM保護(hù)內(nèi)容之前,我們需要評(píng)估具體平臺(tái)底層對(duì)DRM的功能支持。當(dāng)使用dash.js時(shí),一旦找到并選擇了合適的DRM系統(tǒng),就會(huì)顯示如下輸出:

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

如果某個(gè)平臺(tái)支持多種DRM系統(tǒng),那么定義選擇優(yōu)先級(jí)會(huì)很有用。


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

比如按照上例中的配置,dash.js會(huì)優(yōu)先考慮使用Widewine DRM, 而不是PlayReady。

你可以在之前的博文中了解到更多DRM知識(shí):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:多個(gè)EME版本的許可獲取》(dash.js: License acquisition for multiple EME versions)[1]一文中,我們描述了dash.js 內(nèi)容保護(hù)模型的概念,從中得到的關(guān)鍵點(diǎn)是:dash.js實(shí)現(xiàn)了三種不同版本的EME(被封裝在不同的內(nèi)容保護(hù)模型中)。遺憾的是,很多設(shè)備(向那些“樂于”為智能電視和機(jī)頂盒開發(fā)的人問候)需要定制其中一種保護(hù)模型。在此類設(shè)備上調(diào)試DRM問題時(shí),這件事很值得做:總是檢查EME調(diào)用是否需要被前置或者另做修改。

/播放時(shí)序的特定問題 /

“請(qǐng)保證您的播放器的當(dāng)前播放時(shí)間不要掉出滑動(dòng)窗口”

當(dāng)開發(fā)DASH播放器或者創(chuàng)建DASH MPD時(shí),一個(gè)關(guān)鍵概念是要理解DASH時(shí)序模型。你可以通過閱讀

DASH-IF IOP guidelines[2]DASH-IF implementation guidelines: restricted timing model[3]了解DASH時(shí)序模型。

我們經(jīng)常遇到的一個(gè)問題由視頻流引起,其中可用媒體切片的呈現(xiàn)時(shí)間在時(shí)移緩沖區(qū)之外。當(dāng)給出了帶有 的明確時(shí)間信息時(shí),播放器能夠調(diào)整自身操作。下圖就說(shuō)明了這種調(diào)整:

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

播放器使用 MPD@timeShiftBufferDepth屬性確定DVR窗口。除此之外,從“UTC now”時(shí)間中減去當(dāng)前的即時(shí)直播延遲時(shí)間,就能得到“實(shí)際的DVR窗口時(shí)長(zhǎng)”(比“名義的DVR窗口時(shí)長(zhǎng)”要短)。在直播期間,上層應(yīng)用只能在有效的DVR窗口內(nèi)進(jìn)行播放移動(dòng)。

在上面的示例中,最后一個(gè)可用切片(第5個(gè)切片)的呈現(xiàn)結(jié)束時(shí)間在DVR窗口之外。在這種情況下,播放器將找不到可供下載和播放的切片。在這種情況下,dash.js可以將anchor time(基準(zhǔn)時(shí)間)調(diào)整到最近已播放切片的presentation end time(該切片的呈現(xiàn)截止時(shí)間),從而得出用于計(jì)算有效DVR窗口的調(diào)整值,以避免播放停頓。該功能通過調(diào)整設(shè)置參數(shù)實(shí)現(xiàn),如下所示:


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

使用Offset避免Upset

為了能夠在DASH視頻流中插入廣告,MPD經(jīng)常使用多種分段時(shí)間。讓我們來(lái)看一個(gè)非常簡(jiǎn)單的示例:我們想向主要內(nèi)容(main content)添加一個(gè)中貼片廣告。

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

這種情況下,我們?cè)谇袚Q為廣告內(nèi)容前,先播放8秒主要內(nèi)容。廣告結(jié)束后,我們重新播放主要內(nèi)容。所有分段持續(xù)時(shí)間總和構(gòu)成了18秒媒體呈現(xiàn)持續(xù)時(shí)間。

為了將視頻切片對(duì)應(yīng)到媒體緩沖區(qū)中的目標(biāo)位置,MSE對(duì)切片的內(nèi)部呈現(xiàn)時(shí)間戳(既最早的呈現(xiàn)時(shí)間EPT,Earliest Presentation Time)添加了可配置的timestampOffset。因此,應(yīng)用可以通過調(diào)整timestampOffset控制切片在緩沖區(qū)中的位置。

現(xiàn)在,以上所述對(duì)我們的示例而言又有什么意義呢?讓我們假設(shè)主要內(nèi)容中的第一個(gè)切片和廣告內(nèi)容中的第一個(gè)切片的EPT為0。在DASH視頻流中,一個(gè)切片的呈現(xiàn)時(shí)間與其分段時(shí)間的開始有關(guān)。如果我們僅僅將每個(gè)切片的MSE.timestampOffset設(shè)置為每個(gè)分段時(shí)間的起始時(shí)間會(huì)發(fā)生什么?如下所示:分段時(shí)間1和分段時(shí)間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

但問題出現(xiàn)在分段時(shí)間3。因?yàn)槲覀儚牡?個(gè)切片開始,EPT沒有設(shè)置為0。


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

沒有將分段時(shí)間3的第一個(gè)切片定位在媒體呈現(xiàn)時(shí)間線中的第12秒,而是在第20秒時(shí)結(jié)束了。幸運(yùn)的是,有一個(gè)方法很容易解決剛剛的問題:在MPD中,我們可以為每個(gè)時(shí)間段分配一個(gè)單獨(dú)的@presentationTimeOffset (注意:在此示例中,我們做了一些簡(jiǎn)化處理)。

在MPD中,對(duì)于每個(gè) Representation而言,@presentationTimeOffset都不同。dash.js 使用@presentationTimeOffset來(lái)計(jì)算 MSE.timestampOffset。我們將@presentationTimeOffset的值設(shè)置為該時(shí)段中第一個(gè)切片的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 

現(xiàn)在所有切片都處在媒體緩沖區(qū)的正確位置,我們終于得到了一個(gè)連續(xù)的媒體呈現(xiàn)時(shí)間線。

關(guān)注緩沖——前方空隙

基于MSE的播放器有一個(gè)大問題,那就是時(shí)間線中的時(shí)間空隙。大部分MSE實(shí)現(xiàn)無(wú)法處理這種情況,因?yàn)槠渲械拿襟w緩沖并不連續(xù),而且一旦播放位置到達(dá)空隙,緩沖就會(huì)停止。那么當(dāng)我們?cè)谟懻摽障兑约爱a(chǎn)生空隙的原因時(shí),到底意味著什么?從我們的經(jīng)驗(yàn)來(lái)看,空隙主要由以下兩個(gè)原因引起:

  • 后續(xù)時(shí)間段沒有對(duì)齊,結(jié)果時(shí)間段邊界處的切片也無(wú)法對(duì)齊。

  • 切片中的總媒體樣本持續(xù)時(shí)間短于其呈現(xiàn)持續(xù)時(shí)間所指示的時(shí)間。

最終就導(dǎo)致了如下情況的發(fā)生:

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

在這種情況下,切片1和切片2完美對(duì)齊,然而切片2和切片3之間有一個(gè)空隙。為了避免出現(xiàn)播放停止,dash.js會(huì)適時(shí)啟用一個(gè)復(fù)雜的空隙跳轉(zhuǎn)機(jī)制??梢酝ㄟ^如下設(shè)置啟用和配置該機(jī)制:

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

/ 結(jié)語(yǔ) /

本篇文章中,我們分享了MPEG-DASH視頻流中6種最常見的隱患。

當(dāng)播放受到DRM保護(hù)的視頻時(shí),我們強(qiáng)調(diào)需要https,并概括了使用特定DRM系統(tǒng)平臺(tái)的重要性。除此之外,我們推動(dòng)了實(shí)現(xiàn)EME舊版本的需求。

MPEG-DASH的時(shí)序模型并不容易理解。錯(cuò)誤的DVR窗口會(huì)導(dǎo)致播放停止和失敗。在多時(shí)段廣告插入的背景下,使用MPD的具體屬性將時(shí)間段對(duì)齊以避免媒體緩沖的不連續(xù)很重要。此外,當(dāng)MSE實(shí)現(xiàn)無(wú)法處理媒體緩沖中的空隙時(shí),應(yīng)避免媒體時(shí)間線中的空隙。

dash.js播放器能夠處理大部分以上情況,并幫助識(shí)別和解決此類問題。

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 視頻傳輸
    +關(guān)注

    關(guān)注

    3

    文章

    110

    瀏覽量

    21276
  • DRM
    DRM
    +關(guān)注

    關(guān)注

    0

    文章

    46

    瀏覽量

    15349

原文標(biāo)題:MPEG-DASH視頻傳輸中的常見問題

文章出處:【微信號(hào):livevideostack,微信公眾號(hào):LiveVideoStack】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 0人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    FCX3上的視頻亂碼怎么解決?

    我們?cè)谑褂?CX3 和 1.3.5 EzUSB SDK 運(yùn)行視頻傳感器時(shí)遇到了一些間歇性問題。 打開視頻任意時(shí)間后,視頻似乎已損壞,就像
    發(fā)表于 05-16 07:32

    ESD防護(hù)設(shè)計(jì)的10個(gè)常見誤區(qū),你中招了嗎?

    在現(xiàn)代電子產(chǎn)品,ESD(靜電放電)防護(hù)已成為設(shè)計(jì)不可忽視的一環(huán)。然而,即便是經(jīng)驗(yàn)豐富的工程師,也常會(huì)在ESD設(shè)計(jì)掉進(jìn)一些看似“理所當(dāng)然”的誤區(qū)。以下總結(jié)了10個(gè)在實(shí)際設(shè)計(jì)中最常見
    的頭像 發(fā)表于 04-24 09:51 ?303次閱讀
    ESD防護(hù)設(shè)計(jì)<b class='flag-5'>中</b>的10個(gè)<b class='flag-5'>常見</b>誤區(qū),你中招了嗎?

    高頻應(yīng)用快恢復(fù)二極管的質(zhì)量隱患有哪些?

    快恢復(fù)二極管作為現(xiàn)代電力電子系統(tǒng)的核心元件,廣泛應(yīng)用于變頻器、UPS 電源及新能源變裝置等關(guān)鍵設(shè)備。然而該器件在長(zhǎng)期運(yùn)行暴露出的質(zhì)量缺陷可能引發(fā)系統(tǒng)故障,本文將系統(tǒng)分析其常見質(zhì)量隱患
    的頭像 發(fā)表于 04-12 14:56 ?177次閱讀
    高頻應(yīng)用<b class='flag-5'>中</b>快恢復(fù)二極管的質(zhì)量<b class='flag-5'>隱患</b>有哪些?

    方案大全

    方案大全恒流源是電路中廣泛使用的一個(gè)組件,這里我整理一下比較常見的恒流源的結(jié)構(gòu)和特點(diǎn)。恒流源分為流出(Current Source)和流入(Current Sink)兩形式。最簡(jiǎn)單的恒流源
    發(fā)表于 03-12 14:50

    不懂DFM?設(shè)計(jì)隱患終成 “雷”!

    ,支持Altium、PADS、Allegro等多種常見格式 ,操作簡(jiǎn)單便捷,即使是新手工程師也能快速上手。 3、全鏈路集成 從 分析設(shè)計(jì)隱患到在線下單、BOM配單 ,一站式解決設(shè)計(jì)與制造脫節(jié)
    發(fā)表于 02-25 15:53

    k230如何將yolo分類視頻推理后的視頻結(jié)果保存到本地?

    請(qǐng)問k230如何將yolo分類視頻推理后的視頻結(jié)果保存到本地?
    發(fā)表于 02-08 08:09

    X平臺(tái)推出短視頻信息流,瞄準(zhǔn)美國(guó)TikTok用戶

    的軟件,用戶將在底部菜單欄里看到一個(gè)新增的視頻標(biāo)簽。只需輕輕一點(diǎn),用戶便能進(jìn)入短視頻信息流,享受上滑屏幕翻閱系統(tǒng)推薦的其他短視頻的便捷體驗(yàn)。 與TikTok等短
    的頭像 發(fā)表于 01-22 10:36 ?599次閱讀

    變頻器過(OC)故障維修及案例分析

    ? ? ? 變頻器作為現(xiàn)代工業(yè)控制的關(guān)鍵設(shè)備,其穩(wěn)定運(yùn)行對(duì)于保障生產(chǎn)線的連續(xù)性和效率至關(guān)重要。然而,在實(shí)際應(yīng)用,變頻器故障時(shí)有發(fā)生,其中過(OC)故障是最常見且影響較為嚴(yán)重的一
    的頭像 發(fā)表于 12-13 07:34 ?1730次閱讀
    變頻器過<b class='flag-5'>流</b>(OC)故障維修及案例分析

    DVI在高清視頻傳輸的優(yōu)勢(shì) DVI接口的常見問題解決

    DVI(Digital Visual Interface,數(shù)字視覺接口)在高清視頻傳輸具有顯著優(yōu)勢(shì),并且針對(duì)DVI接口的常見問題,也有一系列有效的解決方法。 DVI在高清視頻傳輸
    的頭像 發(fā)表于 12-11 15:50 ?1907次閱讀

    常見視頻接口的優(yōu)勢(shì)與劣勢(shì)

    和局限性。 常見視頻接口 1. VGA(Video Graphics Array) 優(yōu)勢(shì): 兼容性強(qiáng): VGA接口是最早的模擬視頻接口之一,至今仍被廣泛使用,尤其是在一些老舊的顯示器和投影儀上。 成本
    的頭像 發(fā)表于 10-30 16:14 ?1095次閱讀

    直流充電樁使用中有哪些電氣安全隱患及解決方案

    充電樁。然而,在充電樁的日常使用,一些潛在的安全隱患也逐漸浮出水面,這些隱患有可能對(duì)人們的生命與財(cái)產(chǎn)安全構(gòu)成嚴(yán)重威脅。因此,深刻認(rèn)識(shí)并了解這些常見的充電樁安全
    的頭像 發(fā)表于 10-30 15:22 ?1004次閱讀
    直流充電樁使用中有哪些電氣安全<b class='flag-5'>隱患</b>及解決方案

    常見視頻接口有哪些

    。它是一被廣泛使用的視頻接口標(biāo)準(zhǔn),也叫做基帶視頻或RCA視頻。CVBS接口以模擬波形來(lái)傳輸數(shù)據(jù),包含色差(色調(diào)和飽和度)和亮度(光亮)信息,并將它們同步在消隱脈沖
    的頭像 發(fā)表于 10-09 15:58 ?3024次閱讀

    盤點(diǎn)那些常見視頻接口

    我們熟知的一些常見視頻接口,發(fā)展至今在日常使用已經(jīng)漸漸少了。但是在工業(yè)領(lǐng)域的音視頻連接,依然能看到其身影。這些看似消失的接口,它們現(xiàn)在發(fā)展成什么樣子了?本期我們將做一個(gè)大盤點(diǎn)。
    的頭像 發(fā)表于 09-09 14:34 ?1154次閱讀

    嵌入式五常見模擬電路

    在嵌入式系統(tǒng)設(shè)計(jì),模擬電路是不可或缺的一部分。它們負(fù)責(zé)處理真實(shí)世界的信號(hào),如聲音、溫度、壓力等,并將這些信號(hào)轉(zhuǎn)換成數(shù)字信號(hào),或者對(duì)這些信號(hào)進(jìn)行放大、濾波等處理。以下是五常見的模擬
    發(fā)表于 08-28 15:31

    ASI信號(hào)和SDI信號(hào)的區(qū)別

    為Asynchronous Serial Interface,即異步串行接口,是一用于傳送碼的標(biāo)準(zhǔn)接口,尤其在DVB(Digital Video Broadcasting,數(shù)字視頻廣播)系統(tǒng)中常用于
    的頭像 發(fā)表于 08-20 14:27 ?4790次閱讀

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品