资源简介
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语言实现凯撒和维吉尼亚加解密
相关资源
- C语言实现凯撒和维吉尼亚加解密
- 超市进销存管理系统——以及使用说
- MFC深入浅出带目录完整版
- C++实现AES、DES加密算法含MFC界面
- 基于C语言绘制学校校徽
- C++课程设计 扑克牌游戏内含2程序
- 数据结构——利用 Stack类 为其
- MFC写的一个汉字取模软件
- C语言标准库函数大全
- 3DES加密算法C++实现
- DES/3DES算法C语言实现
- C语言内存分配详解
- vim配置文件及其插件大全配置好的I
- C++绘制漂亮仪表盘
- c++ test9.5破解工具
- 学生成绩管理系统 (C语言版)课程设
- C/C++视频教程
- 图书管理系统.cpp
- c++P2P视频技术源码(VC++)
- 设计并实现TINYC语言的扫描程序TINYC
- VC++开发IE ActiveX控件
- 汉字转拼音 自适应多音字处理 姓名自
- c++_关于公路收费的问题
- DES和3DES加密算法,C语言,适用于单片
- MISRA C:2012 EN
- 51单片机DS18B20温度计C语言程序附详解
- MFC Tab control 重绘便签边框和主框 背景
- c++ 源码通过dll启动应用程序exe
- php7.0-MSVC14-86
- Dev-C++ V5.7.1中文版(32位64;位)_C++ 开
评论
共有 条评论