實現MP4文件邊下載邊播放

最近遇到的需求,在老系統中有部分MP4視頻在播放時需要完全加載完才能播放,使得用戶體驗很差(現在都是邊下載邊播放模式),造成這種情況的原因是用來描述MP4文件的moov atom元數據被放在MP4文件的末尾,而大部分網絡播放器都會去讀取這個元數據用以確認視頻長度,分辨率等等參數,因此只需要將MP4文件的moov atom元數據移到最前面就行,問題明白了,就能夠開始解決了,這裏使用的是qt-faststart工具。
qt-faststart能夠將處於MP4文件末尾的moov atom元數據轉移到最前面,不過由於qt-faststart工具只能處理moov atom元數據位於MP4末尾的文件,所以需要其他工具先將moov atom元數據轉移到末尾,這樣好統一處理MP4文件,這裏使用到了ffmpeg共具。
現在整體思路是將MP4文件通過ffmpeg處理,將moov atom元數據轉移至末尾,然後使用qt-faststart工具轉移至最前面。
現在以linux環境爲例子介紹下實際處理流程。
需要用到的工具:
1.yasm-1.2.0.tar.gz,安裝ffmpeg時所需要的,下載地方百度一下就有,就不放了。
2.ffmpeg-3.3.3
直接官網下載壓縮包http://www.ffmpeg.org/download.html
SVN

svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg

3.qt-faststart,因爲源代碼文件在ffmpeg中有,所以不需要單獨下載了。

首先安裝yasm

1.將yasm-1.2.0.tar.gz拷貝至linux服務器中。
2. 解壓

tar zxvf yasm-1.2.0.tar.gz
  1. 進入解壓文件
cd yasm-1.2.0

4.配置

./configure

5.編譯安裝

make
make install

安裝完畢後開始安裝ffmpeg

1.將下載的壓縮包拷貝至linux服務器。
2.解壓

tar -jxvf ffmpeg-3.3.3.tar.bz2

3.配置

./configure --enable-shared --prefix=/usr/local/ffmpeg
prefix就是設置安裝位置,一般都默認usr/local

4.安裝

make
make install

編譯安裝時間會很長,10分鐘左右吧,裝完以後可以去安裝目錄下查看。

這時還沒有結束,現在使用的話一般會報如下錯誤:

ffmpeg: error while loading shared libraries: libavfilter.so.1: cannot open shared object file: No such file or directory

需要編輯/etc/ld.so.conf文件加入如下內容
/usr/local/lib
保存退出後執行ldconfig命令。

echo "/usr/local/ffmpeg/lib" >> /etc/ld.so.conf
//注意這裏是你前面安裝ffmpeg的路徑
ldconfig

安裝qt-faststart

因爲在ffmpeg解壓完的文件中存在qt-faststart的源碼,所以直接使用,位置在解壓路徑/tools/qt-faststart.c
進入ffmpeg解壓路徑執行命令

make tools/qt-faststart 

會看到在tools中會出現一個qt-faststart文件(還有一個.c文件)

對MP4進行操作

1.ffmpeg將元數據轉移至末尾

cd ffmpeg安裝路徑/bin;./ffmpeg -i /opt/mp4test.mp4 -acodec copy -vcodec copy /opt/1.mp4
// /opt/mp4test.mp4爲原始MP4文件路徑,/opt/1.mp4爲生成文件的存放路徑

2.qt-faststart操作

cd ffmpeg壓縮包解壓路徑/tools;./qt-faststart /opt/1.mp4 /opt/2.mp4
//路徑如上解釋

可以嘗試播放1.MP4和2.MP4,前者需要加載完畢才能播放,後者可以邊加載邊播放。
在用戶&&管理員上傳視頻文件時在後臺處理一下上傳的mp4文件即可,我這裏的方案是上傳完文件後,由頁面服務器後臺獲取到存儲在數據庫中視頻的地址,然後通過遠程連接訪問視頻服務器,對該mp4文件進行如上操作,ffmpeg操作後將原文件刪除並記錄下文件名&路徑,然後qt-faststart再根據記錄的文件名&路徑生成原始文件的同名文件,然後刪除ffmpeg過程生成的臨時文件即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章