色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

為什么需要畫面幀的準確性?如何探究畫面幀的準確性

LiveVideoStack ? 來源:LiveVideoStack ? 2023-03-17 09:33 ? 次閱讀

背景

分秒幀是一個音視頻生產協作平臺,其中用戶可以通過在視頻的某個時間點提出意見或分享來溝通對視頻的修改意見。由于客戶有時需要對時間精確到幀進行定位,我們需要保證不同轉碼視頻在播放時,時間定位能夠精確到毫秒級別。在滿足這一要求的同時,我們還必須考慮不同網絡條件、不同端和不同使用場景。我們在解決這些問題的過程中發現了一些問題,本文將對這些問題進行討論。

為什么需要畫面幀的準確性?

當用戶發送批注需要審閱者根據批注意見做出修改時,如果沒有畫面校準,此時審閱者一臉黑人問號, 哪來的“T” ? 然后再私下溝通嗎?信息存在誤差, 審閱批注就毫無意義。

問題一:保證瀏覽器中 Video 標簽時間定位在 pause 時的準確性

當用戶在播放視頻時暫停,并對視頻進行批注,然后繼續播放時,有時會發現定位回原始批注時間點時畫面會有一幀的偏差。這是因為,我們在暫停時記錄了視頻的當前時間(即 currentTime)并通過 seek() 方法回到該時間點,但是這個方法并不能保證回到的畫面完全準確。

現象

暫停批注時 沒有矯正currentTime,當批注發送成功后,自動跳回批注點,畫面發生了變化,以下是用戶所不想看到的畫面:

JS代碼如下:

JavaScript
var videoDom =  document.getElementsByTagName('video')[0]
videoDom.pause()
var currenttime = videoDom.currentTime
videoDom.currentTime = currentTime // 此時畫面有概率發生改變

問題產生原因

我們在解決這個問題時發現,這個問題是由 JavaScript 執行機制導致的。在瀏覽器中,JavaScript 是單線程執行的。當我們調用 pause 方法時,實際上是將該操作添加到了事件隊列中。當事件輪詢到這個暫停操作時,才會真正執行 pause 方法。而在這個過程中,獲取 currentTime 的操作已經完成了。這就導致了兩個操作之間的時間差。如果這個時間差恰好發生在視頻幀切換的時候,就會導致畫面偏差一幀。

舉個例子,如果一個視頻有 25 幀,那么第 0-40ms 是第一幀畫面,第 41-80ms是第二幀畫面,以此類推。

bf6249b0-c421-11ed-bfe3-dac502259ad0.jpg

當用戶在播放第一幀畫面時按下暫停按鈕,我們認為JavaScript 會立即執行邏輯并通知 Video 標簽停止播放,但實際上暫停操作會被加入事件隊列中等待執行。如果暫停操作前面還有其他事件正在排隊,等執行到暫停操作時就會有一定的時間差。如果這個時間差恰好發生在第 41 ms,畫面會跳到下一幀畫面。但是,我們拿到的currentTime還是第一幀畫面的。

解決方案

為了確保在暫停時和查看批注時 currentTime 的一致性,我們在暫停時對 currentTime 進行了矯正。這樣,當用戶暫停時進行批注,然后再設置 currentTime查看批注時,就不會出現畫面偏差問題。通過這種方式,我們就能保證畫面在暫停時和查看批注時的準確性。

問題二:HLS流中視頻 duration 值變化異常

在我們的應用中,我們需要確保各端的視頻總時長和總幀數一致。為了實現這個目的,我們通常會在瀏覽器 Video 標簽的 durationchange 事件觸發時獲取視頻總時長,并通過幀率計算出總幀數。durationchange 事件是當視頻總時長發生改變時觸發的。當視頻加載前,總時長為默認值"NaN",當視頻加載完成后,durationchange 事件觸發,總時長會變成視頻的實際總時長。

在加載和播放視頻時,瀏覽器會用Video標簽來追蹤視頻的狀態。共有五個狀態,分別是:[1]。

