??xml version="1.0" encoding="utf-8" standalone="yes"?>中文字幕日韩精品有码视频,а√在线中文在线新版,国产91亚洲精品一区二区三区http://www.aygfsteel.com/mahang/archive/2011/10/06/365026.html马航马航Thu, 06 Oct 2011 01:37:00 GMThttp://www.aygfsteel.com/mahang/archive/2011/10/06/365026.htmlhttp://www.aygfsteel.com/mahang/comments/365026.htmlhttp://www.aygfsteel.com/mahang/archive/2011/10/06/365026.html#Feedback0http://www.aygfsteel.com/mahang/comments/commentRss/365026.htmlhttp://www.aygfsteel.com/mahang/services/trackbacks/365026.html阅读全文

马航 2011-10-06 09:37 发表评论
]]>
手机视频文g格式解析?3GP/MP4http://www.aygfsteel.com/mahang/archive/2011/10/03/365027.html马航马航Mon, 03 Oct 2011 02:54:00 GMThttp://www.aygfsteel.com/mahang/archive/2011/10/03/365027.htmlhttp://www.aygfsteel.com/mahang/comments/365027.htmlhttp://www.aygfsteel.com/mahang/archive/2011/10/03/365027.html#Feedback0http://www.aygfsteel.com/mahang/comments/commentRss/365027.htmlhttp://www.aygfsteel.com/mahang/services/trackbacks/365027.html

前言Q做完了(jin)手机全能播放器的目Q?nbsp;又要告别几个月来q肩作战Q即去北京发展的Manager zhu。准备把做过?GP/FLV/AVI格式整理一遍, 是对几个月辛苦成果的ȝQ?nbsp;也ؓ(f)后来者提供一些参考?/span>

1. 概述

行的文件格式背后都有大公司的支持。FLV得益于ADOBE公司推动的网l视频分享风潮,而AVI则是MICROSOFT首创的RIFF卌频和音频交织在一起同步播放?nbsp;3GP/MP4是APPLE提出q得到ISO标准支持作ؓ(f)NOKIA{手机的默认视频格式?GP是MP4格式在手Z的简化版。MP4的codecl合一般是mpeg4 + AAC, 3GP则按版本演进分ؓ(f)3gpp r5(h.263/mpeg4 + AMR-NB/AMR WB), 3gpp r6(增加h.264视频和aacPlus音频支持)?/span>

有h?x)把MP4和MPEG4搞؜Q?nbsp;前者是文g容器(container)Q后者是视频~码格式Q?nbsp;容器的作用是把压~编码后的视频和音频数据可能紧凑的排布Q就好像阿甘的y克力盒子Q你q不知道盒子里有什么, 但你可以按照既定的线索解开文gQ取Z需要的数据?/span>

文g格式一般包括以下三要素Q?/span>

header: 标记文gcdQ音视频码流的基本属性信?/span>
index: 索引表,每个frame有对应的offset,size,timestamp.
stream: 真正的音视频数据?/span>
M文g格式都应该有以上3要素?nbsp;当然AVI视频没有索引也能播放Q但不能拖放seekQ需要自己重建烦(ch)引。解析器(demuxer)Ҏ(gu)frame_id扑ֈ其在文g中的offset和size,然后d出来解码q播放?/span>

2. 文g格式分析

下面来分析一?GP/MP4文g格式。APPLE的格式有2个特点,1. 排布紧凑几乎没有冗余数据(AVI则有很多junk数据)Q?.韌频码数据可随意存放而不需按时间顺序排布?/span>

3gp文g׃pd的box(atom)l成。每个box的结构都?字节的size,4字节的type, q有一些data数据。用mp4info查看3gp文g的数据排布如下图Q?/span>

如上? ftyp是表C文件的版本信息Q?nbsp;mdat存放文字Q音视频{数据。你可能要问Q这些音视频数据怎么扑ֈ呢? 是通过moov box里的子box trakQ里面存攄韌频的属性描qC?qing)每个sample的烦(ch)引?/span>

3. 关于sample atoms

   video和audio的码属?如视频width/height,codec id, 音频采样率声道数{?存放在stsd box里; 下面着重介lMP4高效压羃的精华:(x)stts,stss,stsc,stsz,stco五个box。对比AVI的烦(ch)引表是每个sample都有对应的id,flag,offset,sizeQ?GP的高效烦(ch)引方式可以把AVI转码成同码率的MP4后,文gsize减小成原来的20-30%!

1. stts atom(time to sample atomsQ见quicktime format 文档?-28 标准文档点击下蝲): 存储?jin)sample的时间信息。stts能让很方便的Ҏ(gu)timestamp扑ֈ对应的sampleQ或者获取某个sample对应的timestamp. sttstable记录着有相同duration的sample的数量count和时长dutation?/span>

