免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1110 | 回复: 0
打印 上一主题 下一主题

[其他] 求助:MP4V2封装H264 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-06-13 09:57 |只看该作者 |倒序浏览
本帖最后由 沉水之鱼 于 2016-06-13 09:58 编辑

第一次使用MP4V2封装H264码流,封装出来的MP4文件快进快退不正常,会卡顿模糊。

MP4V2初始化代码
  1. char mp4_filename[RECORD_FILENAME_LEN];
  2.         time_t timep;
  3.         struct tm *p;
  4.         time(&timep);
  5.         unsigned char sps[] = {0x47, 0x4d, 0x0, 0x29, 0x99, 0xa0, 0x1e, 0x0, 0x89, 0xf9, 0x61, 0x0, 0x0, 0x3, 0x3, 0xe8, 0x0, 0x0, 0xc3, 0x50, 0x84};
  6.         unsigned char pps[] = {0x48, 0xee, 0x3c, 0x80};
  7.         p = gmtime(&timep);
  8.         memset(mp4_filename, 0, RECORD_FILENAME_LEN);
  9.         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);
  10.         RecordContext.mp4ContextSet.mp4_filehandle= MP4Create(mp4_filename, 0);
  11.         if(MP4_INVALID_FILE_HANDLE == RecordContext.mp4ContextSet.mp4_filehandle)
  12.         {
  13.                 ERR_PRINTF("MP4Create file error!");
  14.                 return -1;
  15.         }
  16.         if(!MP4SetTimeScale(RecordContext.mp4ContextSet.mp4_filehandle, 90000))
  17.         {
  18.                 ERR_PRINTF("MP4SetTimeScale failed!");
  19.                 MP4Close(RecordContext.mp4ContextSet.mp4_filehandle, 0);
  20.                 RecordContext.mp4ContextSet.mp4_filehandle = MP4_INVALID_FILE_HANDLE;
  21.                 return -1;
  22.         }
  23.         MP4SetVideoProfileLevel(RecordContext.mp4ContextSet.mp4_filehandle, 0x7F);
  24.         RecordContext.mp4ContextSet.video = MP4AddH264VideoTrack(RecordContext.mp4ContextSet.mp4_filehandle, 90000, 90000/30, 1920, 1080, sps[1], sps[2], sps[3], 3);
  25.         if (MP4_INVALID_TRACK_ID == RecordContext.mp4ContextSet.video)
  26.     {
  27.                 ERR_PRINTF("add video track failed!");
  28.                 MP4Close(RecordContext.mp4ContextSet.mp4_filehandle, 0);
  29.                 RecordContext.mp4ContextSet.mp4_filehandle = MP4_INVALID_FILE_HANDLE;
  30.                 return -1;
  31.     }

  32.         MP4AddH264SequenceParameterSet(RecordContext.mp4ContextSet.mp4_filehandle, RecordContext.mp4ContextSet.video, sps, 21);
  33.         MP4AddH264PictureParameterSet(RecordContext.mp4ContextSet.mp4_filehandle, RecordContext.mp4ContextSet.video, pps, 4);
复制代码
其中sps pps 是从H264中提取出来的
写的时候,非关键帧 sps+pps+b/p帧 是否需要去掉sps pps ?

QQ图片20160613095512.jpg (10.03 KB, 下载次数: 26)

QQ图片20160613095512.jpg
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP