1. 程式人生 > >利用ffmpeg修改MP4檔案頭資訊,使其支援流式載入及播放

利用ffmpeg修改MP4檔案頭資訊,使其支援流式載入及播放

最近在用AS3寫一個Flash的播放器,發現同樣都是H264編碼的mp4檔案,有的可以載入一點就開始播放,有的就必須全部載入完才能播。

用本地播放器(potplayer,暴風影音等)開啟檢視,發現編碼什麼的也都是一樣的:



左邊這個必須是全部載入完成才能播,右邊這個是一載入就能播。

然後問了同事一下,說可能肯頭資訊的資料順序有關。這裡提供一個工具:mp4info.exe


附上下載地址:

這個小工具可以檢視mp4檔案的結構資訊:


要是視訊可以已載入就能播放,需要在視訊頭部插入metaData資訊,也就是上面的圖中的moov->udta->meta中的資料

如果這個結構在視訊檔案的末尾,或者根本沒有這些資料,那麼就只能等全部載入完之後才能播放。

下面是網上的一篇帖子裡介紹的方法:

讓Flash播放器支援播放MP4檔案,並解決不能邊載入邊播的問題



一、讓Flash播放器支援MP4,需要將編碼轉換為h.264編碼的MP4。

二、解決邊載入邊播放的問題,將MP4中Metadata資訊移至檔案頭部,具體方法如下:

第1步:下載安裝ffmpeg

在windows下使用

點選頁面上的Download FFmpeg git-738ebb4 64-bit Static(我是64位的),如果你是32位點選 Download FFmpeg git-738ebb4 32-bit Static
下載下來解壓縮後我把資料夾改成了ffmpeg放在D盤下面
執行三個檔案:
D:ffmpeg/bin/ffmpeg.exe

D:ffmpeg/bin/ffplay.exe
D:ffmpeg/bin/ffprobe.exe
這就成功安裝了


第2步:新增qt-faststart到ffmpeg/bin目錄

下載qt-faststart

解壓將qt-faststart.exe放到d:ffmpeg/bin/ 裡面


第3步:執行修改metadata命令

在開始->執行裡輸入cmd,彈出命令視窗
按下面的命令進行操作
輸入d:按回車
輸入cd ffmpeg/bin回車,這樣就進入了ffmpeg的目錄
再執行命令:qt-faststart.exe d:/1.mp4 d:/2.mp4
說明:1.mp4為原mp4檔案,2.mp4為修改後儲存的檔案

最後出來的這個2.mp4就是成功的了,即可支援邊載入邊播放.

附上備份的下載地址:

然後我按照這個方法轉了2個視訊,其中一個成功了,實現了一載入就播放,


另外一個轉了之後還是不行,然後我用上面的工具看了一下,發現:


雖然moov結構被提到了前面的位置,但是這裡面並沒有udta,也就沒有metaData,所以這個視訊無法邊載入邊播放,需要重新編碼補充metaData資訊才可以。