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

来源:互联网 发布:淘宝首页客服模块 编辑:程序博客网 时间:2024/06/18 07:25
接下来探讨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


原创粉丝点击