libnbaio
libeffects
源代码位于:frameworks/av/media/libeffects。
libdrmframework
源代码位于:frameworks/av/drm/libdrmframework。
libmedia
源代码位于:frameworks/av/media/libmedia。
声音部分在7.3.1小节有描述。
接口定义:
| 说明 | |
| ICrypto | |
| IDrm | |
| IDrmClient | 回调,notify接口 |
| IEffect | |
| IEffectClient | |
| IHDCPObserver | |
| IHDCP | |
| IMediaLogService | |
| IMediaMetadataRetriever | |
| IMediaPlayer | 播放器接口 |
| IMediaPlayerClient | 播放器对应的客户端回调接口 |
| IMediaPlayerService | 媒体服务接口 |
| IMediaRecorder | 录像机接口 |
| IMediaRecorderClient | 录像机对应的客户端回调接口 |
| IOMX | OMX接口 |
| IOMXObserver | OMX消息通知接口,onMessage(const omx_message &msg) |
| IRemoteDisplay | 远程屏幕控制接口,pause、resume |
| IRemoteDisplayClient | 远程屏幕对应的客户端回调接口,onDisplayDisconnected |
| IStreamSource | 流式数据源,通过IStreamListener回调主动提供数据 |
| IStreamListener | 流式数据源监听者接口queueBuffer |
基类:
| 类名 | 说明 |
| MediaPlayerBase | 播放器抽象基类,相对于IMediaPlayer,多了playerType接口,处理Notify回调 |
| MediaPlayerBase:: AudioSink | 音频输出抽象基类 |
| MediaPlayerInterface | 继承MediaPlayerBase,使用软件混音AudioSink |
| MediaPlayerHWInterface | 继承MediaPlayerBase,直接输出视频 |
| MediaRecorderBase | 录像机抽象基类 |
类说明:
| 类名 | 说明 |
| IMediaDeathNotifier | 单例,管理IMediaPlayerService的死亡通知 |
| JetPlayer | 播放Jet音效 |
| MediaMetadataRetriever | 代理IMediaMetadataRetriever |
| MediaPlayer | 管理IMediaPlayer,setDataSource请求MediaPlayerService创建新的IMediaPlayer实例;继承实现IMediaPlayerClient,处理notify回调,转发给注册的MediaPlayerListener 另外包装IMediaPlayerService::decode接口 |
| MediaProfiles | 媒体格式映射, |
| MediaRecorder | 管理IMediaRecorder实例,继承实现IMediaRecorderClient,处理notify回调,转发给注册的MediaRecorderListener |
| MediaScanner | 扫描目录,调用MediaScannerClient接口处理目录和文件 |
| MediaScannerClient | 处理目录和文件的基类,协助处理字符集识别转换,unicode/ucnv |
| Metadata | Meta data序列化,size, key, type, value |
| SoundPool | |
| SoundPoolThread | |
| ToneGenerator | |
| Visualizer | 继承AudioEffect |
libstagefright
源代码位于:frameworks/av/media/libstagefright。
框架类:
| 类名 | 说明 |
| AHandler | 消息处理器,绑定一个ALooper线程,通过ID识别 onMessageReceived() |
| ALooper | 消息处理线程,有一个消息队列 |
| ALooperRoster | 全局单例,维护ID到AHandler的映射,以及AHandler绑定的ALooper信息 |
| AMessage | 消息,内部指定了AHandler的ID,保存键值对 |
| ABuffer | 管理缓存,有效范围,释放时发出Farewell消息 |
| ANetworkSession | 管理套接字select,内部线程,多个Session,收到的数据通过消息发出 |
| AState | 状态机一个状态,响应消息,有父子关系 |
| AHierarchicalStateMachine | 继承AHandler处理消息,改变状态 |
| ParsedMessage | 包装HTTP/RTSP的应答 |
OMX类说明:编译为(libstagefright_omx.so)
| 类名 | 说明 |
| OMXPluginBase | 管理编解码模块(OMX_COMPONENTTYPE)的创建释放 |
| OMXMaster | 继承OMXPluginBase,内部管理多个OMXPluginBase实现,先入为主,硬件编解码优先 libstagefrighthw.so,导出createOMXPlugin接口 |
| OMXNodeInstance | 包装OMX_HANDLETYPE,代表一个编解码模块 |
| GraphicBufferSource | 协助OMXNodeInstance管理输入Surface的帧数据,继承BufferQueue::ConsumerListener,有时候会丢弃后者复制最后一帧 |
| OMX | 继承实现IOMX接口,管理node_id映射OMXNodeInstance;使用OMXMaster |
| OMX:: CallbackDispatcher | 启动内部线程分发消息给对应的OMXNodeInstance,事件处理调用序列: OMXNodeInstance::OnEvent(OMX_EVENTTYPE) OMX::OnEvent(OMX_EVENTTYPE) OMXNodeInstance::onEvent(OMX_EVENTTYPE) CallbackDispatcher::post(omx_message) CallbackDispatcher::dispatch(omx_message) OMXNodeInstance::onMessage(omx_message) |
| SoftOMXComponent | 软件编解码模块,将C接口转换为C++虚方法,引用计数 |
| SimpleSoftOMXComponent | 继承SoftOMXComponent;ALooper线程,缓存管理 |
| SoftOMXPlugin | libstagefright_soft_*.so,导出createSoftOMXComponent接口,创建SoftOMXComponent实例,使用静态列表描述所有编解码模块OMX.google.* |
| SoftVideoDecoderOMXComponent | 继承SimpleSoftOMXComponent |
核心类:
| 类名 | 说明 |
| MetaData | 一组键值对 |
| DataSource | 数据源,提供sniff接口,一组静态SnifferFunc |
| MediaExtractor | 媒体属性获取,创建MediaSource |
| MediaSource | 媒体源,音频或者视频,setBuffers、read |
| MediaBuffer | 多种类型缓存的联合体,void*,malloc, GraphicBuffer、ABuffer、克隆 |
| MediaBufferObserver | 监视MediaBuffer释放 |
| MediaWriter | 媒体格式写入,从多个MediaSource获取音视频数据,事件通知IMediaRecorderClient,派生类一般创建线程驱动读写。 |
| MediaMuxer | 媒体格式写入,使用者驱动writeSampleData() 使用MediaWriter实现,使用MediaAdapter适配MediaWriter的pull模式。 |
| MediaAdapter | 继承MediaSource |
类说明:
| 类名 | 说明 |
| MediaCodecList | 管理CodecInfo优先级查找,/etc/media_codecs.xml |
| MediaCodecList:: CodecInfo | mName、mIsEncoder、mTypes(位数组)、mQuirks(位数组),位数组映射如audio/3gpp到一个位 |
| OMXCodec | 继承MediaSource、MediaBufferObserver 使用MediaCodecList查找编解码模块,处理flags,对编解码过滤排序 使用IOMX接口创建编解码模块,处理Meta,配置OMX节点参数 OMXCodec由外部调用read驱动,同时响应OMX事件 |
| OMXCodecObserver | 继承实现IOMXObserver,将OMX事件转发给OMXCodec处理 |
| MuxOMX | 继承实现IOMX,包含MediaPlayerService的全局IOMX实例,同时包含一个本地OMX实例,软编解码模块从本地创建 |
| OMXClient | 与IOMX连接,远程连接使用MuxOMX封装 |
| ACodec | 继承AHierarchicalStateMachine,处理OMX状态,缓存管理 |
| MediaCodec | 继承AHandler,使用外部公共Looper线程处理消息,包含一个ACodec(使用外部Looper,video类型专用Looper) 基于消息驱动,协调MediaCodec使用者与ACodec的异步工作流 》使用者: dequeueInputBuffer write to buffer queueInputBuffer dequeueOutputBuffer read from buffer releaseOutputBuffer 》ACodec: ACodec::kWhatFillThisBuffer ACodec::kWhatDrainThisBuffer |
| MediaCodec:: BufferInfo | 捆绑一个缓存所有相关信息 |
类说明:
| 类名 | 说明 |
| AudioPlayer | 持有外部传入的AudioSink和MediaSource,响应AudioSink回调从MediaSource读取数据,继承TimeSource提供时间源 |
| TimedEventQueue | 事件回调线程,Event::fire() |
| AwesomeEvent | 在fire中调用AwesomePlayer的指定方法 |
| AwesomeRenderer | render虚方法 |
| AwesomeLocalRenderer | 使用SoftwareRenderer渲染 |
| SoftwareRenderer | 在NativeWindow在渲染,memcpy或者使用ColorConverter |
| AwesomeNativeWindowRenderer | 直接queueBuffer到NativeWindow,使用硬件旋转图像 native_window_set_buffers_transform |
| AwesomePlayer | 持有AudioPlayer,在onVideoEvent中播放视频 使用MediaExtractor、OMXCodec、TimedEventQueue |
| StagefrightMetadataRetriever | 继承实现MediaMetadataRetrieverBase,包含DataSource、MediaExtractor,使用OMXCodec解码,获取指定时间点的图像 |
| StagefrightMediaScanner | 继承MediaScanner,使用MediaMetadataRetriever,运行在应用进程中。 |
DataSource继承体系:
| 类名 | 说明 |
| DataUriSource | 继承DataSource,处理DATAURI |
| FileSource | |
| HTTPBase | HTTP抽象基类,继承DataSource |
| ChromiumHTTPDataSource | 继承实现HTTPBase,使用SfDelegate处理HTTP |
| NuCachedSource2 | 继承DataSource,使用PageCache缓存数据 |
MediaExtractor继承体系:
| 类名 | 说明 |
| MPEG4Extractor |
MediaSource继承体系:
| 类名 | 说明 |
| SurfaceMediaSource | 继承MediaSource,持有一个BufferQueue,外部作图 |
| AudioSource | 继承MediaSource,持有一个AudioRecord,通过回调接收底层数据 |
| OMXCodec | 见上 |
| MPEG4Source |
libstagefright_httplive
| 类名 | 说明 |
| LiveSession | 继承AHandler,在消息循环线程处理任务,采用Notify消息回调使用者,一般独立线程工作 |
| M3UParser | |
| PlaylistFetcher | 使用LiveSession的Looper |
| LiveDataSource |
libstagefright_nuplayer
| 类名 | 说明 |
| NuPlayerDriver | 继承实现MediaPlayerInterface,内部包含一个ALooper,驱动一个NuPlayer实例 |
| NuPlayer | 继承实现AHandler,大部分操作在消息循环线程处理 |
| NuPlayer::Action | 封装NuPlayer操作的抽象基类,定义execute接口 |
| NuPlayer::SeekAction | 继承NuPlayer::Action,调用NuPlayer::performSeek |
| NuPlayer:: SetSurfaceAction | 继承NuPlayer::Action,调用NuPlayer::performSetSurface |
| NuPlayer::ShutdownDecoderAction | 继承NuPlayer::Action, 调用NuPlayer::performDecoderShutdown |
| NuPlayer:: PostMessageAction | 继承NuPlayer::Action,调用AMessage::post |
| NuPlayer:: SimpleAction | 继承NuPlayer::Action,调用NuPlayer的无参数方法 |
| NuPlayer::Source | 封装NuPlayer的媒体源,可以获取媒体消息。继承AHandler,在消息循环线程处理任务,采用Notify消息回调使用者,从dequeueAccessUnit接口获取媒体数据,非阻塞。 |
| NuPlayer:: | 继承实现NuPlayer::Source,使用DataSource加MediaExtractor实现。通过AnotherPacketSource缓存数据。 |
| NuPlayer:: HTTPLiveSource | 继承实现NuPlayer::Source,使用LiveSession(使用独立的ALooper)实现。 |
| NuPlayer::RTSPSource | 继承实现NuPlayer::Source |
| NuPlayer:: StreamingSource | 继承实现NuPlayer::Source,封装IStreamSource,使用NuPlayerStreamListener监听数据 |
| NuPlayer::NuPlayerStreamListener | 继承实现IStreamListener,拷贝数据给StreamingSource的使用者 |
| NuPlayer::Decoder | 继承AHandler,主要处理解码配置数据,封装ACodec实现(分配独立的ALooper线程) |
| NuPlayer::Renderer | 继承AHandler,基于消息驱动执行音视频渲染, 通过AudioSink渲染声音, 通过SoftwareRenderer渲染图像 |
| SoftwareRenderer |
libstagefright_wfd
| 类名 | 说明 |
| WifiDisplaySource | RTSP服务端,响应请求建立播放会话,继承AHandler处理消息 响应SETUP请求创建PlaybackSession |
| WifiDisplaySource:: PlaybackSession | 内部包含MediaSender,SurfaceMediaSource,AudioSource,Converter,MediaPuller,Track。 创建pull_looper codec_looper |
| RepeaterSource | 继承MediaSource,包装一个MediaSource,内部MediaSource没有立即数据时,重复上一帧,创建repeater_looper线程读取数据 |
| MediaPuller | 从MediaSource读取数据(阻塞,需要独立的ALooper),发给Converter处理(Notify消息),继承AHandler,消息驱动,暂停状态也不停读数据并丢弃 |
| Converter | 使用编码MediaCodec,继承AHandler处理消息 |
| WifiDisplaySource:: PlaybackSession:: Track | 捆绑MediaPuller、Converter |
| MediaSender | 内部包含TSPacketizer 和RTPSender(TS方式),或者两个RTPSender(AAC+AVC方式)。 数据接口是queueAccessUnit(),继承AHandler处理消息 |
| TSPacketizer | 主要接口:packetize() |
| RTPSender | 发送RTP/RTCP报文,支持UDP TCP方式,queueBuffer(),继承AHandler处理消息 |
libmediaplayerservice
源代码位于:frameworks/av/media/libmediaplayerservice。
类说明:
| 类名 | 说明 |
| Crypto | 继承实现ICrypto |
| Drm | 继承实现IDrm |
| HDCP | 继承实现IHDCP |
| MediaPlayerFactory | 管理多种播放器实现:StagefrightPlayer、NuPlayerDriver、MidiFile,选择最优实现 |
| MediaPlayerService | 管理播放、录制会话,管理IOMX、ICrypto |
| MediaPlayerService:: AudioOutput | 继承实现MediaPlayerBase.AudioSink,使用AudioTrack实现 |
| MediaPlayerService:: AudioCache | 继承实现MediaPlayerBase.AudioSink,在线程CallbackThread中使用AudioCallback回调获取音频数据,数据存在IMemoryHeap中。 |
| MediaPlayerService:: Client | 继承实现IMediaPlayer,内部管理一个MediaPlayerBase实例,AudioOutput和ANativeWindow;调用IMediaPlayerClient回调 |
| MediaRecorderClient | 继承实现IMediaRecorder,内部管理一个MediaRecorderBase |
| MetadataRetrieverClient | 继承实现IMetadataRetriever, 内部管理一个MediaMetadataRetrieverBase |
| MidiFile | 继承实现MediaPlayerInterface,AudioSink由外部设置 |
| MidiMetadataRetriever | 继承实现MediaMetadataRetrieverBase,通过MidiFile实现 |
| SharedLibrary | 封装dlopen、dlsym、dlclose、dlerror |
| StagefrightPlayer | 继承实现MediaPlayerInterface,通过AwesomePlayer实现 |
| StagefrightRecorder | 继承实现MediaRecorderBase,内部持有ICamera、AudioSource、MediaWriter,编码器由OMXCodec创建 |
| RemoteDisplay | 继承实现IRemoteDisplay,内部包含WifiDisplaySource,并为其提供wfd_looper线程 |
libmedialogservice
源代码位于:frameworks/av/services/medialog。
mediaserver
源代码位于:frameworks/av/media/mediaserver。
运行AudioFlinger、MediaPlayerService、CameraService、AudioPolicyService服务。
如果"ro.test_harness"大于0,那么运行MediaLogService,启动子进程运行上面的服务。
1583

被折叠的 条评论
为什么被折叠?



