资源简介
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\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个文件信息
- 上一篇:超市进销存管理系统——以及使用说明书
- 下一篇:C语言实现凯撒和维吉尼亚加解密
相关资源
- 国际象棋的qt源代码
- 操作系统c语言模拟文件管理系统844
- C语言开发实战宝典
- C++中头文件与源文件的作用详解
- 基于mfc的多线程文件传输
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- C语言代码高亮html输出工具
- 猜数字游戏 c语言代码
- C语言课程设计
- 数字电位器C语言程序
- CCS FFT c语言算法
- 使用C语言编写的病房管理系统
- 通信过程中的RS编译码程序(c语言)
- 利用C++哈希表的方法实现电话号码查
- 计算机二级C语言上机填空,改错,编
- 用回溯法解决八皇后问题C语言实现
- 移木块游戏,可以自编自玩,vc6.0编写
- 简易教务管理系统c语言开发文档
- 操作系统课设 读写者问题 c语言实现
- 小波变换算法 c语言版
- C流程图生成器,用C语言代码 生成C语
- 3des加密算法C语言实现
- 简单的C语言点对点聊天程序
- 单片机c语言源程序(51定时器 八个按
- C++纯文字DOS超小RPG游戏
- 个人日常财务管理系统(C语言)
- MFC数字钟(基于VC6.0)
- c语言电子商务系统
- 小甲鱼C语言课件 源代码
评论
共有 条评论