1. 程式人生 > >微雲視訊轉碼架構介紹

微雲視訊轉碼架構介紹

640?wx_fmt=gif

1. 背景

微雲日上傳視訊數達到140萬個,每日播放視訊次數達到1000w次,線上播放視訊成為強烈的需求。但是在PC WEB、H5的播放體驗並不好,原因有兩個:

(1)播放元件支援的視訊格式少,僅支援MP4、MOV等H.264編碼的視訊;

(2)部分視訊(特別是UGC視訊)位元速率過大,導致播放卡頓。

所以我們決定對微雲的視訊轉碼,提供流暢的視訊線上播放體驗。

2. 轉碼原理

原視訊存放在架平倉庫,轉碼視訊時需要先下載視訊到本地,再對下載好的視訊轉碼得到新視訊,最後再把新視訊上傳到雲端。簡單的轉碼流程如下:

640?wx_fmt=png

為了能在各個客戶端上流暢地播放視訊,我們需要把原視訊轉碼成H.264/AAC編碼、低位元速率的MP4視訊。視訊檔案主要由視訊流和音訊流等資訊組成,其中視訊流和音訊流有著不同的編碼格式。轉碼的過程如下圖,先解封視訊,分別提取視訊流和音訊流,把視訊流轉為H.264格式,把音訊流轉為AAC格式,然後再封裝起來得到新視訊。

640?wx_fmt=png

我們這裡選擇FFmpeg作為視訊轉碼元件。因為FFmpeg是一個成熟的開源、跨平臺元件,支援多種格式的音視訊轉碼,並提供了一套錄製、轉換以及流化音視訊的完整解決方案。

3. 轉碼架構設計

3.1 哪些視訊需要轉碼?

微雲的存量視訊達到40P,如果都轉碼這些視訊,顯然不太現實,也沒有必要,因為存量視訊的點選播放率較低,投入產出比太低。所以我們經過分析,發現使用者一般是分享視訊的場景下,更多的點選播放視訊。好鋼用在刀刃上,花錢花在跟節眼上,在機器資源有限的情況下,所以我們決定對分享的視訊再進行轉碼。

3.2 轉碼後的新視訊存在哪裡?

原視訊轉碼後會產生新視訊,新視訊的存放應該滿足這幾個條件:

(1)使用者不感知。由於是後臺自動轉碼,所以使用者不應該感知到有新視訊的存在,否則會引起使用者誤會,導致使用者投訴或新視訊被刪。

(2)併發上傳視訊不衝突。由於多個視訊在同時轉碼,所以上傳新視訊時相當於併發寫操作,這裡需要做到併發寫無衝突。

(3)下載速度穩定。

經過討論,我們最後選擇了騰訊雲COS儲存系統來存放新視訊。因為新視訊不能存放在原視訊的使用者的目錄下,否則會使用者會感知到;也不能存在公共的FTN賬號上,因為FTN底層做了對寫排隊保護,如果併發上傳過多,容易導致佇列滿而失敗。而COS系統滿足上面三個條件,支援單目錄併發寫,不容易衝突。

3.3 下載、轉碼、上傳操作流水線化

前面提到,轉碼視訊時需要先下載視訊到本地,再對下載好的視訊轉碼得到新視訊,最後再把新視訊上傳到雲端。

舉個例子,假如有A、B兩個視訊需要轉碼。在同步轉碼模式下,下載模組下載完原視訊A的資料後,轉碼模組拿到視訊A的資料開始轉碼,這時候下載模組就空閒,直到上傳模組把視訊上傳到COS、結束視訊A的完整轉碼過程,下載模組才會開始下一個轉碼任務:下載視訊B的資料。在整個轉碼過程中,每個模組都在等待其他兩個模組的操作完成而空閒著,這樣的轉碼效率低下,白白浪費了很多時間。

640?wx_fmt=png

顯而易見,這三個模組都是後者依賴前者的輸出結果,也就是說,一旦前者輸出結果後,後續的模組的操作和前者就再無關係。根據這個特點,我們在每個模組之前加入佇列,把下載、轉碼、上傳操作非同步化,各個模組之間不再同步等待轉碼結束,而是在完成本模組的任務後,繼續從佇列裡面取下一個任務。這樣就實現了轉碼的流水線化,極大地提高轉碼效率。簡單流程如下:

