- 论坛徽章:
- 0
|
本帖最后由 沉水之鱼 于 2016-06-13 09:58 编辑
第一次使用MP4V2封装H264码流,封装出来的MP4文件快进快退不正常,会卡顿模糊。
MP4V2初始化代码- char mp4_filename[RECORD_FILENAME_LEN];
- 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[1], sps[2], sps[3], 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 ?
|
|