2. stss atom(sync sample atomQ见文档?-31): 存储?jin)每个关键的sample id?nbsp;stss能让你很方便的找到当前最q的关键帧?/span>

3. stsc atom(sample to chunk atom): sample存放在chunk里ؓ(f)?jin)允怼化的数据d。比如音频sample size都很(amr-nb sample size?2字节Q, 每次d一个sample开销太大Q?nbsp;可一ơ性读所在chunk里一堆sample?/span>

4. stsz atom(sample size atom): stsz可以描述每个sample的size.

5. stco atom(chunk offset atoms): stco描述?jin)每个chunk在文件中的绝对偏UM|。该offset可以?2位的

也可以是64位的Q后者用来支持处理超大文件?/span>

4 .使用sample atoms来处理播放流E?/span>

· 查找sample         

1Q确定时_(d)相对于媒体时间坐标系l?/span>

2Q检查time-to-sample atom来确定给定时间的sample序号?/span>

3Q检查sample-to-chunk atom来发现对应该sample的chunk?/span>

4Q从chunk offset atom中提取该trunk的偏U量?/span>

5Q利用sample size atom扑ֈsample在trunk内的偏移量和sample的大?/span>

例如Q如果要扄1U的视频数据Q过E如下:(x)

1Q?nbsp;W?U的视频数据相对于此?sh)?jing)的时间ؓ(f)600

2Q?nbsp;(g)查time-to-sample atomQ得出每个sample的duration?0Q从而得出需要寻扄600/40 = 15 + 1 = 16个sample

3Q?nbsp;(g)查sample-to-chunk atomQ得到该sample属于W?个chunk的第一个sampleQ该chunk共有4个sample

4Q?nbsp;(g)查chunk offset atom扑ֈW?个trunk的偏U量?0472

5Q?nbsp;׃W?6个sample是第5个trunk的第一个sampleQ所以不用检查sample size atomQtrunk的偏U量x(chng)该sample的偏U量20472。如果是q个trunk的第二个sampleQ则从sample size atom中找到该trunk的前一个sample的大,然后加上偏移量即可得到实际位|?/span>

6Q?nbsp;得到位置后,卛_取出相应数据q行解码Q播?/span>

·       查找关键?/span>      

查找q程与查找sample的过E非常类|只是需要利用sync sample atom来确定key frame的sample序号

定l定旉的sample序号 
(g)查sync sample atom来发现这个sample序号之后的key frame 
(g)查sample-to-chunk atom来发现对应该sample的chunk 
从chunk offset atom中提取该trunk的偏U量 
利用sample size atom扑ֈsample在trunk内的偏移量和sample的大?/span>


