国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

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

一個(gè)關(guān)于Netflix應(yīng)用程序在新機(jī)頂盒上啟動(dòng)的問題

LiveVideoStack ? 來源:LiveVideoStack ? 作者:LiveVideoStack ? 2021-01-19 14:52 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

并非真正使用了 WebRTC,但此處存在使用 WebRTC 技術(shù)性質(zhì)的相似之處。

Netflix的應(yīng)用程序可以在數(shù)百臺(tái)智能電視、電視棒和付費(fèi)電視機(jī)頂盒上運(yùn)行。Netflix的合作工程師的角色是幫助設(shè)備制造商在他們的設(shè)備上啟動(dòng)Netflix應(yīng)用程序。在這篇文章中,我們將討論一個(gè)特別困難的問題,它影響了一款設(shè)備在歐洲的正常發(fā)布。

神秘的開始

2017年底,我參加一個(gè)電話會(huì)議,其中主要討論一個(gè)關(guān)于Netflix應(yīng)用程序在新機(jī)頂盒上啟動(dòng)的問題。box是一款全新的Android電視設(shè)備,具有4k播放功能,基于Android開放源碼項(xiàng)目(AOSP) 5.0版本,又名“棒棒糖”。我在Netflix工作了幾年,過去發(fā)布過很多臺(tái)設(shè)備,但這是我推出的第一款A(yù)ndroid電視設(shè)備。

與該設(shè)備相關(guān)的四家公司都在此次電話會(huì)議中:推出該設(shè)備的大型歐洲付費(fèi)電視公司(運(yùn)營(yíng)商)、集成機(jī)頂盒固件的承包商(集成商)、系統(tǒng)芯片供應(yīng)商(芯片供應(yīng)商)和我(Netflix)。

這家集成機(jī)頂盒固件的承包商(集成商)和Netflix已經(jīng)完成了嚴(yán)格的Netflix認(rèn)證程序,但在這家電視運(yùn)營(yíng)商的內(nèi)部測(cè)試過程中,該公司的一名高管報(bào)告了一個(gè)嚴(yán)重問題:Netflix在他的設(shè)備上播放“結(jié)巴(卡頓)”。即視頻會(huì)播放很短的時(shí)間后暫停,接著重新開始,隨后又暫停。這種情況并不會(huì)一直發(fā)生,但肯定會(huì)在機(jī)頂盒通電后的幾天內(nèi)開始發(fā)生。他們提供了一段演示視頻,情況看起來很糟糕。

設(shè)備集成商找到了重現(xiàn)這個(gè)問題的方法:反復(fù)啟動(dòng)Netflix,開始播放,然后回到設(shè)備的用戶界面。他們提供了一個(gè)腳本來自動(dòng)化這個(gè)過程,有時(shí)這個(gè)過程會(huì)持續(xù)長(zhǎng)達(dá)五分鐘的時(shí)間,但是腳本總是能夠穩(wěn)定地重現(xiàn)錯(cuò)誤。

與此同時(shí),芯片供應(yīng)商的一名現(xiàn)場(chǎng)工程師診斷出了根本原因:Netflix的Android電視應(yīng)用程序Ninja傳輸音頻數(shù)據(jù)的速度不夠快。卡頓是由于設(shè)備音頻管道緩沖不足引起的。當(dāng)解碼器等待Ninja傳送更多的音頻流時(shí),播放停止,等待更多的數(shù)據(jù)到達(dá)后恢復(fù)播放。集成商、芯片供應(yīng)商和運(yùn)營(yíng)商都認(rèn)為問題已經(jīng)確定,他們向我傳達(dá)的信息很明確:Netflix,你的應(yīng)用程序中有一個(gè)漏洞,你需要修復(fù)它。我從通話里聽出了壓力。他們?cè)O(shè)備的上線時(shí)間推遲了,而且超出了預(yù)算,他們期待我的解決方案。

調(diào)查

我持懷疑態(tài)度。同樣的Ninja應(yīng)用程序在數(shù)以百萬計(jì)的Android電視設(shè)備上運(yùn)行,包括智能電視和其他機(jī)頂盒。如果Ninja存在漏洞,為什么它只出現(xiàn)在這款設(shè)備上?

我首先使用他們提供的腳本重現(xiàn)了問題,同時(shí)聯(lián)系了芯片供應(yīng)商的同事,詢問他以前是否見過類似的情況(他沒有見過)。接下來我開始檢查Ninja的源代碼,我想找到傳輸音頻數(shù)據(jù)的那行代碼。我認(rèn)識(shí)很多,但我在播放代碼中開始不知所措,我需要幫助。

