分享

视频流使用h264进行编码后怎样写入MP4文件中解决思路

 guitarhua 2013-11-19
视频流使用h264进行编码后怎样写入MP4文件中
视频数据使用h264进行编码的,想把编码后的数据写入MP4文件中,但是需要写文件头,具体怎么实现。

看了相关资料说涉及到 Ftyp box、Moov box、Mdat box,其中这三个box的大小是怎么得到的?希望各位指点,谢谢!


------解决方案--------------------
你可以查一下 mpeg4ip方面的的东西,如果 你用它的话,可以根据mpeg4ip\server\mp4live这个目录下的
file_mp4_recorder.cpp文件写一个录制MP4的程序。
------解决方案--------------------
我用的mp4v2-1.9.1写的,非常好用简单
创建文件并生成流信息如下(我生成的是h264+aac的mp4文件)
m_Mp4File = MP4Create(fileName, 9);
if(m_Mp4File == MP4_INVALID_FILE_HANDLE) 
{
hr = E_FAIL;
return hr;
}
if(!MP4SetTimeScale(m_Mp4File, 90000))
{
MP4Close(m_Mp4File);
m_Mp4File = MP4_INVALID_FILE_HANDLE;
hr = E_FAIL;
return hr;
}
MP4SetVideoProfileLevel(m_Mp4File, 0x0F);
MP4SetAudioProfileLevel(m_Mp4File, 0x0F);
m_Mp4VideoId = MP4AddH264VideoTrack(m_Mp4File, 90000, MP4_INVALID_DURATION, mEncodeX264Width, mEncodeX264Height, 0, 0, 0, 0);
if(m_Mp4VideoId == MP4_INVALID_TRACK_ID ) 
{
MP4Close(m_Mp4File);
m_Mp4File = MP4_INVALID_FILE_HANDLE;
hr = E_FAIL;
return hr;
}
m_Mp4AudioId = MP4AddAudioTrack(m_Mp4File, USE_SAMPLE_RATE, MP4_INVALID_DURATION);
if(m_Mp4AudioId == MP4_INVALID_TRACK_ID ) 
{
MP4Close(m_Mp4File);
m_Mp4File = MP4_INVALID_FILE_HANDLE;
hr = E_FAIL;
return hr;
}
unsigned char* faacDecoderInfo = NULL;
unsigned long faacDecoderInfoSize = 0;
if( faacEncGetDecoderSpecificInfo(mMyOutPut.hEncoder, &faacDecoderInfo, &faacDecoderInfoSize )) 
{
MP4Close(m_Mp4File);
m_Mp4File = MP4_INVALID_FILE_HANDLE;
hr = E_FAIL;
return hr;
}
if(!MP4SetTrackESConfiguration(m_Mp4File, m_Mp4AudioId, faacDecoderInfo, faacDecoderInfoSize ))
{
free(faacDecoderInfo);
MP4Close(m_Mp4File);
m_Mp4File = MP4_INVALID_FILE_HANDLE;
hr = E_FAIL;
return hr;
}
free( faacDecoderInfo );

写数据就是:
MP4WriteSample(m_Mp4File, m_Mp4VideoId, &mux_buffer[0], pos, dur * 90000 / 1E7, 0, true);
MP4WriteSample(m_Mp4File, m_Mp4AudioId, mMyOutPut.bitbuf + totalbytesWritten, bytesWritten, dur * USE_SAMPLE_RATE / 1E7, 0, true);

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多