mp4v2合成mp4,用IOS播放问题

Black_Light 2013-06-06 01:26:34
现在用mp4v2将h264和aac封装成MP4,合出来的文件可以用VLC播放,但用IOS播放时,只有时间变化没有声音和图像,我从下面的一段H264数据中找到的sps,pps,请大家指导一下,哪里可能出的问题

H264:
00 00 00 01 67 42 e0 0d 96 52 02 83 f4 90 08 00 00 00 01 68 ce 38 80 00 00 00 01 06 06 01 84 80 00 00 00 01 65 88 80 30
01 63 88 c2 1f cb 01 d1 94 05 96 e7 9c 1e 7e 66 5b bf 8e e2 38 8f ff 53 c0 3d 39 96 e7 ac 4b a5 53 04 c7 77 54 37 19 eb
e2 38 8f c2 bc fa 6d 77 8a ff b1 1b 88 ae 1a 5d f8 01 19 88 7e 66 3b 87 a6 5e ab 74 43 7c c3 b5 25 f9 ac 24 74 96 d1 ec
61 32 8c a8 a7 4c c4 ae 92 6f bd f1 15 51 1e 76 5c 6a ca 13 d8 ab c8 e6 80 b0 da b8 c4 cb 5c 2a a6 8a 8d b1 8d ce f5 c7
64 7d f1 1c 46 ab 0b 33 05 ca 0a c8 ae 68 61 05 08 65 71 6d f0 b9 e6 88 fb a7 2b 44 5d 4a 3e 22 c6 22 00 41 c3 b8 2d 3e


unsigned char sps[11] = {0x67,0x42,0xe0,0x0d,0x96,0x52,0x02,0x83,0xf4,0x90,0x08};
unsigned char pps[4]= {0x68,0xce,0x38,0x80};

m_mp4file = MP4CreateEx(".\\Data\\2.mp4", MP4_DETAILS_ALL, 0, 1, (char*)1, 0, 0, 0);
if (m_mp4file == MP4_INVALID_FILE_HANDLE)
{
LOG_CONSOLE("open file fialed.\n");
return;
}
MP4SetTimeScale(m_mp4file, 90000);

//添加h264 track
m_mp4_video_id = MP4AddH264VideoTrack(m_mp4file, 90000, 90000 / 25, 320, 240,
sps[1], //sps[1] AVCProfileIndication
sps[2], //sps[2] profile_compat
sps[3], //sps[3] AVCLevelIndication
3);
if (m_mp4_video_id == MP4_INVALID_TRACK_ID)
{
LOG_CONSOLE("add video track failed.\n");
return;
}


//添加aac音频
m_mp4_audio_id = MP4AddAudioTrack(m_mp4file, 48000, 2048, MP4_MPEG4_AUDIO_TYPE);
if (m_mp4_audio_id == MP4_INVALID_TRACK_ID)
{
printf("add audio track failed.\n");
return;
}
MP4AddH264SequenceParameterSet(m_mp4file,m_mp4_video_id,sps,11);
MP4AddH264PictureParameterSet(m_mp4file,m_mp4_video_id,pps,4);
MP4SetVideoProfileLevel(m_mp4file, 0x7F);
MP4SetAudioProfileLevel(m_mp4file, 0x02);
...全文
5999 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
gavin_liang 2015-12-29
  • 打赏
  • 举报
回复
引用 2 楼 Black_Light的回复:
自己先 再一下
楼主,你的总duration没有设对
学习不止 2015-10-10
  • 打赏
  • 举报
回复
前面有人说过了,把nal包的00 00 00 01 改成实际数据的size 00 00 00 01 67 42 e0 0d 96 52 02 83 f4 90 08 把00 00 00 01,改成后面SPS的字节数,也就是 00 00 00 0B。
hoozh 2015-07-20
  • 打赏
  • 举报
回复
引用 18 楼 chenchao_shenzhen 的回复:
我用过三种方式将h.264+pcm/aac 合成mp4 android/iOS都可以用 希望帮到你. http://blog.csdn.net/chenchao_shenzhen/article/details/45368035
博文删掉了?
chenchao_shenzhen 2015-05-24
  • 打赏
  • 举报
回复
我用过三种方式将h.264+pcm/aac 合成mp4 android/iOS都可以用 希望帮到你. http://blog.csdn.net/chenchao_shenzhen/article/details/45368035
nicks9999 2015-04-07
  • 打赏
  • 举报
回复
MP4_DETAILS_ALL我的2.0.0版本也没有找到这个宏,这个开源软件怎么这样
「已注销」 2014-10-09
  • 打赏
  • 举报
回复
引用 15 楼 OExpress 的回复:
去掉每个NALU前面的startcode 00 00 00 01 变为四字节的每个NALU的长度,试一下
去掉也不行啊,去掉了连windows下都不能播放。
CyberLogix 2014-10-01
  • 打赏
  • 举报
回复
去掉每个NALU前面的startcode 00 00 00 01 变为四字节的每个NALU的长度,试一下
「已注销」 2014-09-30
  • 打赏
  • 举报
回复
楼主,我也遇到了同样的问题,能不能告诉我们你是怎么解决的?
windychen20 2014-06-12
  • 打赏
  • 举报
回复
我合成的mp4文件,拖拽时间轴的时候,会卡顿,这是因为什么,有遇到过这种情况的吗
gavin_liang 2014-06-04
  • 打赏
  • 举报
回复
楼主 那个问题解决了吗 ?我也遇到和你相同的问题 可否告知下解决方式
lvzj 2014-02-21
  • 打赏
  • 举报
回复
问题解决了么?
xinlianzhou 2013-11-07
  • 打赏
  • 举报
回复
解决了吗?我现在录制的电脑上播放不正常。
Black_Light 2013-06-28
  • 打赏
  • 举报
回复
设置MP4SetTrackESConfiguration(),也不行,在PC上播放没问题,可到ipad上播放,只有进度再动,没有声音和图像
Jackson_GZ 2013-06-17
  • 打赏
  • 举报
回复
另外音频AAC, 要调用 一次MP4SetTrackESConfiguration() 设置解码信息.
Jackson_GZ 2013-06-17
  • 打赏
  • 举报
回复
你这个H.264编码出来的包: 00 00 00 01 67 42 e0 0d 96 52 02 83 f4 90 08 ... 要保存MP4格式, 要做一次简单的转换: 即搜索所有的前面的00 00 00 01 变成 4字节的长度, 具体参考 h264 nal units的说明.
purple329 2013-06-08
  • 打赏
  • 举报
回复
lz是不是用的1.9版本的mp4v2。管网已经不建议使用了。再请问一下lz,为什么我合成下来的mp4在ios里播放时,弹个框提示这项操作无法完成呢?
purple329 2013-06-08
  • 打赏
  • 举报
回复
ios似乎不支持h.264的过高的idc_level。用3.1的idc_level试试 请问一下lz用的mp4v2是哪个版本的?我用2.0版的怎么找不到MP4_DETAILS_ALL这个宏的定义?
Black_Light 2013-06-08
  • 打赏
  • 举报
回复
我用的也是2.0,版本应该不是问题,"这项操作无法完成"这个没遇到过 总共就那么几个函数,真是郁闷了
Black_Light 2013-06-06
  • 打赏
  • 举报
回复
自己先 再一下
Black_Light 2013-06-06
  • 打赏
  • 举报
回复
自己先 顶一下

2,553

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