日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

您好,歡迎來(lái)電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊(cè)]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>數(shù)值算法/人工智能>

詳細(xì)介紹在Mail.Ru云端視頻播放器的工作原理

大?。?/span>0.6 MB 人氣: 2017-10-11 需要積分:1

  Mail.Ru是俄羅斯最受歡迎的網(wǎng)站,最近我們?cè)贛ail.Ru云端新增了視頻流媒體服務(wù),最初開(kāi)發(fā)者想要的是“瑞士軍刀”那樣的通用型功能——可以播放任何格式的文件,并且可以在任何云設(shè)備上播放。

  上傳到云端的視頻內(nèi)容大多分為兩類:電影/劇集&用戶視頻。后者指的是用戶用手機(jī)或攝像機(jī)拍攝的視頻,這些視頻包括各種各樣的格式和編碼方式。由于多種原因,想要在其他終端用戶的設(shè)備上觀看這些視頻,如果不提前進(jìn)行標(biāo)準(zhǔn)化,就會(huì)出現(xiàn)“需要的解碼器不存在”,或者“文件大小超出限制無(wú)法下載”等錯(cuò)誤信息。

  

  本文將詳細(xì)介紹在Mail.Ru云端視頻播放器的工作原理,以及我們是如何使得云播放器“兼容并收”以確保最大限度支持終端用戶設(shè)備播放的。

  存儲(chǔ)與緩存:兩種方式

  類似YouTube、社交網(wǎng)絡(luò)等很多服務(wù)會(huì)將用戶所上傳的視頻自動(dòng)轉(zhuǎn)成恰當(dāng)?shù)母袷?。只有轉(zhuǎn)化后的視頻才能播放。在Mail.Ru云,我們采用了另一種辦法:在原始文件播放時(shí)進(jìn)行轉(zhuǎn)化。與一些專門的視頻托管網(wǎng)站不同,我們不能修改原始文件。為什么要選擇這種辦法呢?Mail.Ru云主要提供云存儲(chǔ)功能,如果用戶在下載文件時(shí)發(fā)現(xiàn)他們的文件質(zhì)量下降或者大小改變,就算只有輕微變化,也會(huì)招致用戶的不滿情緒。此外我們也無(wú)法支持存儲(chǔ)所有文件的預(yù)轉(zhuǎn)化副本——會(huì)占據(jù)太多空間。而且某些存儲(chǔ)文件可能根本不會(huì)有人去看,這樣做會(huì)導(dǎo)致很多的無(wú)用功。

  動(dòng)態(tài)實(shí)時(shí)轉(zhuǎn)換還有一個(gè)優(yōu)勢(shì):如果要修改轉(zhuǎn)換設(shè)置或增加功能,就無(wú)需對(duì)之前的視頻做重新轉(zhuǎn)換了。在這種情況下,一切都是動(dòng)態(tài)實(shí)時(shí)執(zhí)行的。

  工作原理

  針對(duì)在線視頻流,我們使用了蘋(píng)果創(chuàng)建的HLS(HTTP實(shí)時(shí)流媒體)格式。HLS的原理是將每個(gè)視頻文件切分成較小的片段(即“媒體分段文件”),然后加入播放列表,每個(gè)片段都有指定的名稱和時(shí)間長(zhǎng)度。舉個(gè)例子:時(shí)長(zhǎng)2小時(shí)的電影會(huì)被切分為720個(gè)媒體片段文件,每個(gè)時(shí)長(zhǎng)10秒。播放器根據(jù)用戶想要觀看的進(jìn)度,向列表請(qǐng)求相應(yīng)片段。HLS的好處之一在于:在播放器讀取文件標(biāo)頭時(shí),用戶無(wú)需等待便可開(kāi)始播放。

  這種格式還提供了重要的可能,那就是允許根據(jù)用戶的網(wǎng)速,實(shí)時(shí)調(diào)整所播放媒體的質(zhì)量,這就是所謂的自適應(yīng)流媒體(adaptive streaming)。例如,用戶一開(kāi)始使用3G網(wǎng)絡(luò),觀看媒體的分辨率為360p;但進(jìn)入LTE4G格式的一種)地區(qū)時(shí),就會(huì)自動(dòng)切換到720p或1080p。使用HLS時(shí)部署起來(lái)非常簡(jiǎn)單:播放器獲取“主播放列表”,其中包括適用于不同帶寬的交替播放列表。加載一個(gè)片段之后,播放器會(huì)評(píng)估當(dāng)前的網(wǎng)速,并據(jù)此確定下一個(gè)片段的質(zhì)量:是要保持相同、更低還是更高。我們目前支持的分辨率包括:240p、360p、480p、720p和1080p。

  后端

  詳細(xì)介紹在Mail.Ru云端視頻播放器的工作原理

  The Mail.Ru云服務(wù)包括三組服務(wù)器。第一組是應(yīng)用服務(wù)器,負(fù)責(zé)接收視頻流媒體請(qǐng)求:創(chuàng)建和返回HLS播放列表,分發(fā)轉(zhuǎn)化后的片段,設(shè)置轉(zhuǎn)換任務(wù)。第二組是數(shù)據(jù)庫(kù)服務(wù)器,使用嵌入式邏輯(Tarantool),負(fù)責(zé)存儲(chǔ)視頻信息和管理轉(zhuǎn)換隊(duì)列。第三組是轉(zhuǎn)換服務(wù)器,負(fù)責(zé)接收從Tarantool傳回的任務(wù)隊(duì)列,并在數(shù)據(jù)庫(kù)中記錄任務(wù)完結(jié)。當(dāng)接收到視頻文件片段的請(qǐng)求時(shí),我們首先會(huì)檢查數(shù)據(jù)庫(kù)服務(wù)器,查看其中是否包含已經(jīng)轉(zhuǎn)化好可用的相應(yīng)分辨率片段。這里有兩個(gè)可能的場(chǎng)景:

  第一個(gè):已經(jīng)有轉(zhuǎn)換好的片段,此時(shí),我們立刻將其返回。如果有人發(fā)送過(guò)請(qǐng)求,相應(yīng)片段就會(huì)存在。這屬于第一個(gè)緩存級(jí)別,對(duì)所有轉(zhuǎn)換文件都有效。值得一提的是:我們還有一個(gè)緩存級(jí)別,經(jīng)常被請(qǐng)求的文件會(huì)分發(fā)到多臺(tái)服務(wù)器上,避免網(wǎng)絡(luò)接口過(guò)載。

  第二個(gè)場(chǎng)景:沒(méi)有轉(zhuǎn)換好的片段。此時(shí),數(shù)據(jù)庫(kù)會(huì)創(chuàng)建轉(zhuǎn)換任務(wù)。之前提過(guò),我們的數(shù)據(jù)庫(kù)服務(wù)器使用了Tarantool,這是一個(gè)速度非??斓拈_(kāi)源NoSQL數(shù)據(jù)庫(kù),可以用Lua寫(xiě)入存儲(chǔ)過(guò)程。這里數(shù)據(jù)庫(kù)服務(wù)器負(fù)責(zé)存儲(chǔ)視頻信息及管理轉(zhuǎn)換隊(duì)列。應(yīng)用服務(wù)器與數(shù)據(jù)庫(kù)之間的通訊方式如下:應(yīng)用服務(wù)器發(fā)送請(qǐng)求:“我需要movie.mp4的第二個(gè)片段,分辨率為720p;請(qǐng)于4秒內(nèi)準(zhǔn)備好”。4秒內(nèi)它會(huì)收到在何處尋找相關(guān)片段的信息,或者錯(cuò)誤信息。因此,數(shù)據(jù)庫(kù)客戶端其實(shí)對(duì)如何執(zhí)行任務(wù)并不關(guān)心(無(wú)論是立即執(zhí)行還是通過(guò)一系列的復(fù)雜操作):它使用簡(jiǎn)單的接口,允許發(fā)送請(qǐng)求和接收被請(qǐng)求的數(shù)據(jù)。

  我們提供數(shù)據(jù)庫(kù)容錯(cuò)的辦法是主-副本故障轉(zhuǎn)移。數(shù)據(jù)庫(kù)客戶端只向主服務(wù)器發(fā)送請(qǐng)求,如果當(dāng)前的主服務(wù)器出現(xiàn)問(wèn)題,我們會(huì)將某個(gè)副本服務(wù)器標(biāo)記為主服務(wù)器,然后將客戶端重定向到新的主服務(wù)器上。在客戶端持續(xù)與主服務(wù)器交互時(shí),對(duì)于客戶端來(lái)說(shuō),這樣的主-副本切換是透明化的。

  除了應(yīng)用服務(wù)器之外,轉(zhuǎn)換服務(wù)器也可以作為數(shù)據(jù)庫(kù)客戶端。轉(zhuǎn)換服務(wù)器負(fù)責(zé)對(duì)視頻片段執(zhí)行轉(zhuǎn)換,現(xiàn)在需要一個(gè)與來(lái)源視頻文件相關(guān)聯(lián)的參數(shù)化的HTTP鏈接。數(shù)據(jù)庫(kù)與這種轉(zhuǎn)換服務(wù)器之間的通訊,類似于它與應(yīng)用服務(wù)器之間的通訊。轉(zhuǎn)換服務(wù)器發(fā)送請(qǐng)求:“給我一個(gè)任務(wù),我會(huì)等待10秒”,如果在10秒內(nèi)收到任務(wù),就會(huì)發(fā)送給正在等待的那個(gè)轉(zhuǎn)換服務(wù)器。在Tarantool中,我們使用Lua的IPC通道,實(shí)現(xiàn)客戶端到轉(zhuǎn)換服務(wù)器的任務(wù)轉(zhuǎn)發(fā)。通道允許不同請(qǐng)求之間的通訊,下面是轉(zhuǎn)換片段的簡(jiǎn)單代碼:

  functionget_part(file_hash, part_number, quality, timeout)-- Trying to select the requested fragmentlocalt = v.fragments_space.index.main:select(file_hash, part_number, quality) -- If it exists — returning immediatelyift ~= nil thenreturnt end-- Creating a key to identify the requested fragment, and an ipc channel, then writing it-- in a table in order to receive a “task completed” notification laterlocaltable_key = msgpack.encode{file_hash, part_number, quality} localch = fiber.channel(1) v.ctable[table_key] = ch -- Creating a record about the fragment with the status “want to be converted”v.fragments_space:insert(file_hash, part_number, quality, STATUS_QUEUED) -- If we have idle workers, let’s notify them about the new taskifs.waitch:has_readers() thens.waitch:put(true, 0) end-- Waiting for task completion for no more than “timeout” secondslocalbody = ch:get(timeout) ifbody ~= nil thenifbody == falsethen-- Couldn’t complete the task — return errorreturnbox.tuple.new{RET_ERROR} else-- Task completed, selecting and returning the resultreturnv.fragments_space.index.main:select{file_hash, part_number, quality} endelse-- Timeout error is returnedreturnbox.tuple.new{RET_ERROR} endendlocaltable_key = msgpack.encode{file_hash, part_number, quality} v.ctable[table_key]:put(true, 0)

  真正的代碼會(huì)更復(fù)雜:比如還得考慮請(qǐng)求的時(shí)候,片段出現(xiàn)“被轉(zhuǎn)換”狀態(tài)。多虧了這個(gè)方案,有新任務(wù)時(shí)轉(zhuǎn)換服務(wù)器會(huì)立刻獲得通知,任務(wù)完成時(shí)客戶端會(huì)立刻獲得通知。這一點(diǎn)非常重要,因?yàn)橐曨l加載的時(shí)間越久,用戶越有可能在視頻開(kāi)始播放前關(guān)閉頁(yè)面。

非常好我支持^.^

(0) 0%

不好我反對(duì)

(0) 0%

詳細(xì)介紹在Mail.Ru云端視頻播放器的工作原理下載

相關(guān)電子資料下載

      發(fā)表評(píng)論

      用戶評(píng)論
      評(píng)價(jià):好評(píng)中評(píng)差評(píng)

      發(fā)表評(píng)論,獲取積分! 請(qǐng)遵守相關(guān)規(guī)定!

      ?
      澄城县| 怀宁县| 广东省| 荣昌县| 资阳市| 易门县| 江口县| 吴旗县| 霸州市| 焦作市| 茶陵县| 沁源县| 定陶县| 望江县| 自贡市| 呼伦贝尔市| 高淳县| 赤壁市| 唐海县| 新密市| 临澧县| 广德县| 囊谦县| 高平市| 彰化市| 博罗县| 云和县| 蕲春县| 密云县| 景谷| 天门市| 瓦房店市| 巢湖市| 吉木萨尔县| 塘沽区| 尉氏县| 长乐市| 新巴尔虎左旗| 玛多县| 资阳市| 新余市|