-
大小: 1.87MB文件類型: .rar金幣: 2下載: 0 次發(fā)布日期: 2024-01-19
- 語言: C/C++
- 標簽: C??H264格式??轉(zhuǎn)MP4格式??
資源簡介
C H264格式 轉(zhuǎn)MP4格式 C語言實現(xiàn)h264保存為mp4文件,包含vs2010編譯通過的demo

代碼片段和文件信息
#include?
#include?
#include?
#include?“mp4enc.h“
#include?“mp4file.h“
//FIXME?support?64?bit?variant?with?wide?placeholders
static?int64_t?updateSize(FILE?*pb?int64_t?pos)
{
int64_t?curpos?=?mp4_ftell(pb);
mp4_fseek(pb?pos?SEEK_SET);
put_be32(pb?curpos?-?pos);?/*?rewrite?size?*/
mp4_fseek(pb?curpos?SEEK_SET);
return?curpos?-?pos;
}
//獲取H.264的avcc參數(shù)
static?int?ff_isom_write_avcc(FILE?*pfile?Mp4Context?*mov)
{
if(mov->sps!=NULL&&mov->pps!=NULL){
put_buffer(pfile“\x01\x4D\x40\x14\xFF\xE1“6);
put_be16(pfilemov->sps_len);
put_buffer(pfilemov->spsmov->sps_len);
put_byte(pfile01);
put_be16(pfile4);//mov->pps_len);
put_buffer(pfilemov->ppsmov->pps_len);
return?0;
}else{
return?-1;
}
}
static?int?mov_write_tkhd_tag(FILE?*pb?Mp4Context?*mov)
{
int64_t?duration?=?MOV_TIMESCALE;
int?version?=?0;
(version?==?1)???put_be32(pb?104)?:?put_be32(pb?92);?/*?size?*/
put_tag(pb?“tkhd“);
put_byte(pb?version);
put_be24(pb?0xf);?/*?flags?(track?enabled)?*/
if?(version?==?1)?{
put_be64(pb?mov->time);
put_be64(pb?mov->time);
}?else?{
put_be32(pb?mov->time);/*?creation?time?*/
put_be32(pb?mov->time);/*?modification?time?*/
}
put_be32(pb?1);/*?track-id?*/
put_be32(pb?0);?/*?reserved?*/
//這個值對播放器很重要?具體時間還和mvhd的timescale相關(guān)用來指定了時長
(version?==?1)???put_be64(pb?mov->video_track_size*mov->MEDIA_SAMPLE_DURATION/MOV_TIMESCALE_TO_MEDIA_TIMESCALE):?\
put_be32(pb?mov->video_track_size*mov->MEDIA_SAMPLE_DURATION/MOV_TIMESCALE_TO_MEDIA_TIMESCALE);
put_be32(pb?0);?/*?reserved?*/
put_be32(pb?0);?/*?reserved?*/
put_be32(pb?0x0);?/*?reserved?(layer?&?Alternate?group)?*/
/*?Volume?only?for?audio?*/
//?if(track->enc->codec_type?==?AVMEDIA_TYPE_AUDIO) //注意以后的音視頻流程差異,目前為視頻
//?put_be16(pb?0x0100);
//?else
put_be16(pb?0);
put_be16(pb?0);?/*?reserved?*/
/*?Matrix?structure?*/
put_be32(pb?0x00010000);?/*?reserved?*/
put_be32(pb?0x0);?/*?reserved?*/
put_be32(pb?0x0);?/*?reserved?*/
put_be32(pb?0x0);?/*?reserved?*/
put_be32(pb?0x00010000);?/*?reserved?*/
put_be32(pb?0x0);?/*?reserved?*/
put_be32(pb?0x0);?/*?reserved?*/
put_be32(pb?0x0);?/*?reserved?*/
put_be32(pb?0x40000000);?/*?reserved?*/
/*?Track?width?and?height?for?visual?only?*/
//?if(st?&&?(track->enc->codec_type?==?AVMEDIA_TYPE_VIDEO?||
//?track->enc->codec_type?==?AVMEDIA_TYPE_SUBtitle))?{
//?double?sample_aspect_ratio?=?av_q2d(st->sample_aspect_ratio);
//?if(!sample_aspect_ratio?||?track->height?!=?track->enc->height)
//?sample_aspect_ratio?=?1;
put_be32(pb?mov->width/*sample_aspect_ratio?*?track->enc->width*0x10000*/);
put_be32(pb?mov->height/*track->height*0x10000*/);
return?0x5c;
}
static?int?mov_write_mdhd_tag(FILE?*pbMp4Context?*mov)
{
int?version=0;
(version?==?1)???put_be32(pb?44)?:?put_be32(pb?32);?/*?size?*/
put_tag(pb?“mdhd“);
put_byte(pb?version);
put_be24(pb?
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????584??2016-09-05?17:29??264tomp4\Debug\cl.command.1.tlog
?????文件???????1986??2016-09-05?17:29??264tomp4\Debug\CL.read.1.tlog
?????文件????????196??2016-09-05?17:29??264tomp4\Debug\CL.write.1.tlog
?????文件???????1042??2016-09-05?17:29??264tomp4\Debug\li
?????文件???????2298??2016-09-05?17:29??264tomp4\Debug\li
?????文件????????422??2016-09-05?17:29??264tomp4\Debug\li
?????文件??????61020??2016-09-05?17:29??264tomp4\Debug\mp4enc.obj
?????文件????????794??2016-09-05?17:29??264tomp4\Debug\mp4enclib.Build.CppClean.log
?????文件?????459776??2016-09-05?17:29??264tomp4\Debug\mp4enclib.exe
?????文件????????381??2016-09-05?17:29??264tomp4\Debug\mp4enclib.exe.intermediate.manifest
?????文件?????987840??2016-09-05?17:29??264tomp4\Debug\mp4enclib.ilk
?????文件?????????50??2016-09-05?17:29??264tomp4\Debug\mp4enclib.lastbuildstate
?????文件???????2775??2016-09-05?17:29??264tomp4\Debug\mp4enclib.log
?????文件????1772544??2016-09-05?17:29??264tomp4\Debug\mp4enclib.pdb
?????文件????????354??2016-09-05?17:29??264tomp4\Debug\mt.command.1.tlog
?????文件????????572??2016-09-05?17:29??264tomp4\Debug\mt.read.1.tlog
?????文件????????200??2016-09-05?17:29??264tomp4\Debug\mt.write.1.tlog
?????文件??????35840??2016-09-05?17:29??264tomp4\Debug\vc100.idb
?????文件??????53248??2016-09-05?17:29??264tomp4\Debug\vc100.pdb
?????文件????????267??2010-07-13?10:28??264tomp4\h264.h
?????文件????2490368??2016-09-05?16:19??264tomp4\ipch\mp4enclib-915e50b6\mp4enclib-805f7414.ipch
?????文件???????1824??2010-08-13?14:54??264tomp4\mp4conf.h
?????文件??????35552??2016-09-05?17:16??264tomp4\mp4enc.c
?????文件???????3577??2010-08-13?14:59??264tomp4\mp4enc.h
?????文件?????459776??2016-09-05?17:29??264tomp4\mp4enclib.exe
?????文件????2183168??2016-09-05?17:29??264tomp4\mp4enclib.sdf
?????文件????????884??2016-08-30?11:49??264tomp4\mp4enclib.sln
????..A..H.?????14336??2016-09-05?17:29??264tomp4\mp4enclib.suo
?????文件???????5791??2016-08-31?11:53??264tomp4\mp4enclib.vcxproj
?????文件????????988??2016-08-30?11:49??264tomp4\mp4enclib.vcxproj.filters
............此處省略11個文件信息
評論
共有 條評論