您的位置:首页 > 其它

ffmpeg + SDL 系列5 Media 播放器系统设计

2013-09-30 22:34 225 查看
接下来探讨Media播放器的架构设计

1 从数据流的角度来看

  

  File -> UFS API ->                    |                
 |

  Network -> UDP Packet ->    |    Media Demux     |   ->   Decoder   ->  Audio/Video Render Devic

  Network -> HTTP ->               |                
|        

  Network -> RTP ->                |                
|

可见, 我们要考虑构建3个系统

系统1:  Demux  

功能定位: 从source端读取数据,并缓存,进行协议解析(Demux),

生成Decoder系统需要的Payload Packet队列

系统2:  Decoer

对数据进行逆向解码,生成Render端格式需要的数据。

系统3:  硬件系统

各种视频,音频输出设备,最常见的声卡,显卡。

系统1 ~3在嵌入式系统通常是芯片公司负责硬件开发,并提供API,

开发者做的事情是设置参数和考虑各种回调函数,异步事件处理,共享内存的分配。

接下来主要考虑系统1和2由软件处理的情况下,如何设计系统。

2 Task设计

考虑到交互性

设计如下Task:

Task 1: UI 主Task,负责与用户交互,并将用户请求转发到MediaCtl 

Task 2:  MediaCtrl, 负责控制Demux线程和Decoder线程,并处理底层SDL来的硬件Event

Task 3: Demux 线程,负责按协议解析输入数据

Task 4: 解码线程,负责解码数据。

Task 5: 系统监听线程,负责接收SDL来的各种事件,并转发到上面线程。

3 接口设计

按照数据流,依次设计如下接口

ByteReader -》 FileReader/ HttpReader / UDPReader/ RtpReader

CachedBuffer

MediaDemux -> AsfDemux / WavDemux / Mp3Demux

RingBuffer

PacketQueue

StreamInfo

MediaDecoder -> AudioDecoder / VideoDecoer

AudioSample

AudioRender  -> AudioRenderOSS / AudioRenderSDL / AudioRenderALSA

VideoFrame

VideoRender  -> VideoRenderSDL / VideoRenderDirectFB

MediaCtrl -> AsfCtrl / Mp3Ctrl /Mp4Ctrl
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