視頻播放問題和提高性能方案

1.Five symptoms of poor video performance

1.1 視頻加載緩慢

?Perceived Wait Time

Time to first frame (TTFF):

? 播放開始所需的adaptive bitrate(ABR)流媒體段的數量。(我們稍后將對此進行更詳細的討論。)

? 視頻請求發送到視頻加載之間的時間(即接收到足夠的數據來渲染第一幀)。如果客戶端實現預取或在本地存儲視頻的副本,則它可能比PWT高得多。

Network-level metrics

? 用于連接性能分析的技術指標。這包括DNS解析時間、連接握手時間、下載速度和帶寬利用率。

1.2 Video pauses randomly:

? try to measure the issue with these metrics:

? Number of stalls per-play:

視頻回放暫停并進入“緩沖”狀態的頻率。這是加權的視頻長度時,我們聚合多個回放會話。

? Time-to-resume (lag length):

從用戶看到停止播放的視頻到重新播放的時間。

1.3 Low picture quality

性能差的另一個癥狀是圖像質量低,這通常是由于沒有足夠的帶寬來提供更高質量的視頻流的結果。這也可能是由于視頻優化不佳或基礎設施滯后造成的。為了確定它是哪個場景,我們回顧以下指標:

  • Video variant usage

    測量在單個ABR段水平上使用和計數每個視頻變體的次數。

  • A number of variant changes during playback

    視頻改變顯示給用戶的變量的頻率。

  • Bandwidth utilization

    視頻流占用了多大的可用帶寬

1.4 When seeking (scrubbing) through a video it takes a while for it to resume

? 我們使用稱為“特技模式延遲”的指標來監控此滯后。

1.5 Video is out of sync with audio or doesn’t play altogether

? 這種現象可能是由多種原因引起的,但通常是由于終端設備功率不足所致。 為了更好地理解此問題,我們使用了有關設備功能的信息,包括有關我們使用的編解碼器的硬件支持數據以及回放過程中設備資源利用率的數據。

2 我們的補救措施:調整良好的自適應比特率(ABR)流

為了實現高效的流傳輸并減輕上面列出的一些問題,我們使用了自適應比特率流傳輸,這是當前視頻交付的行業標準。 ABR流的兩種最流行的實現是Apple的HLS和MPEG-DASH。 這兩種技術都通過將源視頻文件編碼為具有不同比特率的多個流而起作用。 然后,這些流將以相似的持續時間(例如幾秒鐘)分成較小的段。 然后,視頻播放器會根據可用帶寬和其他因素在流之間無縫切換。 這樣,當信號較差時,視頻仍可以播放(質量較低),而當信號增強時,視頻可以跳至較高質量的視頻流。

2.1 Tuning ABR streaming

使用ABR的棘手部分是對每個流的配置進行微調,以使它們在產品中發揮最佳性能。 值得一提的是,沒有一種配置可以普遍應用于所有產品。 這是一種高度針對產品的設置,會隨著時間的推移而變化。 在Pinterest,我們主要處理簡短的預生成內容(例如VoD),當用戶滾動瀏覽其家庭供稿時,這些內容會自動播放。 它主要用于帶寬可能受到限制的各種移動設備上。 讓我們討論可以調整哪些參數以滿足該條件。

整個過程本質上都是“漂洗和重復”。 您選擇起始參數,觀察回放如何在實時流量上執行,并根據這些信號調整您的配置。 隨著網絡基礎架構和設備功能的不斷變化,您可能需要繼續更新配置。 收集上述指標確實可以簡化流程。

Number of streams, resolutions and bitrates

我們最初決定要提供多少個流以及要使用哪些分辨率是基于兩條信息。 首先,我們對可能出現視頻的所有產品表面及其尺寸都有很好的了解。 其次,我們利用我們所運營的主要市場中可用的網絡基礎設施的知識來設置初始比特率。

推出初始設置后,我們便開始收集指標:PWT,TTFF,視頻播放器多久更改一次使用的流以及我們的流表示可用帶寬的緊密程度。 根據這些信號,我們進一步調整了設置以最小化PWT。

Frame rate

您為視頻流選擇的幀速率會顯著影響平滑播放所需的必要帶寬。 它還可能會改變視頻的感覺。 有三種常用的流幀率。

24fps:過去在電影院中使用。 在現代設備上可能有點生澀。
30fps:這是大多數流媒體服務的標準,并且對于大多數類型的內容都表現良好。 快速動作序列(例如運動)和想要“真實生活”效果的情況(例如新聞,戲劇,自然視頻)可以從更高的幀頻中受益。
60fps:這非常接近人眼可以處理的信息量。 除非您打算在播放過程中放慢視頻播放速度,否則通常不會超出此級別。 它通常用于高節奏的場景,以及當您想要視頻的“真實生活”時。 這不是一種很棒的電影體驗,因為它看起來像真實的生活,并且揭示了太多的細節(例如,化妝,服裝,風景中的瑕疵)。 因此,觀看者不會像使用30fps(甚至24fps)的電影那樣感受到“電影魔力”。 但是,這對于快速動作游戲非常有用。

