求助:MP4V2封装H264
本帖最后由 沉水之鱼 于 2016-06-13 09:58 编辑第一次使用MP4V2封装H264码流,封装出来的MP4文件快进快退不正常,会卡顿模糊。
MP4V2初始化代码char mp4_filename;
time_t timep;
struct tm *p;
time(&timep);
unsigned char sps[] = {0x47, 0x4d, 0x0, 0x29, 0x99, 0xa0, 0x1e, 0x0, 0x89, 0xf9, 0x61, 0x0, 0x0, 0x3, 0x3, 0xe8, 0x0, 0x0, 0xc3, 0x50, 0x84};
unsigned char pps[] = {0x48, 0xee, 0x3c, 0x80};
p = gmtime(&timep);
memset(mp4_filename, 0, RECORD_FILENAME_LEN);
sprintf(mp4_filename,"/sdcard/picture/video/record_%d%d%d_%d%d%d.mp4",p->tm_year,p->tm_mon,p->tm_mday,p->tm_hour,p->tm_min,p->tm_sec);
RecordContext.mp4ContextSet.mp4_filehandle= MP4Create(mp4_filename, 0);
if(MP4_INVALID_FILE_HANDLE == RecordContext.mp4ContextSet.mp4_filehandle)
{
ERR_PRINTF("MP4Create file error!");
return -1;
}
if(!MP4SetTimeScale(RecordContext.mp4ContextSet.mp4_filehandle, 90000))
{
ERR_PRINTF("MP4SetTimeScale failed!");
MP4Close(RecordContext.mp4ContextSet.mp4_filehandle, 0);
RecordContext.mp4ContextSet.mp4_filehandle = MP4_INVALID_FILE_HANDLE;
return -1;
}
MP4SetVideoProfileLevel(RecordContext.mp4ContextSet.mp4_filehandle, 0x7F);
RecordContext.mp4ContextSet.video = MP4AddH264VideoTrack(RecordContext.mp4ContextSet.mp4_filehandle, 90000, 90000/30, 1920, 1080, sps, sps, sps, 3);
if (MP4_INVALID_TRACK_ID == RecordContext.mp4ContextSet.video)
{
ERR_PRINTF("add video track failed!");
MP4Close(RecordContext.mp4ContextSet.mp4_filehandle, 0);
RecordContext.mp4ContextSet.mp4_filehandle = MP4_INVALID_FILE_HANDLE;
return -1;
}
MP4AddH264SequenceParameterSet(RecordContext.mp4ContextSet.mp4_filehandle, RecordContext.mp4ContextSet.video, sps, 21);
MP4AddH264PictureParameterSet(RecordContext.mp4ContextSet.mp4_filehandle, RecordContext.mp4ContextSet.video, pps, 4);其中sps pps 是从H264中提取出来的
写的时候,非关键帧 sps+pps+b/p帧 是否需要去掉sps pps ?
页:
[1]