我上樓找到了Ninja編寫音頻和視頻傳輸代碼的工程師,他幫我梳理了代碼。我自己花了一些時(shí)間研究源代碼來理解它的工作部分,并添加了我自己的日志記錄來確認(rèn)我的理解。Netflix應(yīng)用程序很復(fù)雜,簡(jiǎn)單來說,它從Netflix服務(wù)器傳輸數(shù)據(jù),在設(shè)備上緩沖數(shù)秒的視頻和音頻數(shù)據(jù),然后一次一次地將視頻和音頻幀發(fā)送到設(shè)備的播放硬件。

圖1:設(shè)備播放管道(簡(jiǎn)化)

讓我們花點(diǎn)時(shí)間來討論Netflix應(yīng)用程序中的音頻/視頻管道。在每個(gè)機(jī)頂盒和智能電視上,直到“解碼器緩沖區(qū)”都是相同的,但是將A/V數(shù)據(jù)傳輸?shù)皆O(shè)備的解碼器緩沖區(qū)是一個(gè)特定的程序,在它自己的線程中運(yùn)行。它的例行工作是通過調(diào)用提供音頻或視頻數(shù)據(jù)下一幀的API(Netflix提供)來保持解碼器緩沖區(qū)滿狀態(tài)。在Ninja中,這一任務(wù)是由Android線程執(zhí)行的。有一個(gè)簡(jiǎn)單的狀態(tài)機(jī)和一些邏輯來處理不同的播放狀態(tài),但在正常播放下,線程將一幀數(shù)據(jù)復(fù)制到Android播放API中,然后告訴線程調(diào)度程序等待15毫秒并再次調(diào)用處理程序。當(dāng)你創(chuàng)建一個(gè)Android線程時(shí),可以請(qǐng)求線程重復(fù)運(yùn)行,就像在一個(gè)循環(huán)中一樣,但是調(diào)用處理程序的是Android的線程調(diào)度程序,不是你自己的應(yīng)用程序。

60幀/秒是Netflix能播放視頻的最高幀率,設(shè)備必須每16.66毫秒渲染一個(gè)新幀,所以每15毫秒檢查一個(gè)新樣本的速度足以領(lǐng)先于Netflix提供的任何視頻流。因?yàn)榧缮桃呀?jīng)確定音頻流是問題所在,所以我將注意力集中放在將音頻樣本傳遞給Android音頻服務(wù)的特定線程處理程序上。

我想回答這個(gè)問題:額外的時(shí)間在哪里?假設(shè)罪魁禍?zhǔn)资翘幚沓绦蛘{(diào)用的某個(gè)函數(shù),所以我在處理程序中添加了日志消息,假設(shè)錯(cuò)誤代碼是顯而易見的。很快就可以看出,處理程序中沒有任何不正常的行為,即使播放不流暢,處理器也能在幾毫秒內(nèi)運(yùn)行正常。

啊哈,洞察力

最后,我關(guān)注了三個(gè)數(shù)字:數(shù)據(jù)傳輸速率,處理程序被調(diào)用的時(shí)間,以及處理程序?qū)⒖刂茩?quán)交還給Android的時(shí)間。我編寫了一個(gè)腳本來解析日志輸出,并制作了下面的圖表,它給出了答案。

圖2:可視化音頻吞吐量和線程處理器時(shí)間

橙色的線是數(shù)據(jù)從流媒體緩沖區(qū)移動(dòng)到Android音頻系統(tǒng)的速率,單位是字節(jié)/毫秒。在這張圖表中,你可以看到三種不同的行為:

這兩個(gè)又高又尖的部分,數(shù)據(jù)速率達(dá)到500字節(jié)/毫秒。這是在播放開始之前的緩沖階段。處理程序正在盡可能快地復(fù)制數(shù)據(jù)。

中間的區(qū)域是正常播放階段。音頻數(shù)據(jù)以大約45字節(jié)/毫秒的速度傳輸。

當(dāng)音頻數(shù)據(jù)以接近10字節(jié)/毫秒的速度傳輸時(shí),卡頓區(qū)域在右側(cè)。速度還不夠快,無法維持正常播放。

不可避免的結(jié)論是橙色線證實(shí)了芯片供應(yīng)商工程師的報(bào)告:Ninja傳輸音頻數(shù)據(jù)的速度不夠快。

