• 大小: 1.87MB
    文件类型: .rar
    金币: 2
    下载: 0 次
    发布日期: 2024-01-19
  • 语言: C/C++
  • 标签: C  H264格式  转MP4格式  

资源简介

C H264格式 转MP4格式 C语言实现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参数
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相关用来指定了时长
(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\link.command.1.tlog

     文件       2298  2016-09-05 17:29  264tomp4\Debug\link.read.1.tlog

     文件        422  2016-09-05 17:29  264tomp4\Debug\link.write.1.tlog

     文件      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个文件信息

评论

共有 条评论