如何把H264文件的数据一帧一帧的读出来?(先不用考虑解码)

HHunter 2009-07-31 07:07:46

如何把H264文件的数据一帧一帧的读出来?(先不用考虑解码)

谢谢!
...全文
13479 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
yujie_v 2012-08-23
  • 打赏
  • 举报
回复
学习下,H264划分帧确实很麻烦
zxm006 2012-06-14
  • 打赏
  • 举报
回复
都是大仙级别啊,我目前也碰到要从mp4文件读出h264的需求
te_esperare 2012-06-09
  • 打赏
  • 举报
回复
67 ...... 68 ..... 65 ........ 61....... 61 ........ 61 .......

像上边这个码流,找到了65或者61,说明是完整的一帧,(67 ...... 68 ..... 65 ......)就是一帧,是I帧;找到61(也可能是41什么的),也是完整的一帧,(61 .......)是完整的P帧。
zhutoutou008 2012-06-04
  • 打赏
  • 举报
回复
各位流媒体神人,新手给你们跪下了.你们太强大了.
Mical007 2011-11-04
  • 打赏
  • 举报
回复
这个还在,,,
divineguo 2011-09-16
  • 打赏
  • 举报
回复
看了大家的讨论,我对20楼的观点比较赞同:"一帧可能有几个SLICE的!你要把所有的SLICE定位出来,然后再找到每个SLICE的起始宏块的地址,地址为0的话就是一帧开始了!"
的确,除去sps和pps,单纯从0x0000000101和0x0000000105来看,直接是看不出帧的边界的,只是一个个的slice的边界罢了,但是一个slice的起始宏块的地址是0,则代表该slice是一帧的第一个slice,故也就是一帧的开始了。
当时求帧边界时,用了个取巧的办法:就是当遇到0x0000000101和0x0000000105时,求出对应的dts,而如果帧率为25,则每帧的播放时间是0.04秒,则求出下一个0x0000000101和0x0000000105时,求出其dts,如果和前面的基准dts的差是0.04秒,则认为就是一帧了。

----------------ES流中没有dts呀
moonvan 2011-09-11
  • 打赏
  • 举报
回复
学习了
czgwdm 2011-05-31
  • 打赏
  • 举报
回复
看了大家的讨论,我对20楼的观点比较赞同:"一帧可能有几个SLICE的!你要把所有的SLICE定位出来,然后再找到每个SLICE的起始宏块的地址,地址为0的话就是一帧开始了!"
的确,除去sps和pps,单纯从0x0000000101和0x0000000105来看,直接是看不出帧的边界的,只是一个个的slice的边界罢了,但是一个slice的起始宏块的地址是0,则代表该slice是一帧的第一个slice,故也就是一帧的开始了。
当时求帧边界时,用了个取巧的办法:就是当遇到0x0000000101和0x0000000105时,求出对应的dts,而如果帧率为25,则每帧的播放时间是0.04秒,则求出下一个0x0000000101和0x0000000105时,求出其dts,如果和前面的基准dts的差是0.04秒,则认为就是一帧了。
CyberLogix 2011-04-20
  • 打赏
  • 举报
回复
解析NAL或者BYTECODE得到PPS,SPS,SLICE等数据
xchl1127 2011-01-19
  • 打赏
  • 举报
回复
太深奥了,正在学习中
china_clear 2010-09-28
  • 打赏
  • 举报
回复
一帧可能有几个SLICE的!你要把所有的SLICE定位出来,然后再找到每个SLICE的起始宏块的地址,地址为0的话就是一帧开始了!
rienzi 2010-08-27
  • 打赏
  • 举报
回复
流媒体同行,学习,留爪印
lzmilypforev 2010-04-25
  • 打赏
  • 举报
回复
话说这东西可真是难啊...
wfcancer 2010-01-29
  • 打赏
  • 举报
回复
都是高手,领教了
znj_326 2009-10-30
  • 打赏
  • 举报
回复
我日哦,登录还是看不到呢
HHunter 2009-08-18
  • 打赏
  • 举报
回复

非常感谢各位,我跟踪看看...
lius1984 2009-08-11
  • 打赏
  • 举报
回复
你下载这个h.264解码器的工程源码 跟踪一边就清楚了。 http://www.winbile.net/bbs/forums/threads/1012589.aspx
mubai007 2009-08-11
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 firedsky 的回复:]
引用 6 楼 mubai007 的回复:
看你如何采集的,我这边有一个21字节的文件头00 00 00 01 67 42 00 1E AB 40 B0 4B 20 00 00 00 01 68 CE 38 80,然后以00 00 00 01为一帧的开始。有时会在每一帧开始时加入每一帧的大小4字节。


你这是一个序列参数集,不是建议NAL序列中的第一个NAL,在单元分隔符NAL之后。不过它可以算是新的一帧的开始,如果没有单元分隔符NAL的话,用这个区分一帧数据是可以的,只是不太方便。
[/Quote]
像我这种情况怎么区分一帧数据比较好?
该怎么组织数据?
Ryan裤子 2009-08-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 SmallBigCat 的回复:]
to ttxk:

视频怎么会没有帧的概念呢?
[/Quote]

H264的字节流确实没有帧的概念.具体原因请仔细研读协议.
这里我并没有说视频.
firedsky 2009-08-04
  • 打赏
  • 举报
回复
这个要看你怎么理解了。和MPEG2、MPEG4相比,H.264字节流中帧的形式发生了变化。以视频帧为例,MPEG2和MPEG4字节流在传输的时候提取帧的关键参数,将其封装入传输包首部,比如TS包或RTP包,而包负载中的数据仍然是一个完整的图像帧。也就是说,你即使不使用包首部中所设置的关于包负载的参数信息,也能够根据包负载中的帧数据本身进行正确的解码。

而H.264码流本身对图像数据就做了处理,将一个完整的图像帧进行分解,抽出序列参数集、图像参数集等帧信息,放到各自对应的NAL中,而图像数据本身则封装进编码条带中。这样,在NAL流中,仅仅根据编码条带NAL单元是解析不出图像来的,必须和序列参数集、图像参数集NAL配合才能解出。也就是说,MPEG2、MPEG4编码的一帧数据,被分解成了H.264中的多个NAL单元,H.264编码的抽象化程度更高了。但是H.264码流在组织的时候仍然是以一帧数据为单位的,它并不会将多帧数据交织到一起,只不过表现在形式上,需要用多个NAL单元才能组成一个完整的数据帧。
加载更多回复(10)

2,543

社区成员

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

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