Constant Value Description
HAVE_NOTHING 0 沒有關于音頻/視頻是否就緒的信息
HAVE_METADATA 1 音頻/視頻已初始化
HAVE_CURRENT_DATA 2 數據已經可以播放 (當前位置已經加載) 但沒有數據能播放下一幀的內容
HAVE_FUTURE_DATA 3 當前及至少下一幀的數據是可用的 (換句話來說至少有兩幀的數據)
HAVE_ENOUGH_DATA 4 可用數據足以開始播放 - 如果網速得到保障 那么視頻可以一直播放到底

在視頻加載和播放過程中,瀏覽器Video標簽的 readyState 會發生變化。在這個過程中,MP4文件和HLS文件的 duration 變更時機是不同的。

MP4

在 MP4 文件的加載過程中,durationchange 事件會在資源開始加載(loadstart)之后,在元數據已加載(loadedmetadata)之前觸發。此時,瀏覽器會解析 MP4 文件中的 moov box,并獲取視頻時長。因此,在 durationchange 事件觸發時,可以獲取到較為準確的 duration 。

HLS

我們發現在加載 HLS 流時,瀏覽器 video 標簽的 duration 會發生多次變更。

第一次變更在loadstart之后 loadedmetadata 之前 并且 readyState === 0 時調用,此時已拿到相對準確的 duration,≈ ffmpeg取到的 durantion。

舉個例子,ffmpeg截圖如下:

bf7d369e-c421-11ed-bfe3-dac502259ad0.png

第二次變更在loadstart之后 loadedmetadata 之前 并且 readyState === 1 時調用,此時拿到的時長由 m3u8 文件解析得到。

第三次變更在加載到最后一片 ts 時調用。我們發現這三次變更的時長并不一致。因此我們需要在這三次變更中取一個更準確的時長作為視頻時長。

舉個例子,三次時長比較:

bf8fec9e-c421-11ed-bfe3-dac502259ad0.png

HLS三次取值時長不一致的原因

第一次:在loadstart后loadedmetadata前readyState === 0時調用,視頻的實際時長已被解析出來,時機和機制類似于MP4文件(第一次調用時就可以獲取到duration的值)。

第二次:在loadstart后loadedmetadata前readyState === 1時調用,hls.js解析完m3u8索引文件并通過#EXTINF計算出視頻的實際時長。

舉個例子,以下是一個m3u8文件信息:

bfa42916-c421-11ed-bfe3-dac502259ad0.png

第三次:當加載完最后一片ts 此時所有音頻和視頻幀信息已經可以全部拿到。

舉個例子,以下是幀信息:

c01755c6-c421-11ed-bfe3-dac502259ad0.png

c04acae6-c421-11ed-bfe3-dac502259ad0.png

c0a53a08-c421-11ed-bfe3-dac502259ad0.png

c0ba96f0-c421-11ed-bfe3-dac502259ad0.png

best_effort_timestamp_time :媒體流中的一個標識符,用于標識每一幀的時間戳。

pkt_duration_time :媒體流中的一個標識符,用于標識每一幀的持續時間。

通常,best_effort_timestamp_time 和 pkt_duration_time 會用在音視頻同步、流量控制、緩存等方面。

尾音頻/視頻信息中的 best_effort_timestamp_time 和 pkt_duration_time 可用來計算音頻/視頻的結束時長。在這個案例中,音頻結束時長由 best_effort_timestamp_time 和 pkt_duration_time 相加所得(即 96.230300 + 0.023211 = 96.253511),視頻結束時長也是如此(即 96.229778 + 0.016667 = 96.246445)。

我們發現,音頻結束時長 - 音頻首個best_effort_timestamp_time約等于第三次獲取的duration。具體來說,音頻的結束時間比視頻的結束時間長,同時音頻的第一個時間戳早于視頻的第一個時間戳。為了包含最完整的時間長度,需要將音頻和視頻時間戳中的最小值和最大值來進行計算。這種情況可能出現在音頻和視頻的錄制或處理過程中,需要進行相應的調整以確保兩者之間的同步和一致性。