640?wx_fmt=png

這裡我們使用Gearman元件來實現佇列功能,Gearman是一個強大的分散式任務管理元件。詳細介紹可以參見Gearman官網,這裡先不展開詳細介紹了。

3.4 總體架構

經過前面的推論,我們設計出了視訊雲播轉碼的總體架構。如下:

(1)由分享場景觸發視訊轉碼,雲播邏輯server把待轉碼視訊放到下載佇列中,等待轉碼。

(2)使用者播放已轉碼視訊時,從公網直連COS邊下邊播,實現雲播功能。

640?wx_fmt=png

4. 運營部署

目前雲播轉碼模組已經部署到外網環境,其中使用了40臺V8機器來轉碼視訊,目前已hold住業務分享場景的日常轉碼、雲播需求。

5. 未來規劃

由於資源有限,我們的轉碼方案只滿足了分享場景的轉碼需求,並沒有完成覆蓋業務的所有場景。上述轉碼方案其實也是屬於預轉碼,並不能保證所有轉碼過的視訊都會被播放。後續我們計劃實現實時轉碼功能,通過使用者播放操作觸發轉碼,這樣能最大化利用機器資源,做到百分百覆蓋雲播場景。

公眾號推薦:

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

相關推薦

視訊架構介紹

1. 背景微雲日上傳視訊數達到140萬個,每日播放視訊次數達到1000w次,線上播放視訊成為強烈

c#對接阿里視訊服務之刪除

先講刪除,上傳和接收轉碼之後講。 首先阿里雲的視訊轉碼服務的原始檔和轉碼後的檔案以及視訊的封面會儲存在阿里雲的物件儲存OSS裡,我的做法是分兩個Bucket,一個用來存放原始檔,一個用來存放轉碼後的檔案以及視訊封面。所以我們在刪除的時候要全部刪除。 C#直接引用阿里雲的Al

阿里視訊

儲存在OSS上的多媒體音視訊資料,可以通過經濟、彈性、高擴充套件的阿里雲媒體轉碼服務,轉換成適合在移動端、PC、TV上播放的格式。 媒體轉碼核心能力包括: 轉換媒體格式,支援多平臺播放。 保證相同畫質質量的前提下,調整視訊位元速率、

java 視訊

