洞察 video 超能力系列——玩轉 mp4

2021-02-14 字節跳動技術團隊

這兩張圖不難看出,在默認情況下 mp4 使用一次 http 請求所有的視頻數據,Youtube 則分次請求。當然這個描述很不專業,但確實形象。造成這種差異的是 video 不支持流式的視頻數據,Youtube 採用的是流式的視頻容器 webm,而 mp4 是非流式的。那如何解釋清楚流式的視頻數據呢,從專業的角度三言兩語很難說清楚,但用大白話翻譯過來就是流式的視頻數據支持分段獨立播放,非流式的不可以。換句話說一個10M的視頻文件,流式的視頻可以把0~1M的數據請求回來單獨播放,但是非流式的不可以。

上面我們描述了視頻格式的不同,接下來我們要說的是第一張圖中的視頻加載是瀏覽器來控制的,通過給 video 的 src 屬性配置視頻地址,觸發播放之後瀏覽器就會開始下載了,JS幹涉不了。而 Youtube 的視頻加載是通過JS來控制的,各位可以再次看下第二張圖的網絡請求類型:xhr,足以證明這一點。

上面兩點搞清楚之後我們就該說下清晰度切換的事情了。這個需求大家都不陌生,但是直接使用 mp4 格式做無縫清晰度切換,難度還挺大的。先解釋下「無縫清晰度切換」的概念:從播放一個解析度的視頻到另一個解析度且保證畫面、聲音不停頓的平滑切換過程。了解了這個概念,大家應該知道了用 video 無縫切換 mp4 有多難。一方面,video 是不支持流式的視頻格式的,一方面,video 的加載是不受JS控制的。通過切換 video 的 src 屬性,必然會導致畫面中斷、重新請求視頻數據等。有的同學想到說利用兩個 video 再結合 z-index 來搞,但是當你生成另一個video去加載視頻的時候,無法保證兩個畫面是嚴格一致的,即使將原來的畫面暫停到一個時刻,用另一個視頻通過 currentTime 屬性與之同步,切換仍然看到畫面閃爍,基本無法和 Youtube 無縫切換的體驗匹敵。而且還會造成更多流量的浪費,背後的原因大家可以研究下 mp4 容器和 webm 容器的異同,也可以看下視頻解碼相關的文章。

還有一種方法就是將 mp4 格式統統轉碼到流式的視頻格式比如 hls、webm 等。不過這種看上去可行的方式實際上會帶來很大的成本開銷,如將大量視頻做轉碼會消耗高昂的機器資源、雙倍存儲的費用、CDN的雙倍費用等等。其實我們也是在這種背景下研究出來新的技術問題解決清晰度無縫切換的。

首先,我們改變對 mp4 視頻的播放流程,不再直接使用 video 的 src 來播放,因為我們沒有任何可以操作的空間。video不僅支持 src 屬性還支持 Blob 對象,我們就是利用後者。播放的流程如下:

圖1.3 mp4 視頻新播放流程

來請求 mp4 視頻數據,這樣可以結合視頻 Range 服務,做到精確加載。

編寫解析器將加載回來的部分 mp4 視頻數據進行解復用

將解復用的視頻數據轉成 fmp4 格式並傳遞給 MediaSource

使用 video 進行解碼完成播放

然後在做清晰度切換的時候流程如下:

圖1.4 mp4視頻清晰度切換原理示意圖