對于我們的用例,根據經驗,30 fps幀速率效果很好。 隨著媒體庫的發展,我們計劃向某些媒體文件添加60fps的變體。 值得一提的是,降低幀速率以獲得最低質量的比特率是有意義的。 對于Pinterest,我們以15幀/秒的速度對視頻進行重新編碼,因為我們發現,用戶對視頻停滯不滿意,而對視頻的視線略有些生澀。

Segment size and duration

在互聯網上有許多關于段持續時間的建議。 很長一段時間以來,Apple建議的段時間為10s,最近他們將HLS流的段時間修改為6s。 最適合Pinterest的分段持續時間為4s。 我們使用以下準則來做出此決定

  • 一些視頻播放器(最著名的是iOS AVFoundation)會在實際開始播放之前加載一些視頻片段。 對于高質量的流和較長的段,這可能會導致很高的PWT。
  • 段越長,根據網絡狀況的變化進行回放所花費的時間就越長。
  • 使段非常短(例如1s)會導致對服務器的大量請求,從而增加網絡和處理開銷。
  • 根據經驗,每個段的字節大小應小于1MB。 這導致大多數CDN提供者的驅逐率較低。
Video and audio codecs

When deciding which codec to use, there are two limiting factors:

  • 首先是您用于流式傳輸的技術。 例如,HLS會強制您堅持使用h.264視頻編解碼器和一些受支持的音頻編解碼器之一。 DASH可以與編解碼器無關,因此更加靈活。
  • 第二個因素是用戶設備提供的功能。 Pinterest可在全球范圍內使用,我們的許多用戶使用的舊設備處理能力有限。 為了他們的緣故,我們使用最廣泛支持的配置– h.264編解碼器,主要配置文件,級別為3.1,并附帶用于音頻通道的HE-AAC v1和v2編解碼器。
Fine tuning
  • 最后的一些小調整包括選擇用于第一段回放的流的質量。 為了使PWT最小化,我們在播放的前四秒使用中等質量的流,而不是使用高質量的流。
  • 另一個設置強制我們的編碼器將IDR幀放置在每個段的開頭。 這樣一來,視頻播放器就不必在開始渲染幀之前加載整個片段,從而大大減少了PWT和恢復時間指標。
  • 我們還確保啟用特技模式時支持流技術。 HLS和DASH都支持此功能,并啟用了性能擦除,從而最大程度地減少了特技模式延遲指標。
  • 最終的優化是確保我們的交付基礎架構非常快。 為了保證這一點,我們使用了多個CDN提供商,然后為每個用戶選擇最快的a。

要使視頻播放產品在大型產品中表現出色,需要進行大量調整。 建議使用最適合產品其他流技術和設置。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/388888.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/388888.shtml
英文地址,請注明出處:http://en.pswp.cn/news/388888.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

rabbitmq 不同的消費者消費同一個隊列_RabbitMQ 消費端限流、TTL、死信隊列

消費端限流1. 為什么要對消費端限流假設一個場景,首先,我們 Rabbitmq 服務器積壓了有上萬條未處理的消息,我們隨便打開一個消費者客戶端,會出現這樣情況: 巨量的消息瞬間全部推送過來,但是我們單個客戶端無法同時處理這…

動量策略 python_在Python中使用動量通道進行交易

動量策略 pythonMost traders use Bollinger Bands. However, price is not normally distributed. That’s why only 42% of prices will close within one standard deviation. Please go ahead and read this article. However, I have some good news.大多數交易者使用布林…

css3 變換、過渡效果、動畫

1 CSS3 選擇器 1.1 基本選擇器 1.2 層級 空格 > .itemli ~ .item~p 1.3 屬性選擇器 [attr] [attrvalue] [attr^value] [attr$value] [attr*value] [][][] 1.4 偽類選擇器 :link :visited :hover :active :focus :first-child .list li:first-child :last-chi…

webservice 啟用代理服務器

您會發現你寫完了一個webservice在調用的時候發現怎也沒辦法調用,一個簡單的webservice怎么不能使用,一肚子的怨恨,哈哈您可能沒有為webservice設置代理。 下面就給您寫個調用的用例和大家分享下。其實很簡單,但是你沒有想到的時…

mysql常用的存儲引擎_Mysql存儲引擎

什么是存儲引擎?關系數據庫表是用于存儲和組織信息的數據結構,可以將表理解為由行和列組成的表格,類似于Excel的電子表格的形式。有的表簡單,有的表復雜,有的表根本不用來存儲任何長期的數據,有的表讀取時非…

