2 c ollapse C_ollapse 于 2016.04.20 11:14 提问

关于h264+aac合成MP4问题

bool Mp4Mutex::init(int& nTrackId, int nSampleRate, int nChannal, int bitsPerSample,char* pMp4File )
{
//m_Mp4File = pMp4File;
m_nSampleRate = nSampleRate;
m_nAudioChannal = nChannal;
m_nBitsPerSample = bitsPerSample;

// init faac
m_hEncoder = faacEncOpen( nSampleRate, nChannal, &m_nInputSamples, &m_nMaxOutputBytes);

m_nMaxInputBytes=m_nInputSamples*bitsPerSample/8;   

m_pbPCMBuffer = new BYTE [m_nMaxInputBytes];
m_pOutAACBuffer = new BYTE [m_nMaxOutputBytes];
m_pTempBuffer = new BYTE [TEMP_BUFFER_SIZE];
memset(m_pTempBuffer, 0 , TEMP_BUFFER_SIZE);

// Get current encoding configuration
faacEncConfigurationPtr pConfiguration = faacEncGetCurrentConfiguration(m_hEncoder);
if( !pConfiguration )
{
    printf("GetCurrentConfiguration error!\n");
    return false;
}

//设置版本,录制MP4文件时要用MPEG4
pConfiguration->version = MPEG4 ;
pConfiguration->aacObjectType = LOW; //LC编码

//输入数据类型
pConfiguration->inputFormat = FAAC_INPUT_16BIT;

// outputFormat (0 = Raw; 1 = ADTS)
// 录制MP4文件时,要用raw流。检验编码是否正确时可设置为 adts传输流,
pConfiguration->outputFormat= 0;


//瞬时噪声定形(temporal noise shaping,TNS)滤波器
pConfiguration->shortctl = SHORTCTL_NORMAL;

pConfiguration->useTns=true;
//pConfiguration->useLfe=false;
pConfiguration->quantqual=100;
pConfiguration->bandWidth=0;
pConfiguration->bitRate=0;

//  Set encoding configuration
faacEncSetConfiguration( m_hEncoder, pConfiguration);


// 2.1 create mp4 file
//char tmp[255] = "E:\\test1.mp4";
m_Mp4File = MP4Create(pMp4File ,  0);
if ( m_Mp4File == MP4_INVALID_FILE_HANDLE)
{
    printf("open file fialed.\n");
    return false;
}

// 2.2 add audio track
m_AudioTrackId  = MP4AddAudioTrack( m_Mp4File, nSampleRate, m_nInputSamples , MP4_MPEG4_AUDIO_TYPE );
if (m_AudioTrackId == MP4_INVALID_TRACK_ID)
{
    //MP4Close(m_Mp4File);
    ///free(faacDecoderInfo);
    return false;
}
nTrackId = m_AudioTrackId;
// 2.3 set audio level  LC
MP4SetAudioProfileLevel(m_Mp4File, 0x2 ); //  

// 2.4 get decoder info
unsigned char* faacDecoderInfo = NULL;    
unsigned long  faacDecoderInfoSize = 0;    
if( faacEncGetDecoderSpecificInfo( m_hEncoder, &faacDecoderInfo, &faacDecoderInfoSize )) 
{        
    //MP4Close(m_Mp4File);
    free(faacDecoderInfo);
    return false ;   
} 

// 2.5 set encoder info [16bit-8000hz-1channal->{ 0x15, 0x88 } ]
bool bOk = MP4SetTrackESConfiguration(m_Mp4File, m_AudioTrackId, faacDecoderInfo, faacDecoderInfoSize );
if( !bOk )
{
    free(faacDecoderInfo);
    //MP4Close(m_Mp4File);
    return false;   
}
free( faacDecoderInfo );

return true;

}

void Mp4Mutex::StartWriteMp4(const unsigned char const pBufferG711,int nG711Len)
{
static FILE
fp = fopen("E:\3.g711a","wb");
fwrite(pBufferG711,nG711Len,1,fp);
fflush(fp);
if ( G711_BUFFER_SIZE < nG711Len )
{
}
BYTE szPcmBuff[PCM_BUFFER_SIZE] = {0};//1024
int nPcmLen = g711a_decode( (short*)szPcmBuff, pBufferG711, nG711Len );

memcpy(m_pTempBuffer+m_nTempPos, szPcmBuff ,nPcmLen ) ;
m_nTempPos += nPcmLen;

if ( m_nTempPos < m_nMaxInputBytes )
{
    return ;
}

memcpy(m_pbPCMBuffer, m_pTempBuffer ,m_nMaxInputBytes ) ;

char szTemp[2048]={0};
int nLeft = m_nTempPos-m_nMaxInputBytes;
memcpy( szTemp, (m_pTempBuffer+m_nMaxInputBytes), nLeft );
memset(m_pTempBuffer, 0, TEMP_BUFFER_SIZE );
memcpy( m_pTempBuffer, szTemp, nLeft );
m_nTempPos -= m_nMaxInputBytes ;

int nRet = faacEncEncode(m_hEncoder, (int*)m_pbPCMBuffer, m_nInputSamples, m_pOutAACBuffer, m_nMaxOutputBytes );
if ( nRet <= 0 )
{
    return ;
}
MP4WriteSample( m_Mp4File, m_AudioTrackId, (BYTE*)&m_pOutAACBuffer[0], nRet-0 , 1024, 0, true);

}

