天天看點

FFmpeg基于HLS實作大視訊分片下載下傳播放[視訊直播二]

關于HLS,上篇咱們已經講過,它基于http協定,内容包括兩部分:m3u8描述檔案,ts媒體檔案。

它可以實作視訊直播,不過直播有點延遲,延遲大小與循環體的大小有關。我們将要利用它的循環體,來實作大視訊的分片下載下傳播放。

問:怎麼将一個視訊分片得到m3u8檔案?

答:利用ffmpeg工具。

問:那麼什麼是FFmpeg呢?

答:FFmpeg是一套可以用來記錄、轉換數字音頻、視訊,并且将其轉化為流的開源程式。

它提供了錄制、轉換及流化音視訊的完整解決方案。包含非常先進的音視訊編碼解碼庫libavcodec。

FFmpeg是在Linux平台下開發,但它可以在其他作業系統環境中編譯運作。FF代表 fast forward 。

問:FFmpeg的組成?

答:主要包含三部分:

第一部分是四個作用不同的工具軟體,分别是:

ffmpeg.exe,ffplay.exe,ffserver.exe和ffprobe.exe。

•ffmpeg.exe:音視訊轉碼、轉換器

•ffplay.exe:簡單的音視訊播放器

•ffserver.exe:流媒體伺服器

•ffprobe.exe:簡單的多媒體碼流分析器

第二部分是可以供開發者使用的SDK,為各個不同平台編譯完成的庫。

如果說上面的四個工具軟體都是完整成品形式的玩具,那麼這些庫就相當于樂高積木一樣,我們可以根據自己的需求使用這些庫開發自己的應用程式。這些庫有:

•libavcodec:包含音視訊編碼器和解碼器

•libavutil:包含多媒體應用常用的簡化程式設計的工具,如随機數生成器、資料結構、數學函數等功能

•libavformat:包含多種多媒體容器格式的封裝、解封裝工具

•libavfilter:包含多媒體處理常用的濾鏡功能

•libavdevice:用于音視訊資料采集和渲染等功能的裝置相關

•libswscale:用于圖像縮放和色彩空間和像素格式轉換功能

•libswresample:用于音頻重采樣和格式轉換等功能

第三部分是整個工程的源代碼,無論是編譯出來的可執行程式還是SDK,都是由這些源代碼編譯出來的。

FFmpeg的源代碼由C語言實作,主要在Linux平台上進行開發。FFmpeg不是一個孤立的工程,它還存在多個依賴的第三方工程來增強它自身的功能。在目前這一系列的博文/視訊中,我們暫時不會涉及太多源代碼相關的内容,主要以FFmpeg的工具和SDK的調用為主。到下一系列我們将專門研究如何編譯源代碼并根據源代碼來進行二次開發。

下載下傳與安裝FFmpeg

《FFmpeg官網》

FFmpeg基于HLS實作大視訊分片下載下傳播放[視訊直播二]

配置環境變量

FFmpeg基于HLS實作大視訊分片下載下傳播放[視訊直播二]
FFmpeg基于HLS實作大視訊分片下載下傳播放[視訊直播二]

【使用】

在視訊所在的檔案夾,輸入以下指令(我這裡有一個123.mp4的電影):

FFmpeg基于HLS實作大視訊分片下載下傳播放[視訊直播二]
FFmpeg基于HLS實作大視訊分片下載下傳播放[視訊直播二]

初始視訊位址123.mp4

hls_time 10 表示切片視訊的時長,預設為2

hls_list_size 表示 m3u8 檔案記錄切片的數量,預設為5.即隻記錄最後5條切片,設定為0表示記錄所有切片

漫長的等待.......

問:浏覽器怎麼播放m3u8格式的視訊?

答:使用safari浏覽器打開就可以播放

但是,在其他浏覽器上卻:

FFmpeg基于HLS實作大視訊分片下載下傳播放[視訊直播二]

是以我們得調成使用flash播放,這裡使用的是swfobject.js。《StrobeMediaPlayback.swf》

【拓展:swfobject.js】

首先,我們要為SWF資源預留一個HTML結點。這個HTML結點内的所有内容都會在用戶端被Flash資源替換,當用戶端沒有安裝Flash播放器的時候,這些内容會顯示出來。這一特色在SEO以及對使用者體驗方面非常有必 要。

大功告成!!!!

FFmpeg基于HLS實作大視訊分片下載下傳播放[視訊直播二]