android studio設計模式和文本模式切換

轉載于:https://www.cnblogs.com/judes/p/9437104.html

高斯模糊為什么叫高斯濾波_為什么高斯是所有發行之王?

高斯模糊為什么叫高斯濾波高斯分布及其主要特征: (Gaussian Distribution and its key characteristics:) Gaussian distribution is a continuous probability distribution with symmetrical sides around its center. 高斯分布是連續概率分布,其中心周…

C# webbrowser 代理

百度,google加自己理解后,將所得方法總結一下: 方法1:修改注冊表Software//Microsoft//Windows//CurrentVersion//Internet Settings下 ProxyEnable和ProxyServer。這種方法適用于局域網用戶,撥號用戶無效。 1p…

C MySQL讀寫分離連接串_Mysql讀寫分離

一 什么是讀寫分離MySQL Proxy最強大的一項功能是實現“讀寫分離(Read/Write Splitting)”。基本的原理是讓主數據庫處理事務性查詢,而從數據庫處理SELECT查詢。數據庫復制被用來把事務性查詢導致的變更同步到集群中的從數據庫。當然,主服務器也可以提供…

golang 編寫的在線redis 內存分析工具 rma4go

redis 內存分析工具 rma4go redis是一個很有名的內存型數據庫,這里不做詳細介紹。而rma4go (redis memory analyzer for golang) 是一個redis的內存分析工具,這個工具的主要作用是針對運行時期的redis進行內存的分析,統計redis中key的分布情…

從Jupyter Notebook到腳本

16 Aug: My second article: From Scripts To Prediction API8月16日:我的第二篇文章: 從腳本到預測API As advanced beginners, we know quite a lot: EDA, ML concepts, model architectures etc…… We can write a big Jupyter Notebook, click “Re…

【EasyNetQ】- 使用Future Publish調度事件

許多業務流程要求在將來某個日期安排事件。例如,在與客戶進行初次銷售聯系后,我們可能希望在將來的某個時間安排跟進電話。EasyNetQ可以通過其Future Publish功能幫助您實現此功能。例如,這里我們使用FuturePublish擴展方法來安排未來一個月的…

Java這些多線程基礎知識你會嗎?

0、并發和并行、進程核線程、多進程和多線程的區別: (這里的時間和時刻上的概念同物理上的一樣) 并發:在一段時間內多個任務同時執行,或者說是在一段很短的時間內可以執行多條程序指令,微觀上看起來好像是可…

MySQL set names 命令_mysql set names 命令和 mysql 字符編碼問題

先看下面的執行結果:(rootlocalhost)[(none)]mysql>show variables like character%;---------------------------------------------------------------------------------------| Variable_name | Value |---------------------------------------------------…

設置Proxy Server和SQL Server實現數據庫安全

首先,我們需要了解一下SQL Server在WinSock上定義協議的步驟: 1. 在”啟動”菜單上,指向”程序/Microsoft Proxy Server”,然后點擊”Microsoft Management Console”。 2. 展開”Internet Information Service”,再展開運行Proxy…

Python django解決跨域請求的問題

解決方案 1.安裝django-cors-headers pip3 install django-cors-headers 2.配置settings.py文件 INSTALLED_APPS [...corsheaders,...] MIDDLEWARE_CLASSES (...corsheaders.middleware.CorsMiddleware,django.middleware.common.CommonMiddleware, # 注意順序...…

加勒比海兔_加勒比海海洋物種趨勢

加勒比海兔Ok, here’s a million dollar question: is the Caribbean really dying? Or, more specifically, are marine species found on Caribbean reefs becoming less abundant?好吧,這是一個百萬美元的問題:加勒比海真的死了嗎? 或者…

mysql 查出相差年數_MySQL計算兩個日期相差的天數、月數、年數

MySQL自帶的日期函數TIMESTAMPDIFF計算兩個日期相差的秒數、分鐘數、小時數、天數、周數、季度數、月數、年數,當前日期增加或者減少一天、一周等等。SELECT TIMESTAMPDIFF(類型,開始時間,結束時間)相差的秒數:SELECT TIMESTAMPDIFF(SECOND,1993-03-23 0…

tornado 簡易教程

引言 回想Django的部署方式 以Django為代表的python web應用部署時采用wsgi協議與服務器對接(被服務器托管),而這類服務器通常都是基于多線程的,也就是說每一個網絡請求服務器都會有一個對應的線程來用web應用(如Djang…

如果你的電腦是通過代理上網的.就要用端口映射

由于公網IP地址有限,不少ISP都采用多個內網用戶通過代理和網關路由共用一個公網IP上INTERNET的方法, 這樣就限制了這些用戶在自己計算機上架設個人網站,要實現在這些用戶端架設網站,最關鍵的一點是, 怎樣把多用戶的內網…