Android4.0的多媒体框架Nuplayer介绍

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Android4.x 的RTSP 框架学习

——NuPlayer 介绍

本文介绍如下内容:

播放框架介绍 RTSP 源介绍

HTTP 流媒体的区别 要研究的点

NuPlayer 框图:

NuPlayer

NuPlayerDriver

ALooper

<<接口>>

MediaPlayerInterface

NuPlayer::Renderer

NuPlayer::Decoder

ACodec::UninitializedState

AHierarchicalStateMachine

ACodec ACodec::UninitializedState

ACodec::LoadedToIdleState ACodec::IdleToExecutingState ACodec::ExecutingState

ACodec::ExecutingToIdleState ACodec::IdleToLoadedState ACodec::FlushingState

AHandler

1

*

*

11*

<<接口>>NuPlayer::Source

*1

NuPlayer::HTTPLiveSource

NuPlayer::RTSPSource

ALooper

1*

MyHandler

*

1

ARTPConnection ARTSPConnection ALooper

1*

mNetLooper for

ARTPConnection

ARTPSource

ARTPAssembler AAVCAssembler

AAVCAssembler

AMPEG4AudioAssembler AH263Assembler AAMRAssembler AAMRAssembler

AMPEG4ElementaryAssembler ARawAudioAssembler

AnotherPacketSource

<<接口>>MediaSource

APacketSource

*

1

*

1*

1OMX AHandler

概述:

1.整个播放框架是基于ALooper、AHandler和Amessage实现的消息机制的。

2.从MediaPlayerService看,有RTSP和http且为m3u8的url会用NuPlayerDriver,前者

就走RTSPSource后者走HTTPLiveSource(还没看呢)。

3.分播放框架和RTSP源两部分来介绍,他们之间耦合很低,可以分开看代码。

播放框架:

1.NuPlayerDriver是对NuPlayer的封装,前者继承MediaPlayerInterface接口,后者实现

播放的功能。

2.NuPlayer通过RTSPSource接口得到数据流的信息和解码数据本身,RTSPSource的接口

有start、getFormat、getDuration、seekTo、dequeueAccessUnit、feedMoreTSData和stop。

后面会对NuPlayer做详细介绍。

3.Decoder的核心是ACodec,后者相当于stagefright的OMXCodec,实例化一个OMX的

Client,调用OMX组件,实现Decode功能。

4.ACodec有几个跟OMX状态对应的内部类,这里有个状态机的概念。如果一个msg的

Handler为Acodec,那么他对应的处理函数就对应其所在状态的onMessageReceived实现。看ACodec代码要了解OMX的一些概念,否则找不到调用关系了,有些流程是要靠OMX回调来串联的。

5.Render,奇怪,我始终没能找到google组件软解的显示是在哪里实现的,期待debug。

6.Android4.0引入了SurfaceTexture的概念,在给组件分配输出buffer时有两种方式可选,

分配一段内存buffer,或是从显示模块分配buffer,后者显然更高效。前者还需要再做一次格式转换,后者貌似由OMX完成。

7.OMX组件,在qcom平台上有两套组件plugin,qcom的和google的,qcom在

libstagefrighthw.so中。google的组件和库命名规则为"OMX.google. aac.decaac.decoder"//对应动态库libstagefright_soft_aacdec.so

RTSP源:

1.RTSPSource的与播放框架接口,是播放框架的数据源。其主要接口有:

2.AnotherPacketSource在RTSPSource中作为mAudioTrack和mVideoTrack,他虽然继承

了MediaSource接口,但是并没有使用read来读数据,而是通过dequeueAccessUnit接

口,Server端的压缩流通过queueAccessUnit保存到这里。

3.MyHandler是核心,其中包含ARTSPConnection和ARTPConnection两大部分。

MyHandler负责向Server端发送Request和处理Response。

4.ARTSPConnection负责维护RTSP socket,发送Request,循环接收Server端数据,响应

Server的Request。这里只是接收Response,真正的处理在MyHandler侧。

5.代码使用的RTSP请求有DESCRIBE,其Response中有SDP信息,接下来是SETUP,

将本端的端口信息等发给服务器,然后是PLAY。为了保持RTSP链接,还要周期性发OPTIONS。

6.ARTPConnection负责RTP和RTCP两个socket,接收RTP和RTCP包,周期性发送RTCP

包。

Public接口:

Private接口:

7.每个RTP数据流都有一个ARTPSource,后者会创建一个ARTPAssembler。依据处理数

据流的压缩格式,实例化对应格式的Assembler。

ARTPAssembler的Public接口:

相关文档
最新文档