前臺通過ajaxfileupload外掛上傳提價資料: $.ajaxFileUpload({     url : "${ctx}/h5/h5preventiveEdu/updateEdu",//增加與修改通用     secureuri : false

ffmpeg和mencoder實現視訊

  最近研究了一下視訊轉碼的問題,參考了部落格https://blog.csdn.net/wdy_2099/article/details/71453602?utm_source=blogxgwz3 具體內容這裡不再說了,安裝可參考https://www.cnblogs.com/new-ass/p/7704

linux+java+ffmpeg 實現音視訊技術

linux+java+ffmpeg 實現音視訊轉碼技術 執行命令 1.安裝lame-3.1.0 tar -zvxf lame-3.1.0.tar.gz //解壓 cd lame-3.1

阿里媒體MTS產品優勢

媒體轉碼(ApsaraVideo for Media Transcoding)是為多媒體資料提供的轉碼計算服務。它以經濟、彈性和高可擴充套件的音視訊轉換方法,將多媒體資料轉碼成適合在PC、TV以及移動終端上播放的格式。適用於音視訊網站、線上教育、金融視訊、電商視訊等多種場景。 課程連結:阿里雲媒

javaweb中ffmpeg視訊h264出現卡住不執行的解決辦法(看到最後面就是答案了)

鄭文亮 專心地鑽研程式設計,每天進步一點點 部落格園 首頁 新隨筆 聯絡 管理 隨筆-1610  文章-3  評論-5

如何最快地批量執行音視訊

    為什麼要有這個需求?我們知道,單純的轉format ,不轉codec ,其實僅僅是io 操作,這個操作是很快的,但是一旦需要decodec & encodec ,這個操作是非常耗時,耗cpu的,因為這個地方有解壓縮和壓縮的操作。如果批量任務需要轉碼,而且是同時轉碼

前端視訊flv->swf

在專案中本來是要用<video>標籤插入視訊,但此標籤不支援flv格式,上網也是搜了很多,試了很久才成功(其他格式不是很清楚你們可以嘗試看看) 所用技術 flach (Flvplayer.swf),ckplayer.js,jq //連結:http://www.zgtyjs.org/educat

HandBrake for Mac(專業的視訊器)

HandBrake for Mac是一款執行在Mac平臺上視訊解碼器,你可以使用handbrake mac版將各種型別的DVD快速轉換為MPEG,而且支援任何類似的VIDEO_TS資料夾、.VOB、.TS檔案等DVD的源,簡單實用,有需要視訊轉碼工具的朋友可以試試這款hand

如何搭建視訊叢集、播放伺服器

本文由作者張遠道授權網易雲社群釋出。 轉碼叢集的搭建 隨著媒體技術的發展,以及硬體裝置的普及和移動裝置的觸角延伸之社會各個角落,人們可以隨時隨地產生資訊。而這些海量資訊中,有不少多媒體資訊。多媒體信 息成為了人們資訊分享的重要方式。毫不誇張地說,現在是一個資訊爆炸的時代。傳統的電視,電影,視訊網站,及至移

Android FFmpeg視訊並儲存到本地

本文講述在Android中, 如何將FFmpeg視訊轉碼為YUV格式並儲存到本地。 配置好之後,我們先來明確下概念,FFmpeg解碼的流程是固定的 av_register_all: 註冊所有元件 avformat_open_input : 開啟輸入視訊檔案

Java實現視訊 mp4檔案編碼集

相關jar 下載路徑 import java.io.File; import it.sauronsoftware.jave.AudioAttributes; import it.sauronsoftware.jave.Encoder; import it.sa

PHP+ffmpeg+nginx的配置實現視訊

最近專案中需要實現上傳視訊過程中自動轉碼MP4格式的功能,想到了用FFmpeg來實現它,但從來沒有操作過,查閱了很多資料,遇到了好多問題,現在終於安裝成功,覺得應該寫下來與人分享一下,以免有人遇到和我一樣的困境。 首先我是CentOs 6.7版本 環境是LNMP 我需要用P

騰訊視訊,把qlv格式轉換成mp4格式

     最近需要在公眾號上傳視訊,但是大於20M的視訊需要到騰訊視訊上傳,在騰訊視訊上下載的視訊是qlv格式,要在騰訊視訊上傳必須是其他主流視訊格式,如mp4這樣的,真是坑。所以就需要我把視訊轉換格式,但是在格式工廠等都不能轉,而有個迅捷視訊轉換非VIP使用者只有一次轉換同

EditReady for Mac 2.5.2破解版 — 視訊工具

軟體介紹 EditReady for Mac是Mac平臺上的一款視訊轉碼工具,為專業的視訊從業人員提供了簡單、快速和強大的轉碼功能,沒有強大的介面或過時的格式選擇。MOV, MP4和MXF媒體都可以在ProRes或DNxHD中快速轉換為編輯現成的quicktime影片。 **EditReady for M

智慧政務平臺建設方案架構介紹

大資料技術的應用與發展正在讓我們的生活經歷一場深刻的“變革”,而且這種變革幾乎讓所有人都感覺非常舒服,自然而然的就完成了這樣的一個變化。最根本的原因其實是大資料技術的應用真正幫助我們解決了問題。我想也正是基於大資料技術的超強實用性吧,它才會被上升到國家戰略層面的高度得以出現在

ffmpeg 視訊例子集合

http://rodrigopolo.com/ffmpeg/cheats.php vfilter 加水印 ffmpeg -i d:/l.mpg -vf "movie=720576.png [watermark]; [in][watermark] overlay=10:10 [out]"  -b 3500k

通過FFmpeg將rtsp流攝像頭視訊為rtmp播放

注意:用這種方式可以顯示攝像頭視訊,但是存在諸多問題,無法正常投入使用,包括卡頓跟延遲,請想要借鑑的朋友慎重使用。        前幾天經理給我安排了一個新任務,將網路攝像頭用rtsp協議在頁面播放,因為我以前做的是http協議的,根據攝像頭的API來實現的,