為了理解這其中的原因,讓我們看看黃線和灰線又說明了哪些問題。

黃色的線顯示花費(fèi)在處理程序本身的時(shí)間,根據(jù)處理程序頂部和底部記錄的時(shí)間戳計(jì)算。在正常播放和卡頓的區(qū)域,處理程序花費(fèi)的時(shí)間是相同的:大約2毫秒。峰值顯示由于在設(shè)備上其他任務(wù)花費(fèi)了時(shí)間而導(dǎo)致Ninja傳輸音頻數(shù)據(jù)的速度不夠快。

真正的原因

灰色的線是兩次調(diào)用處理程序之間的時(shí)間,它說明了不同的情況。在正常播放的情況下,你可以看到處理程序大約每15毫秒被調(diào)用一次。在播放卡頓的情況下,在右側(cè)大約每55毫秒調(diào)用一次處理程序。調(diào)用之間有額外的40毫秒,沒有辦法跟上播放的速度。但這是為什么呢?

我把我的發(fā)現(xiàn)告訴了集成商和芯片供應(yīng)商 (看,這是Android線程調(diào)度程序!),但他們對(duì)這一發(fā)現(xiàn)并不感冒。為什么不在每次調(diào)用處理程序時(shí)復(fù)制更多的數(shù)據(jù)呢?這是一個(gè)合理的質(zhì)疑,但改變這種行為涉及更深層次的變化,超出了我的準(zhǔn)備,我繼續(xù)尋找根本原因。我深入研究了Android源代碼,了解到Android線程是一個(gè)用戶空間結(jié)構(gòu),線程調(diào)度程序使用epoll()系統(tǒng)調(diào)用進(jìn)行計(jì)時(shí)。我知道epoll()的性能不能得到保證,所以我懷疑有什么東西以系統(tǒng)的方式影響epoll()。

就在這時(shí),芯片供應(yīng)商的另一位工程師救了我,他發(fā)現(xiàn)了一個(gè)漏洞,這個(gè)漏洞在下一個(gè)名為“棉花糖”(Marshmallow)的Android版本中已經(jīng)修復(fù)了。Android線程調(diào)度程序根據(jù)應(yīng)用程序是在前臺(tái)運(yùn)行還是在后臺(tái)運(yùn)行來改變線程的行為。后臺(tái)線程被分配額外的40毫秒(4000萬ns)的等待時(shí)間。

Android系統(tǒng)本身的一個(gè)深層漏洞意味著當(dāng)線程移動(dòng)到前臺(tái)時(shí),這個(gè)額外的定時(shí)器值被保留。通常音頻處理線程是在應(yīng)用程序處于前臺(tái)時(shí)創(chuàng)建的,但有時(shí)線程是在Ninja仍然在后臺(tái)時(shí)創(chuàng)建的。當(dāng)這種情況發(fā)生時(shí),播放就會(huì)卡頓。

經(jīng)驗(yàn)教訓(xùn)

這并不是我們?cè)谶@個(gè)平臺(tái)上修復(fù)的最后一個(gè)漏洞,但卻是最難追蹤的一個(gè)。它在Netflix應(yīng)用程序之外,在播放線程之外的系統(tǒng)部分,所有的初始數(shù)據(jù)都表明Netflix應(yīng)用程序本身存在缺陷。

這個(gè)故事確實(shí)體現(xiàn)了我熱愛這份工作的一個(gè)方面:我不能預(yù)知我們的合作伙伴會(huì)向我拋出的所有問題,要解決這些問題,我必須了解多個(gè)系統(tǒng),與優(yōu)秀的同事合作,并不斷督促自己學(xué)習(xí)更多知識(shí)。我所做的事直接影響著現(xiàn)實(shí)中的人們以及他們的用戶體驗(yàn)。我知道,當(dāng)人們?cè)诳蛷d里享受Netflix時(shí),我是Netflix團(tuán)隊(duì)中不可或缺的一員,是我們讓這一切成為現(xiàn)實(shí)。

責(zé)任編輯:lq

聲明:本文內(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)投訴
  • 應(yīng)用程序
    +關(guān)注

    關(guān)注

    38

    文章

    3344

    瀏覽量

    60259
  • Netflix
    +關(guān)注

    關(guān)注

    0

    文章

    90

    瀏覽量

    12002
  • WebRTC
    +關(guān)注

    關(guān)注

    0

    文章

    57

    瀏覽量

    11944