5 .3GP/MP4相关资源

     quicktime file format specification: 最权威的格式文?nbsp;点击下蝲
     开源的3GP/MP4解析器:(x) ffmpeg, GPAC, helix, google opencore{?nbsp;



马航 2011-10-03 10:54 发表评论
]]>
经典的Android开源项?/title><link>http://www.aygfsteel.com/mahang/archive/2011/10/03/365028.html</link><dc:creator>马航</dc:creator><author>马航</author><pubDate>Mon, 03 Oct 2011 01:47:00 GMT</pubDate><guid>http://www.aygfsteel.com/mahang/archive/2011/10/03/365028.html</guid><wfw:comment>http://www.aygfsteel.com/mahang/comments/365028.html</wfw:comment><comments>http://www.aygfsteel.com/mahang/archive/2011/10/03/365028.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/mahang/comments/commentRss/365028.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/mahang/services/trackbacks/365028.html</trackback:ping><description><![CDATA[<table cellspacing="0" cellpadding="0" style="word-wrap: break-word; empty-cells: show; border-collapse: collapse; table-layout: fixed; width: 757px; padding: 0px; margin: 0px;"> <tbody style="word-wrap: break-word; padding: 0px; margin: 0px;"> <tr style="word-wrap: break-word; padding: 0px; margin: 0px;"> <td class="t_f" id="postmessage_30" style="word-wrap: break-word; font-size: 14px; padding: 0px; margin: 0px;">Android开发又带来新一轮热潮,很多开发者都投入到这个浪潮中M(jin)Q创造了(jin)许许多多相当优秀的应用。其中也有许许多多的开发者提供了(jin)应用开 源项目,贡献Z们的智慧和创造力。学?fn)开源代码是掌握技术的一个最x(chng)式。下面推荐几个应用开源项目,q些目不仅提供?jin)优U的创意,也可以直接掌?Android内核的接口用:(x)<br style="word-wrap: break-word; padding: 0px; margin: 0px;" /><br style="word-wrap: break-word; padding: 0px; margin: 0px;" />1、Android团队提供的示例项?br style="word-wrap: break-word; padding: 0px; margin: 0px;" /><br style="word-wrap: break-word; padding: 0px; margin: 0px;" />如果不是从学?fn)Android SDK中提供的那些样例代码开始,可能没有更好的方法来掌握在Androidq个框架上开发。由Android的核?j)开发团队提供了(jin)15个优U的示例项目,包含?jin)游戏、图像处理、时间显C、开始菜单快h式等?br style="word-wrap: break-word; padding: 0px; margin: 0px;" />地址Q?a target="_blank" style="word-wrap: break-word; color: #336699; text-decoration: underline; padding: 0px; margin: 0px;">http://code.google.com/p/apps-for-android/</a><br style="word-wrap: break-word; padding: 0px; margin: 0px;" /><br style="word-wrap: break-word; padding: 0px; margin: 0px;" />2?Remote Droid<br style="word-wrap: break-word; padding: 0px; margin: 0px;" /><br style="word-wrap: break-word; padding: 0px; margin: 0px;" />RemoteDroid是一个Android应用Q能够让用户使用自己的无U网l用无UK盘、触摸屏操作手机。这个项目ؓ(f)开发者提供了(jin)如网l连接、触摸屏手指q动{很好的样例?br style="word-wrap: break-word; padding: 0px; margin: 0px;" />地址Q?a target="_blank" style="word-wrap: break-word; color: #336699; text-decoration: underline; padding: 0px; margin: 0px;">http://code.google.com/p/remotedroid/</a><br style="word-wrap: break-word; padding: 0px; margin: 0px;" /><br style="word-wrap: break-word; padding: 0px; margin: 0px;" />3?TorProxy和Shadow<br style="word-wrap: break-word; padding: 0px; margin: 0px;" /><br style="word-wrap: break-word; padding: 0px; margin: 0px;" />TorProxy应用实现?jin)Android手机无线는(sh)传通讯(TOR)Q和Shadow应用一起用,可以使用手机匿名上网。从该项目源代码中,可以掌握socketq接、管理cookie{方法?br style="word-wrap: break-word; padding: 0px; margin: 0px;" />地址Q?a target="_blank" style="word-wrap: break-word; color: #336699; text-decoration: underline; padding: 0px; margin: 0px;">http://www.cl.cam.ac.uk/research/dtg/code/svn/android-tor/</a><br style="word-wrap: break-word; padding: 0px; margin: 0px;" /><br style="word-wrap: break-word; padding: 0px; margin: 0px;" />4?Android SMSPopup<br style="word-wrap: break-word; padding: 0px; margin: 0px;" /><br style="word-wrap: break-word; padding: 0px; margin: 0px;" />SMSPopup可以截获短信内容昄在一个(chng)泡Ş状的H口中。从q个目中可以掌握到如何使用内置的短信SMS接口?br style="word-wrap: break-word; padding: 0px; margin: 0px;" />地址Q?a target="_blank" style="word-wrap: break-word; color: #336699; text-decoration: underline; padding: 0px; margin: 0px;">http://code.google.com/p/android-smspopup/</a><br style="word-wrap: break-word; padding: 0px; margin: 0px;" /><br style="word-wrap: break-word; padding: 0px; margin: 0px;" />5?Standup Timer<br style="word-wrap: break-word; padding: 0px; margin: 0px;" /><br style="word-wrap: break-word; padding: 0px; margin: 0px;" />Standup Timer应用用于控制站立?x)议旉Q类似秒表倒计Ӟ可以提醒每个人的讲话旉已到Q从而保证每个与?x)者用时间一栗从该项目的代码中,可以学会(x)如何使用旉函数。另外,q个目的代码是采用视图view、模型model严格分离的设计思\?br style="word-wrap: break-word; padding: 0px; margin: 0px;" />地址Q?a target="_blank" style="word-wrap: break-word; color: #336699; text-decoration: underline; padding: 0px; margin: 0px;">http://github.com/jwood/standup-timer</a><br style="word-wrap: break-word; padding: 0px; margin: 0px;" /><br style="word-wrap: break-word; padding: 0px; margin: 0px;" />6?Foursquare<br style="word-wrap: break-word; padding: 0px; margin: 0px;" /><br style="word-wrap: break-word; padding: 0px; margin: 0px;" />是Foursquare.com的一个客L(fng)应用Q该应用主要分ؓ(f)两个模块QAPI(com.joelapenna.foursquare)和界面前?(com.joelapenna.foursquared)两部分。从该项目代码中Q可以学?x)如何同步、多U程、HTTPq接{技术?br style="word-wrap: break-word; padding: 0px; margin: 0px;" />地址Q?a target="_blank" style="word-wrap: break-word; color: #336699; text-decoration: underline; padding: 0px; margin: 0px;">http://code.google.com/p/foursquared/</a><br style="word-wrap: break-word; padding: 0px; margin: 0px;" /><br style="word-wrap: break-word; padding: 0px; margin: 0px;" />7?Pedometer<br style="word-wrap: break-word; padding: 0px; margin: 0px;" /><br style="word-wrap: break-word; padding: 0px; margin: 0px;" />Pedometer应用用于记录你每天走路步数的。尽记录不一定精准,但是从这个项目中Q可以学?fn)几个不同的技术:(x)加速器交互、语x(chng)新、后台运行服务等?br style="word-wrap: break-word; padding: 0px; margin: 0px;" />地址Q?a target="_blank" style="word-wrap: break-word; color: #336699; text-decoration: underline; padding: 0px; margin: 0px;">http://code.google.com/p/pedometer/</a><br style="word-wrap: break-word; padding: 0px; margin: 0px;" /><br style="word-wrap: break-word; padding: 0px; margin: 0px;" />8?OpenSudoku-android<br style="word-wrap: break-word; padding: 0px; margin: 0px;" /><br style="word-wrap: break-word; padding: 0px; margin: 0px;" />OpenSudoku是一个简单的?ji)宫格数独游戏。从代码中可以学?fn)到如何在视图中昄表格数据Q以?qing)如何和一个网站交互等技术?br style="word-wrap: break-word; padding: 0px; margin: 0px;" />地址Q?a target="_blank" style="word-wrap: break-word; color: #336699; text-decoration: underline; padding: 0px; margin: 0px;">http://code.google.com/p/opensudoku-android/</a><br style="word-wrap: break-word; padding: 0px; margin: 0px;" /><br style="word-wrap: break-word; padding: 0px; margin: 0px;" />9?ConnectBot<br style="word-wrap: break-word; padding: 0px; margin: 0px;" /><br style="word-wrap: break-word; padding: 0px; margin: 0px;" />ConnectBot是Androidq_的一个客L(fng)安全壛_用。从该项目代码中Q可以学?fn)到很多Android安全斚w的内容,q些是你在开发应用时l常需要考虑的安全问题?br style="word-wrap: break-word; padding: 0px; margin: 0px;" />地址Q?a target="_blank" style="word-wrap: break-word; color: #336699; text-decoration: underline; padding: 0px; margin: 0px;">http://code.google.com/p/connectbot/</a><br style="word-wrap: break-word; padding: 0px; margin: 0px;" /><br style="word-wrap: break-word; padding: 0px; margin: 0px;" />10?WordPress的Android应用<br style="word-wrap: break-word; padding: 0px; margin: 0px;" /><br style="word-wrap: break-word; padding: 0px; margin: 0px;" />当然在最后不能不提WordPress的Android应用?jin),q是WordPress官方开发团队提供的一个项目。从代码中可以学?fn)到XMLRPC调用Q当然还有更多的优秀内容Q?br style="word-wrap: break-word; padding: 0px; margin: 0px;" />地址Q?a target="_blank" style="word-wrap: break-word; color: #336699; text-decoration: underline; padding: 0px; margin: 0px;">http://android.svn.wordpress.org/trunk/</a></td> </tr> </tbody> </table><img src ="http://www.aygfsteel.com/mahang/aggbug/365028.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/mahang/" target="_blank">马航</a> 2011-10-03 09:47 <a href="http://www.aygfsteel.com/mahang/archive/2011/10/03/365028.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">DZɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɳ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʤ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʵ</a>| <a href="http://" target="_blank">կ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">пǰ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ű</a>| <a href="http://" target="_blank">ɿ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ţ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ϸ</a>| <a href="http://" target="_blank">ʻ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>