相關焦點

  • HTML的video元素
    video元素是HTML5規範新增加的元素,用於支持在網頁文檔中播放視頻。在HTML5規範出現之前,標準網頁文檔是不支持視頻播放的。為了解決在網頁中播放視頻的問題,HTML5規範增加了video元素,網頁設計者可以通過video元素在網頁中引入視頻,支持HTML5規範的瀏覽器會自動播放由video元素引入的視頻,並提供播放控制條。video元素使用video標籤,在video標籤中有三個比較重要的屬性。
  • Vue-使用vue-video-player組件
    2.引入組件在main.js文件中引入組件import VuevideoPlayer from 'vue-video-player';import 'video.js/dist/video-js.css';
  • Bilibili video downloader
    Today, I am going to teach you how to crawl the video from the bilibili website.        self.url = 'https://www.bilibili.com/video/' + bv        # starting time for download the video        self.start_time = time.time()    #crawl the video:
  • 如何將B站緩存m4s文件無損轉換為mp4格式
    audio. m4s即音頻文件,video. m4s即視頻文件,將這兩個文件拖到桌面備用。2.把剛才桌面上的audio. m4s文件和video文件拖到此界面,如圖此時我們切換到剛才的bin文件夾,發現生成了一個output文件,此文件就是剛才的audio. m4s,video. m4s合成的mp4文件我們可以發現output文件的大小近似等於兩個m4s文件的大小之和。
  • 十二星座的「超能力」系列篇——金牛座!
    十二星座之超能力,每個星座都有自己擅長的超能力,這些超能力是我們的優點。小編今天開始,儘快更新出這個系列篇!大家都有自己的超能力!只是身在其中不知道罷了!來吧,讓我們看看第二位出場的金牛座,有哪些超能力!
  • 還是美國特效刺激 高口碑「超能力」系列電影排名
    還是美國特效刺激 高口碑「超能力」系列電影排名 2017-06-14 15:45:45 來源:頭條 作者:森木影院 編輯:genesis 瀏覽:loading
  • 市第四屆大學生社團禁毒文化節將開展系列活動
    抗擊疫情 宣傳先行——獻給每一位平凡的宣傳人 var flashvars={ f:'http://media.snxw.com/masvod/public/2020/02/14/20200214_17043d5b9db_r1.mp4
  • 好課資源共享:Lesson 35.mp4
    Lesson 35.mp4lesson 34 The Play Date.mp4Lesson 33 The Broken Clock.mp4Lesson 32 The Lucky Penny.mp4Lesson 31 At the Park&The Good Dog.mp4Lesson
  • 下載MP4格式視頻的教程
    很多人不知道MP4視頻如何下載,今天我來教大家一下,市面上很多視頻播放器都是支持緩存下載的,比如說用pptv這個軟體就能下載mp4格式的視頻!其他視頻平臺也同樣支持下載,但下載出來的視頻有些是MP4,有些是是avi、swf、mp4、mkv、mov等高清格式,那麼就可以用其他軟體將它格式轉換為MP4,輕輕鬆鬆將愛奇藝、芒果的mtv視頻轉換成mp4格式了。1、迅捷視頻轉換器手機視頻與電腦視頻格式互轉利器,基礎功能免費!
  • 使用HTML5 video標籤的一系列問題
    H5標籤的video,我想寫過前端代碼的人,都不會陌生吧。但video標籤還是有一些問題。一、PC端的兼容問題;H5的標籤不兼容ie8包括ie8以下的瀏覽器;解決辦法:使用js的庫video.js,Video.js 自動檢測瀏覽器對HTML5 的支持情況,如果不支持HTML5則自動使用Flash 播放器。
  • 僅299元智能MP4!原道智能N3開箱簡評
    很明顯的是,同質化局面下mp4極有可能從「縮小的蛋糕」,將演變成一塊被擴大的戰場。    2010年末,搭載android系統的智能mp4浮出水面,有著成熟方案支持的原道數碼推出了一系列智能機型,N5/N6/N9/N5PRO等機型在視覺過剩、消費混亂的高清mp4世界中,牢牢抓住用戶的眼球。    智能mp4的替代效應,推動整個行業醞釀著新一輪的變化。
  • 營業第六天 | 今天是超能力事務所
    即使不能隨意控制,它的發生頻率卻大到足以覆蓋他一半的人生,姑且理解為超能力也不過分。西澤老師對於科幻推理更熾烈的愛體現在他為此創作了一個系列。以神麻嗣子為主人公的系列短篇集及長篇,特點其一就是所有犯罪和解答都和超能力有關。簡直可以說是為了滿足西澤老師對本格推理+推理作家+美女刑警+可愛美少女結合的終極願望。
  • 什麼剪輯器可以處理mp4格式的視頻文件?
    網絡上,有很多視頻文件,它們大多是mp4格式的,這就方便了很多搞視頻剪輯、製作的小夥伴。因為mp4格式的視頻文件比較常見,很多工具都支持打開、查看以及編輯它們,不像很多其他格式的視頻,要編輯還得先轉mp4格式。
  • 名畫圖鑑|為何莫奈「睡蓮」系列獨得頂級藏家的偏愛?
    https://flv1.gmw.cn/gmw/videoroot/2020-07-10/1594384958292.mp4
  • 有哪些qsv轉換mp4格式的方法步驟?
    上次,我給大家分享了一個把qlv格式的騰訊視頻轉換成為常見的mp4格式視頻的操作教程後,就有很多小夥伴催我趕緊出一個「qsv轉換mp4格式」的方法步驟。因為最近愛奇藝新出了一部大熱的ip電視劇,但qsv格式的視頻有很多平臺、設備上的播放限制,為了實現看劇自由,所以大家就急著想要學習把qsv格式愛奇藝視頻轉mp4視頻的方法。我一邊感嘆我的粉絲朋友們這麼熱心學習,一邊也不停下手,連忙給大家出了這篇圖文教程。因為我日常使用的是迅捷視頻轉換器,這次照舊,依舊是以它作為工具,給大家分解步驟。
  • 如果我們讀科幻小說的話超能力會是什麼?雙魚座心靈感應
    現在,很多年輕人喜歡看科幻劇,比如復仇者,其中有很多英雄,超能力,這些人是我們的青春和感情,所以如果12星座通過科幻小說,超能力會有什麼?來看看你的!NO.4巨蟹座--百發百中大多數巨蟹座的人視力好,視力高,捕捉顏色的能力強,因此如果他們穿越科幻劇,就會有超能力的鷹眼,可以用百發百中來形容!
  • 好課資源共享:Lesson 29 At School& Fun at School.mp4
    Lesson 29 At School& Fun at School.mp4Lesson 28 Tom & Baby.mp4Lesson 27 Out to Play& A Rainy Day.mp4Lesson 26 My Big Brother & A Day at...