審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • JAVA
    +關注

    關注

    19

    文章

    2973

    瀏覽量

    104926
  • javascript
    +關注

    關注

    0

    文章

    520

    瀏覽量

    53903
  • HLS
    HLS
    +關注

    關注

    1

    文章

    130

    瀏覽量

    24167

原文標題:在線視頻協同:探究畫面幀的準確性

文章出處:【微信號:livevideostack,微信公眾號:LiveVideoStack】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如何提高OTDR測試的準確性

    OTDR(光時域反射儀)是光纜線路故障定位和光纖特性測量的重要工具,提高OTDR測試的準確性對于確保光纜線路的穩定運行至關重要。以下是一些提高OTDR測試準確性的方法: 一、準確設置OTDR參數
    的頭像 發表于 12-31 09:25 ?282次閱讀

    如何提高電位測量準確性

    在電子工程和物理實驗中,電位測量是一項基本而重要的任務。電位測量的準確性直接影響到實驗結果的可靠和產品的安全。 1. 選擇合適的測量設備 選擇合適的測量設備是提高電位測量準確性的第
    的頭像 發表于 12-28 13:56 ?179次閱讀

    如何提升ASR模型的準確性

    提升ASR(Automatic Speech Recognition,自動語音識別)模型的準確性是語音識別技術領域的核心挑戰之一。以下是一些提升ASR模型準確性的關鍵方法: 一、優化數據收集與處理
    的頭像 發表于 11-18 15:14 ?1094次閱讀

    如何維護電流互感器的準確性

    電流互感器是電力系統中不可或缺的組成部分,它們負責將高電流轉換為低電流,以便進行測量和保護。為了確保電力系統的穩定運行,電流互感器的準確性至關重要。 1. 電流互感器的工作原理 電流互感器
    的頭像 發表于 11-05 09:58 ?404次閱讀

    如何評估 ChatGPT 輸出內容的準確性

    評估 ChatGPT 輸出內容的準確性是一個復雜的過程,因為它涉及到多個因素,包括但不限于數據的質量和多樣、模型的訓練、上下文的理解、以及輸出內容的邏輯一致。以下是一些評估 ChatGPT 輸出
    的頭像 發表于 10-25 17:48 ?643次閱讀

    如何保證測長機測量的準確性

    可以通過以下方法保證測長機測量的準確性:一、設備方面1.定期校準按照規定的時間間隔,將測長機送往專業的計量機構或使用標準器進行校準。校準可以確定測長機的測量誤差,并對其進行調整,確保測量結果的準確性
    的頭像 發表于 10-25 16:16 ?381次閱讀
    如何保證測長機測量的<b class='flag-5'>準確性</b>?

    影響電源紋波測試準確性的因素

    出相應的解決方案。 測試設備的選擇 測試設備的選擇是影響電源紋波測試準確性的首要因素。測試設備的性能、精度、穩定性等都會對測試結果產生影響。因此,在選擇測試設備時,需要考慮以下幾個方面: 1.1 測試設備的精度 測試
    的頭像 發表于 08-02 09:42 ?673次閱讀

    景區負氧離子監測站的數據準確性如何?

    BK-FZ5景區負氧離子監測站的數據準確性是評估其性能的重要指標之一,其準確性受到多個因素的影響。
    的頭像 發表于 07-31 14:41 ?333次閱讀
    景區負氧離子監測站的數據<b class='flag-5'>準確性</b>如何?

    有效提升智能會議系統語音識別準確性案例分享

    。多語言支持的語音識別技術還可以準確識別不同語言和方言,對于夸全球交流的國際會議必不可缺。語音識別準確性對于提升智能會議系統市場核心競爭力的重要由此可見一斑。
    的頭像 發表于 06-21 11:15 ?384次閱讀
    有效提升智能會議系統語音識別<b class='flag-5'>準確性</b>案例分享

    有效提升智能會議系統語音識別準確性案例分享

    。多語言支持的語音識別技術還可以準確識別不同語言和方言,對于夸全球交流的國際會議必不可缺。語音識別準確性對于提升智能會議系統市場核心競爭力的重要由此可見一斑。
    的頭像 發表于 06-21 11:13 ?559次閱讀
    有效提升智能會議系統語音識別<b class='flag-5'>準確性</b>案例分享

    12芯M16插頭數據傳輸準確性怎樣

     德索工程師說道12芯M16插頭在數據傳輸準確性方面表現出色,其設計特點和電氣性能確保了數據在傳輸過程中的穩定性和可靠。以下是對12芯M16插頭數據傳輸準確性的詳細分析:   12芯M16
    的頭像 發表于 06-17 17:26 ?367次閱讀
    12芯M16插頭數據傳輸<b class='flag-5'>準確性</b>怎樣

    8芯M16插頭數據傳輸的準確性

      德索工程師說道8芯M16插頭作為高性能連接器,其數據傳輸的準確性對于整個系統的穩定性和可靠至關重要。以下是對8芯M16插頭數據傳輸準確性的詳細分析,結合參考文章中的相關數字和信息進行闡述。
    的頭像 發表于 06-14 18:06 ?349次閱讀
    8芯M16插頭數據傳輸的<b class='flag-5'>準確性</b>

    測量時鐘信號的探頭要求:確保準確性與穩定性

    時鐘信號在現代電子系統中起著至關重要的作用。為了準確測量和分析時鐘信號,選擇合適的探頭至關重要。本文將探討測量時鐘信號時探頭的要求,包括帶寬、阻抗匹配、信號完整和噪聲抑制等方面,以確保測量的準確性
    的頭像 發表于 04-22 10:44 ?991次閱讀
    測量時鐘信號的探頭要求:確保<b class='flag-5'>準確性</b>與穩定性

    電流探頭測試小技巧:提高準確性和安全

    電流探頭是一種常用的測試工具,用于測量電路中的電流。正確使用電流探頭可以提高測試的準確性,并確保操作的安全。本文將介紹一些電流探頭的測試小技巧,幫助您更好地使用電流探頭進行電流測量。 技巧一:正確
    的頭像 發表于 03-08 09:31 ?401次閱讀
    電流探頭測試小技巧:提高<b class='flag-5'>準確性</b>和安全<b class='flag-5'>性</b>

    FLOEFD T3STER自動校準模塊—提高電子產品散熱設計的準確性

    西門子工業數字軟件FLOEFD T3STER 自動校準模塊——提高電子產品散熱設計的準確性
    的頭像 發表于 02-21 10:10 ?620次閱讀
    FLOEFD T3STER自動校準模塊—提高電子產品散熱設計的<b class='flag-5'>準確性</b>
    主站蜘蛛池模板: 红杏俱乐部| 一区二区三区国产| 久久视频精品38在线播放| 国产九九九九九九九A片| 亚洲免费在线| 色综合色综合久久综合频道| 欧美亚洲高清国产| 免费无码一区二区三区蜜桃大| 久久精品视频uu| 久久精品观看影院2828| 久久99re8热在线播放| 穿白丝袜边走边尿白丝袜| bbwvideoa欧美老妇| 99久久国产露脸精品麻豆| 少妇高潮久久久久7777| 日本视频久久| 色多多污版app下载网站| 色琪琪久久热在线| 秋霞特色大片18岁入口| 青柠在线观看视频在线高清完整| 欧美乱码卡一卡二卡四卡免费| 国产中文字幕在线| 国产亚洲精品V在线观看一| 国产露脸A片国语露对白| 国产在线成人一区二区三区| 国产在线精品视亚洲不卡| 好姑娘社区在线视频| 久草精品视频| 美女扒开腿让男生桶免费看动态图| 美女张开让男生桶| 牛牛免费视频| 热久久视久久精品18| 三级视频网站| 偷窥wc美女毛茸茸视频| 亚洲高清视频网站| 野花韩国高清完整版在线| 18国产精品白浆在线观看免费| 亚州AV人片一区二区三区99久 | 在线播放一区| 最新精品国产| 被老总按在办公桌吸奶头|