代码如上,直接从摄像机组播取H264+G711a的标准流,合成完MP4后没有音频,从收流处直接将g711a保存成文件单独使用如上代码dome转化为MP4后播放正常,求原因啊!!!!!!

2个回答

CSDNXIAON
CSDNXIAON   2016.04.20 11:22

关于ffmpeg封装h264为mp4的问题
使用mp4v2将H264+AAC合成mp4文件
使用mp4v2将H264+AAC合成mp4文件
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

C_ollapse
C_ollapse   2016.04.26 11:54

查到一个问题编码完的音频数据编码显示为 ftypmp42 mp42avc1 n頼dat? libfaac 1.28,avc1应该是视频编码吧。。。,但是找不到哪里的问题导致的啊。。。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
FFMpeg录屏h264 aac 合并MP4
这是本人研究一个音视频项目的中间测试工程,vs2015,结合了一些其他资源修改而成,来挣点分。代码虽然没有整理,但绝对有参考价值。如果你正研究相关技术,就不要考虑了,绝对物超所值。 相关库:ffmpeg ; libx264; faac; mp4v2 功能介绍:windows下通过FFmpeg录屏,录音,视频rgb转yuv通过libx264转h264,通过faac把pcm转aac,再通过mp4v2合并成MP4
Android MP4Coder H264和AAC合成MP4视频库
遵循:BY-NC-SA 署名-非商业性使用-相同方式共享 4.0协议 作者:谭东 时间:2016年10月28日 环境:Windows 7 Mp4Coder,H264和AAC合成MP4视频库 主要支持功能: H264和AAC合成MP4视频文件 MP4文件拼接成MP4视频文件 AAC文件拼接成AAC音频文件 MP4文件裁剪、剪切 A
FFmpeg合成h264视频流和aac音频流为mp4
[备份使用,尚未优化代码] #include "MyMuxerToMP4.h" #include #include #include /*  FIX: H.264 in some container format (FLV, MP4, MKV etc.) need  "h264_mp4toannexb" bit
Android使用Mp4v2用h264流和aac流合成mp4
Android使用Jni mp4v2库将h264裸流合成mp4文件 建议使用场景 一般视频流有如下两种途径获取: Android摄像头采集 服务端传输过来的视频流 如果数据由本机摄像头直接采集,建议使用MediaMuxer类去实现mp4的合成。如果是服务端传输过来的视频流可以使用mp4v2的方法实现mp4的合成。我在项目里面也简单的利用MediaMuxer编写了一个Demo。可...
ffmpeg将h264和aac合成ts,内存输入输出
在内存中读取h264视频和aac音频,在内存中输出ts AVOutputFormat *ofmt = NULL; //Input AVFormatContext and Output AVFormatContext AVFormatContext *ifmt_ctx_v = NULL, *ifmt_ctx_a = NULL,*ofmt_ctx = NULL; AVPacket pkt;
ffmpegj将h264与aac封装成mkv/ts或者h264与mp3封装成mp4/flv/avi测试代码
#include #include #define __STDC_CONSTANT_MACROS #ifdef _WIN32 //Windows extern "C" { #include "libavformat/avformat.h" }; #else //Linux... #ifdef __cplusplus extern "C" { #endif #include #ifde
多媒体 Mp4v2实现h264+aac打包成Mp4视频文件
使用mp4v2实现录制mp4视频,需要准备如下信息: 1、获取mp4v2源码并编译成库文件,对于mp4v2的编译可以看前面的文章android 编译mp4v2 2.0.0生成动态库 ; 2、获取h264数据中的sps和pps数据,如果不会的话可以查看前面的文章  点击打开链接; 3、获取音频解码信息,在调用MP4SetTrackESConfiguration使用,具体的获取方式一
使用mp4v2将H264+AAC合成mp4文件以及调试过程
录制程序要添加新功能:录制CMMB电视节目,我们的板卡发送出来的是RTP流(H264视频和AAC音频),录制程序要做的工作是: (1)接收并解析RTP包,分离出H264和AAC数据流; (2)将H264视频和AAC音频以某种格式封装,最后存成文件,供用户查看。   第一步已经有部分代码可供参考,因此很快就完成了。 第二步,我们决定封装成mp4,查找了一些资料后,决定使用开源库mp4v2来
如何使用mp4v2将H264+AAC裸流录制成mp4文件,并保持音视频同步。
这个示例工程可以完整的展示:如何使用libmp4v2将原始的音视频数据帧存储为mp4文件。可以帮助流媒体开发人员快速存储mp4文件。
FFMPEG视频h264和音频aac混合编码过程
FFMPEG视频h264和音频aac混合编码过程 /* The MIT License (MIT) Copyright (c) 2013 winlin Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated docu