pm的正确格式,pmp文件分析什么意思,PMP格式详解

pm的正确格式,pmp文件分析什么意思,PMP格式详解 PMP格式详解:著名的jonny设计了PMP格式,让大家用小P就能享受到高质量的影音;但是随着版本的发展,出现了PMP1.0,PMP2.0,PMP-AVC PMP-AVC。这些术语和概念可能会让大家感到困惑。现在,我将根据我的研究和理解向你解释这些术语的含义。 【PMP格式】PMP是jonny设计的一种影音包装格式。像AVI一样,它只是一个打包的容器格式。PMP格式只有两个版本,一个是1.0,另一个是2.0。 PMP1.0是一个比较粗糙的版本,只支持MP4V流(XVI ID,DIVX)和MP3流的封装(并且需要采样率为44100的CBR)。从文件头开始,序列结构如下: 4字节:必须是‘pmpm’,pmp的符号;字节:版本号,为0表示版本为1.0 4字节:视频帧总数4字节:视频宽度4字节:视频高度4字节:视频比例4字节:视频速率,注:视频帧率fps=速率/比例4字节:最大视频帧大小视频帧总数 4字节:每个视频帧的索引,每个索引4字节,最低位表示是否为关键帧。4字节:音频帧的数据大小(由于采用cbr模式,所有音频帧的数据大小相同,但关键帧的大小比普通帧大一个字节)4字节:音频帧总数1字节:每帧的索引,每个索引1字节,关键帧1,普通帧0。注:每帧实际大小=音频帧数据大小指标值;Audio:字节数,由上述索引计算得出; 从上面的分析来看,PMP1.0格式有很大的缺点。没有视音频标志,也就是说视音频编码格式是固定的,无法封装各种流。同时,由于视频和音频数据是非交错存储的,文件指针在回放时来回移动,读取视频帧时移动到前面,读取音频帧时移动到后面; 从PMP2.0开始,jonny大概意识到了1.0的不足,重新设计了文件的格式结构。个人觉得这个改动很好:从文件头开始,序列结构如下: 4字节:必须是‘pmpm’,pmp的符号;4字节:版本号,为1,表示版本为2.0 4字节:视频格式标志,这是一个进步,为支持各种视频流的封装提供了保证。0表示MP4V流(xvid,divx),1表示AVC流(PMP-AVC实际上是PMP2.0格式,只封装了AVC流)4字节:视频帧总数4字节:视频宽度4字节:视频高度4字节:视频比例4字节:视频速率,注:视频帧率fps=rate/scale 4字节:音频格式标志,这也为以后支持各种音频的封装提供了保证。现在只支持mp3流,值为0;4字节:包含的音频流数量,为支持多声道封装提供了保证。如果两个音频轨道封装在pmp中,则该值为2 ^ 4字节:附加到每个视频帧的音频帧的最大数量。由于PMP2.0采用视音频交错存储,一个视频帧和几个对应的音频帧放在一起,这是一个最大值;4字节:音频刻度,默认值为1152 4字节:音频速率,默认值为44100 4字节:音频是否立体声,0表示单声道,1表示立体声;视频总帧数 4字节:每个视频帧的索引,每个索引为4字节,最低位表示是否为关键帧,其余31位表示帧大小(注意这里的帧大小与1.0格式不同,见下面的解释)。视频-音频混合数据:在这里,jonny做了一个有趣的设计,将一个视频帧与其对应的音频帧混合作为一个数据。那么混合方法是什么呢?我们来分析一下:首先计算每个视频帧的时间戳和每个音频帧的时间戳,videotime=videonum/videofps,audio time=audionum/audio fps(video num和audio num都从0开始)。那么第一个视频帧的时间戳是0/videofps=0。并且第二视频帧的时间戳是1/videofps。然后,第一个视频帧和所有时间戳小于1/videofps的音频帧连接在一起,形成一个数据帧,以此类推。然后在每个数据帧前面加上n个字节,n=1+4+4+4+4每道混合帧数道数,其中这n个字节的含义如下:1个字节:该数据帧中每道混合帧数;4字节:第一个音频帧与待混音视频帧的时间差;4字节:最后一个音频帧和要混音的视频帧的时间差;4字节:视频帧的大小;4每个音轨的混合帧数音轨数:每个混合音频帧的大小。 【PMP回放】从上面的分析我们知道,PMP有两种格式(1.0,2.0),由于2.0格式封装的码流不同,所以有pmp2.0和pmp-avc的区别;所有,我们需要不同的播放器(pmp-mod1,pmp-mod2,pmp-avc)来播放这些文件; 由于pmp1.0和pmp2.0格式文件的巨大差异,如果要在小P上同时支持两种格式,代码编写会更加复杂,效率也可能会降低。同时由于pmp1.0格式的不足,建议大家放弃pmp1.0格式,原来的pmp1.0格式可以通过remux转换成2.0格式;至于pmp-mp4v和pmp-avc文件,我个人认为可以在一个程序中支持,因为它们的封装是一样的,只是里面的流不一样;只需要用不同的解码器解码。 【后记】写这篇文章的目的是让你知道pmp各种格式的区别。希望有时间有能力给你做一个pmp-mod,支持pmp2.0(包括pmp-mp4v,pmp-avc),但是实际上我目前比较忙,没有太多精力写这个。所以,写这个的另一个目的是分享我的研究,希望有技术专家能通过本文写一个新的pmp-mod,支持pmp2.0格式(包括pmp-mp4v和pmp-avc)的回放。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: