@startuml left to right direction package libmediaplayerservice{ class Client{ <font color="#cc00cc" size=20> 1 </font>void MediaPlayerService::Client::disconnect()<font color="brown" size=20> 1 </font> <font color="#cc00cc" size=20> 2 </font>status_t MediaPlayerService::Client::reset()<font color="brown" size=20> 1 </font> } class NuPlayerDriver{ <font color="brown" size=20> 1 </font>status_t NuPlayerDriver::reset()<font color="blue" size=20> 1 </font> } class NuPlayer{ <font color="blue" size=20> 1 </font>void NuPlayer::resetAsync()<font color="blue" size=20> 2,4 </font> <font color="blue" size=20> 2 </font>void NuPlayer::performDecoderFlush(FlushCommand audio, FlushCommand video)<font color="blue" size=20> 3 </font> <font color="blue" size=20> 3 </font>void NuPlayer::flushDecoder(bool audio, bool needShutdown=FLUSH_CMD_SHUTDOWN)<font color="green" size=20> 1 </font> <font color="blue" size=20> 4 </font>void NuPlayer::performReset() <font color="blue" size=20> 5 </font>void NuPlayer::handleFlushComplete(bool audio, bool isDecoder)<font color="green" size=20> 2 </font> } class AudioSink{ <font color="green"> responsible for audio output, if use DecoderPassThrough as audio decoder <font color="green"> this will use audiotrack passthrough mode, otherwise , this will used to output pcm } class Source{ <font color="cyan"> NuPlayerSource.h } class HTTPLiveSource{ <font color="cyan"> gui/Surface.h <font color="green"> hls use this , eg.NuPlayer: setDataSourceAsync HTTPLiveSource http://127.0.0.1:4455/src7/vod_0.m3u8 } class Surface{ <font color="cyan"> gui/Surface.h } class DecoderPassThrough{ <font color="cyan"> NuPlayerDecoderPassThrough.h } class Decoder{ <font color="cyan"> NuPlayerDecoder.h <font color="green" size=20> 1 </font>void NuPlayer::Decoder::onFlush()<font color="blue" size=20> 5 </font> <font color="green" size=20> 2 </font>void NuPlayer::Decoder::onShutdown(bool notifyComplete)<font color="red" size=20> 1 </font> } class CCDecoder{ <font color="cyan"> NuPlayerCCDecoder.h <font color="green">responsible for codec info parse } class Renderer{ <font color="cyan"> NuPlayerRenderer.h <font color="green"> responsible for A/V sync } } package libaudioclient{ class AudioTrack{ } } package libstagefright{ class MediaCodec{ <font color="green">responsible for hardware codec <font color="red" size=20> 1 </font>status_t MediaCodec::release()<font color="purple" size=20> 1 </font> } } package mediaserver{ class mediaserverMediaCodec{ <font color="purple" size=20> 1 </font>status_t MediaCodec::OnShutdown(const Message& msg)<font color="purple" size=20> 2 </font> <font color="purple" size=20> 2 </font>status_t MediaCodec::Stop(bool keepComponentAllocated, bool byDisposing)<font color="cyan" size=20> 1 </font> } class ResourceCenter{ <font color="cyan" size=20> 1 </font>void ResourceCenter::DeallocateAll() } } NuPlayerDriver --> NuPlayer AudioSink --> AudioTrack NuPlayer --> NuPlayerDriver NuPlayer --> AudioSink Client --> NuPlayerDriver NuPlayer --> Source NuPlayer --> Surface NuPlayer --> "video/audio" Decoder NuPlayer --> "audio" DecoderPassThrough Decoder --> CCDecoder Decoder --> MediaCodec Decoder --> "notify" NuPlayer NuPlayer --> Renderer MediaCodec --> mediaserverMediaCodec mediaserverMediaCodec --> ResourceCenter Source <|.. HTTPLiveSource @enduml
[Android] Client->NuPlayer
ykun0892024-02-08 9:42
相关推荐
quantdash_cc12 分钟前
基于 QuantDash 5 分钟 K 线的网格交易策略参数网格搜索寻优实战杉氧1 小时前
原生交互:如何在 Flutter 中嵌入 Android/iOS 原生组件并解决手势冲突Android打工仔2 小时前
Continuation 的链式关系 —— 一个 suspend 函数如何把结果交还给调用者?hunterandroid2 小时前
[Android 从零到一] Kotlin Channel 与复杂并发场景:从生产者-消费者到结构化并发治理FlightYe2 小时前
linux系统编程(八):阻塞与非阻塞IO对比恋猫de小郭3 小时前
Flutter iOS Deep Link 为什么会突然失效:一系列难以言喻的问题Kapaseker3 小时前
小白都看得懂的 Skill 教程 - 初识 Skill神奇小梵4 小时前
安全和开发的需要了解的知识————下载内容的安全,和下载内容如何运行2501_915909064 小时前
iOS 证书创建与管理 类型限制 p12 密码与云备份实操黄毛火烧雪下4 小时前
Service 推送 / Stub·Proxy 对调