原文標(biāo)題:Netflix 工程師的生活 —— 40毫秒的案例

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    寬壓輸入,高效穩(wěn)壓:XBL1509 DCDC降壓轉(zhuǎn)換器機(jī)頂盒電源中的設(shè)計(jì)

    現(xiàn)代機(jī)頂盒的緊湊機(jī)身內(nèi),個(gè)高效、可靠的電源架構(gòu)是實(shí)現(xiàn)穩(wěn)定運(yùn)行的基礎(chǔ)。XBL1509作為款經(jīng)典的150KHz、3A降壓(Buck)DC/
    的頭像 發(fā)表于 12-30 18:07 ?384次閱讀
    寬壓輸入,高效穩(wěn)壓:XBL1509 DCDC降壓轉(zhuǎn)換器<b class='flag-5'>在</b><b class='flag-5'>機(jī)頂盒</b>電源中的設(shè)計(jì)

    當(dāng)AI運(yùn)行遭遇存儲(chǔ)瓶頸:個(gè)專業(yè)硬盤如何讓性能提升40%?

    AI項(xiàng)目的整個(gè)生命周期中,數(shù)據(jù)存儲(chǔ)的效能直接決定了工作流的順暢程度。面對(duì)海量的訓(xùn)練集和頻繁的模型迭代,普通存儲(chǔ)設(shè)備往往速度、散熱與擴(kuò)展性力不從心,成為隱形的性能瓶頸。要突破這
    的頭像 發(fā)表于 11-28 15:29 ?650次閱讀
    當(dāng)AI運(yùn)行遭遇存儲(chǔ)瓶頸:<b class='flag-5'>一</b><b class='flag-5'>個(gè)</b>專業(yè)硬盤<b class='flag-5'>盒</b>如何讓性能提升40%?

    GPMI生態(tài)再迎里程碑:GPMI微型機(jī)頂盒正式發(fā)布

    近日,全球領(lǐng)先的數(shù)字智能娛樂終端廠商創(chuàng)維數(shù)字正式發(fā)布基于我國(guó)自主研發(fā)的新代通用多媒體接口(GPMI)的微型插入式機(jī)頂盒。該產(chǎn)品將于年內(nèi)率先在江蘇省廣電有線信息網(wǎng)絡(luò)股份有限公司啟動(dòng)試點(diǎn)應(yīng)用,憑借
    的頭像 發(fā)表于 11-08 01:15 ?6018次閱讀

    藍(lán)牙語音遙控器方案 NRF52840、HS6621

    方案介紹 藍(lán)牙語音遙控器般是通過按下語音鍵,遙控器會(huì)發(fā)送個(gè) HID 編碼通知智能電視或者機(jī)頂盒打開識(shí)音功能,此時(shí),遙控器LED燈保持閃爍或者長(zhǎng)亮,用戶開始錄音同時(shí)將語音數(shù)據(jù)上傳給智
    的頭像 發(fā)表于 10-13 09:26 ?491次閱讀
    藍(lán)牙語音遙控器方案 NRF52840、HS6621

    YNH-A18雙HDMI拼接屏主板RK3568規(guī)格書

    YNH-A18雙HDMI拼接屏主板,可雙屏異顯、1080P輸出,單屏輸出最大4K。適用于播放機(jī)頂盒
    發(fā)表于 09-12 17:29 ?0次下載

    FX3 UVC 無法與 Ubuntu 24.04 Cheese 或 Snapshot 相機(jī)應(yīng)用程序配合使用,怎么處理?

    Windows 和 MacOS 運(yùn)行正常,但在 Ubuntu 運(yùn)行失敗。我對(duì)我的 USB 描述符很有信心,但不確定我對(duì) Ubuntu 相機(jī)應(yīng)用程序發(fā)送的事件的響應(yīng)是否存在問題。我已經(jīng)包含了
    發(fā)表于 07-16 06:37

    TPS65231A2 用于數(shù)字機(jī)頂盒的電源管理 IC (PMIC)數(shù)據(jù)手冊(cè)

    TPS652x 提供個(gè) PWM 降壓控制器、兩個(gè)可調(diào)同步降壓穩(wěn)壓器、兩個(gè)獨(dú)立的 USB 電源開關(guān)和個(gè)
    的頭像 發(fā)表于 07-14 09:28 ?839次閱讀
    TPS65231A2 用于數(shù)字<b class='flag-5'>機(jī)頂盒</b>的電源管理 IC (PMIC)數(shù)據(jù)手冊(cè)

    TPS65230 用于數(shù)字機(jī)頂盒的電源管理 IC (PMIC)數(shù)據(jù)手冊(cè)

    TPS652x 提供個(gè) PWM 降壓控制器、兩個(gè)可調(diào)同步降壓穩(wěn)壓器、兩個(gè)獨(dú)立的 USB 電源開關(guān)和個(gè)
    的頭像 發(fā)表于 07-14 09:24 ?900次閱讀
    TPS65230 用于數(shù)字<b class='flag-5'>機(jī)頂盒</b>的電源管理 IC (PMIC)數(shù)據(jù)手冊(cè)

    CYBT-413061的RFCOMM_Serial_Port SPP演示,AIROC客戶端控制應(yīng)用程序不起作用,什么原因引起的?

    正常,但當(dāng)啟動(dòng)客戶端控制應(yīng)用程序并打開串行端口時(shí),卻什么也沒發(fā)生--所有控件都是灰色的。 然后,我還按照說明中的建議從 Windows 10 PC 運(yùn)行 BTSpy 并進(jìn)行連接 - 客戶端控制
    發(fā)表于 07-02 06:05

    想問下怎么查看安卓系統(tǒng)有沒有VPU驅(qū)動(dòng)?

    購(gòu)買了個(gè)CPU是RK3576, android 14 的機(jī)頂盒,能通過adb查看有沒有VPU驅(qū)動(dòng)么?查看哪些信息來確認(rèn)過?
    發(fā)表于 07-01 09:10

    有人接rk3576的安卓視頻硬件解碼的實(shí)現(xiàn)么?

    我們這邊是有做好了個(gè)安卓app的,然后我們這邊是有用軟解的方式播放了網(wǎng)絡(luò)攝像槍的實(shí)時(shí)視頻的,但是因?yàn)檎加肅PU太高了,所以就想轉(zhuǎn)成視頻硬解的方式播放實(shí)時(shí)視頻。 目前我們是有采購(gòu)了個(gè)
    發(fā)表于 05-19 09:52

    藍(lán)牙語音遙控國(guó)產(chǎn)適用芯片HS6621

    ,使用非常方便,徹底擺脫傳統(tǒng)紅外遙控器節(jié)目搜索時(shí)的繁瑣操作和低效。 藍(lán)牙語音遙控器般是通過按下語音鍵,遙控器會(huì)發(fā)送個(gè) HID 編碼通知智能電視或者
    發(fā)表于 04-30 16:21

    AD9877單電源電纜調(diào)制解調(diào)器/機(jī)頂盒混合信號(hào)前端技術(shù)手冊(cè)

    AD9877是款單電源電纜調(diào)制解調(diào)器/機(jī)頂盒混合信號(hào)前端,內(nèi)置發(fā)射路徑插值濾波器、完整正交數(shù)字上變頻器和發(fā)射DAC。接收路徑內(nèi)置12位ADC和雙通道8位ADC。內(nèi)部需要的所有時(shí)鐘和輸出系統(tǒng)時(shí)鐘均由PLL從單晶體或時(shí)鐘輸入產(chǎn)生。
    的頭像 發(fā)表于 04-28 17:22 ?2257次閱讀
    AD9877單電源電纜調(diào)制解調(diào)器/<b class='flag-5'>機(jī)頂盒</b>混合信號(hào)前端技術(shù)手冊(cè)

    如何在 Raspberry Pi AI Camera 構(gòu)建為開發(fā)人員提供實(shí)時(shí)的智能應(yīng)用程序

    。最近推出的RaspberryPiAICamera是款功能強(qiáng)大的硬件,可讓您在RaspberryPi構(gòu)建功能強(qiáng)大的AI應(yīng)用程序。通過將人工智能推理卸載到IMX
    的頭像 發(fā)表于 03-25 09:37 ?832次閱讀
    如何在 Raspberry Pi AI Camera <b class='flag-5'>上</b>構(gòu)建為開發(fā)人員提供實(shí)時(shí)的智能<b class='flag-5'>應(yīng)用程序</b>!

    CUST_DEL后如何在S32K312安全恢復(fù)應(yīng)用程序

    AB Update 配置中,假設(shè)真實(shí)性得到確認(rèn),連續(xù) 8 次重置后,是否可以 CUST_DEL IVT 中給出地址的安全恢復(fù)應(yīng)用程序(不是基于 Jtag的)? 如果 IVT 丟
    發(fā)表于 03-17 07:47