mp4轉h264檔案
本文最目標是基本的mp4v2介面的使用,並且實現乙個簡單的提取mp4檔案裡面264流的功能;
1.264檔案基本知識
下看看h264檔案的基本常識
nal 頭 0x00 0x00 0x00 0x01
sps :nal+0x67開頭
pps :nal+0x68開頭
i幀 0x65 開頭
p幀…
具體的參考別人的解析
2.mp4v2提取264檔案的**
#include
#include
#include
#include
#include
#include
#include
#include
unsigned
char sps[64],pps[64];
int spslen = 0,ppslen = 0;
int get264stream(mp4filehandle omp4file,int vtrackid,int totalframe)
;
unsigned
char *pdata = null;
unsigned
int nsize = 0;
mp4timestamp pstarttime;
mp4duration pduration;
mp4duration prenderingoffset;
bool pissyncsample = 0;
int nreadindex = 0;
file *pfile = null;
pfile = fopen("out.h264","wb");
while(nreadindex < totalframe)
//264frame
if(pdata && nsize > 4)
// 它內部就會new 乙個記憶體
//如果傳入的是已知的記憶體區域,
//則需要保證空間bigger then max frames size.
free(pdata);
pdata = null;
}
fflush(pfile);
fclose(pfile);
return0;}
int openmp4file(char *smp4file)
mp4trackid trackid = mp4_invalid_track_id;
uint32_t numtracks = mp4getnumberoftracks(omp4file,null,0);
printf("numtracks:%d\n",numtracks);
for (i = 0; i < numtracks; i++)
free(seqheader);
free(seqheadersize);
for (ix = 0; pictheadersize[ix] != 0; ix++)
}else
if (mp4_is_audio_track_type(tracktype))
}//解析完了mp4,主要是為了獲取sps pps 還有video的trackid
if(videoindex >= 0)
get264stream(omp4file,videoindex,oframecount);
//需要mp4close 否則在嵌入式裝置開啟mp4上多了會記憶體洩露掛掉.
mp4close(omp4file,0);
return0;}
int main(void)
3.測試檔案相關的
MP4V2 使用 編譯 錄製
mp4v2 編譯 使用 mp4格式的錄製可以用 ffmpeg 也可以用mp4v2,這個個專門錄製 mp4mp4 這個功能,或者不想用 ffmpeg 那麼大的庫的話,就用 mp4v2吧。一 mp4v2 的編譯 參考 configure prefix home linux mp4v2 2.0.0 ins...
mp4v2研究筆記1 獲得Track(新)
免責申明 本部落格是博主研究mp4v2時的筆記,第一初衷是備忘,是寫給自己看的,想到多少寫多少,文中觀點很可能不正確,也可能缺乏邏輯性,可讀性,不喜勿噴。正文 庫編譯後,還有幾個演示工程,他們可以向您演示如何使用mp4v2庫 其實我覺得還差很遠 我們從mp4track工程開始研究起。且看它的 很簡潔...
ios上關於編譯MP4v2靜態庫的問題
留個記號把mp4v2的問題記錄下來,防止下次忘了 在google搜尋到乙個能生成mp4v2的ios靜態庫的檔案,位址是解壓縮裡面的mp4v2 2.0.0.tar.bz2之後,修改build libmp4v2 for ios.sh檔案裡面的 ios base sdk 根據xcode的版本更改ios b...