Android4.0的多媒体框架Nuplayer介绍_第1页
Android4.0的多媒体框架Nuplayer介绍_第2页
Android4.0的多媒体框架Nuplayer介绍_第3页
Android4.0的多媒体框架Nuplayer介绍_第4页
Android4.0的多媒体框架Nuplayer介绍_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Android4x的RTSP框架学习NuPlayer介绍本文介绍如下内容:播放框架介绍RTSP源介绍HTTP流媒体的区别要研究的点NuPlayer框图:概述:1. 整个播放框架是基于ALooper、AHandler和Amessage实现的消息机制的。2. 从MediaPlayerService看,有RTSP和http且为m3u8的url会用NuPlayerDriver,前者就走RTSPSource后者走HTTPLiveSource(还没看呢)。3. 分播放框架和RTSP源两部分来介绍,他们之间耦合很低,可以分开看代码。播放框架:1. NuPlayerDriver是对NuPlayer的圭寸装,前

2、者继承MediaPlayerlnterface接口,后者实现播放的功能。2. NuPlayer通过RTSPSource接口得到数据流的信息和解码数据本身,RTSPSource的接口有start、getFormat、getDuration、seekTodequeueAccessUnit、feedMoreTSData和stop。后面会对NuPlayer做详细介绍。3. Decoder的核心是ACodec,后者相当于stagefright的OMXCodec,实例化一个OMX的Client,调用OMX组件,实现Decode功能。4. ACodec有几个跟OMX状态对应的内部类,这里有个状态机的概念。如

3、果一个msg的Handler为Acodec,那么他对应的处理函数就对应其所在状态的onMessageReceived实现。看ACodec代码要了解OMX的一些概念,否则找不到调用关系了,有些流程是要靠OMX回调来串联的。5. Render,奇怪,我始终没能找到google组件软解的显示是在哪里实现的,期待debug。6. Android4.0引入了SurfaceTexture的概念,在给组件分配输出buffer时有两种方式可选,分配一段内存buffer,或是从显示模块分配buffer,后者显然更高效。前者还需要再做一次格式转换,后者貌似由OMX完成。7. OMX组件,在qcom平台上有两套组件

4、plugin,qcom的和google的,qcom在libstagefrighthw.so中。google的组件和库命名规则为"OMX.google.aac.decaac.decoder"/对应动态库libstagefright_soft_aacdec.soRTSP源:1. RTSPSource的与播放框架接口,是播放框架的数据源。其主要接口有:RTSPSource(const-char*url,aenstKeyedVeatorStringsf*headersbool昌falsefuid_tuid0);virtualvoidStSft;|virtualvoidstopo;v

5、irtualstat-us_tf6ClMOT©TSDdtd();virtualsp<HetaData>QctFornna.t(booiaudio);deC|U6U6ACC6SSUnit(boolaudio,sp<AEuffer>*ajccessVnit);virtualstatus_i-etDliratiOH(int64triin.ktinnlh.j;virtualSeekTO(int64ts:皀皀kTjjnells);virtualboolisS66k8lbl6();voidonMessageReceived(constsp-=:Aliaesage>&

6、amp;msg:i;2. AnotherPacketSource在RTSPSource中作为mAudioTrack和mVideoTrack,他虽然继承了MediaSource接口,但是并没有使用read来读数据,而是通过dequeueAccessUnit接口,Server端的压缩流通过queueAccessUnit保存到这里。3. MyHandler是核心,其中包含ARTSPConnection和ARTPConnection两大部分。MyHandler负责向Server端发送Request和处理Responseo4. ARTSPConnection负责维护RTSPsocket,发送Reques

7、t,循环接收Server端数据,响应Server的Requesto这里只是接收Response,真正的处理在MyHandler侧。voidCOnriCCt(Constuz?lconstspiMessage>ireply);voiddisconnectfconjtreply;voidsendRequest(constcharireqiLest-fconstsp<AMessage>s.K,epJjy);voidobserveBinaryData(constsp<AHessage>&g-epiLy)7boiPsrseURL:consxchar*wrl,AStri

8、nghostunsigned*poirtAStringAString'userAString"pag);5. 代码使用的RTSP请求有DESCRIBE,其Response中有SDP信息,接下来是SETUP,将本端的端口信息等发给服务器,然后是PLAY。为了保持RTSP链接,还要周期性发OPTIONS。6. ARTPConnection负责RTP和RTCP两个socket,接收RTP和RTCP包,周期性发送RTCP包。Public接口:voidaddStream(int:Socket:.in.t:ctczpSiQiFlce配*ip!&ion>LighE塚厲irod

9、eK,const>p-cAH«sca9«>boolimQfictfid*#:voidremovestream(intrtpSocket,int,rtcpSocket);voidIllj6CtP3Ck6t(imcindexconstsp<ABuffer>ibuffer);/右甘t&apairofUDPdMgramsocketsboundtoadjawntports/(thertpSocketisboumdtoevenportthertcpSockettothe/nexthigherport)*staticvoidMak©PortPia

10、iir(int壮畑Socket弱int-叱:rtGpSoiDkjet:.unsigiied*rtpPor1tji事Private接口:List<StreaiiiInfo>nSt-reams;boolmPollEventPeiuixiug;int.64_trrAiaB'tBjeiaiBlverBeorTiJnelJ's;voidonAddStream(constsp<AMeseage>lntsg);voidonRemovestream(constsp<AHessaga>|4msg);voidonPollStreamso;voidOnlnjaCt

11、PacketiLJonst5P<AHeSfage>j.m&y);vs±donSendReceiverReports();stati.is_tr6CjV6(Streamlnfo*infoboo1e巳c:巳zLiteRTP);parseRTP(Strt*alnfoconct>p-cABu££«r>;parseRTCP(S&reaiLLlnfa*info,eernffcsp<ABuffer>i&bu£fe£);status_tparseSR(Streanilnfo*info,con

12、st-uitit-0_t*dat-afsize_tsizeJ;status_tparseBYE(Streamlnfo*info,constuint8_tdata.size_tsize);fp<ARTPSource>flndSOUTCe(treamlnfo'iii£uruint3Z_t丄;voidpostPollEvento;7. 每个RTP数据流都有一个ARTPSource,后者会创建一个ARTPAssembler。依据处理数据流的压缩格式,实例化对应格式的Assembler。ARTPAssembler的Public接口:ARTPAssembler的Private

13、接口:宜“eiatl书StatusflddNALUnit(constrsp<AIiTPSource>source);voidaddSingleNALUnit.:corutsp<ABuffr>biuffer1;Ass昌mblySt-atusaddFragmentedNALUnit(list-spABuffer>>qiieue)itooladdSingleTimeAggregationPacket(constsp-sABufCer>bu££er?/voidsubmitAccessUnit(>;8. ARTPAssembler对AR

14、TPConnection接收到的数据进行处理,如AVC数据,他会把单一NAL,NAL分片和复合NAL分别处理后,都以单独NAL的形式回调传给RTSPSource,存放在AnotherPacketSource中,供decoder端使用。HTTP的比较:1. HTTPLive还没看。2. 普通的http和rtsp最大的区别是什么呢?HTTP流媒体是本地解析,而RTSP流媒体是server段解析。HTTP流媒体通过HTTP协议,下载一定buffer量的server端文件到本地,利用本地的parser,像播放文件一样解析,播放。而RTSP流媒体,从server端得到的就是可解码流。HTTP在实现seek时,是丢掉当前所有b

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论