视频播放的数据基本流程

                                     video track     +---------------+          frame   +--------------+
                                     +--------------->| Video Decoder |------------->| Video Output |
                                      |                     +---------------+                      +--------------+
+----------+           +-----+-----+
|DataSource|---->|  Demuxer  |
+----------+           +-----+-----+      
                                      |                      +------------------+                 +--------------+
                                     +--------------->| Audio Decoder |------------->| Audio Output |
                                        audio track    +---------------+      PCM       +--------------+


1、根据上面的数据流程图,我们大致可以将音视频播放分为4大模块:DataSource、Demuxer(Parser)、Decoder、Output;
   主要流程:
         播放器从DataSource获取媒体数据,通过Demuxer分离音视频轨道,分别送到相应的音视频×××,最后将解码后的数据输出到音视频设备。
   各部分说明:
   DataSource:数据源包括本地SDcard中的音视频文件,也包括网络数据源,比如:http、http live、RTSP/RTP...,DataSource的作用是将把数据源抽象出来,为下一个demux模块提供它需要的稳定的数据流。DataSource为Demuxer提供原始数据。
   Demuxer:Parser模块,主要是对各种媒体文件的解析,视频文件一般情况下都是按照一定的音视频容器把音视频的流交织在一起。现在有很多不同的容器格式。如ts、mp4、flv、mkv、avi、rmvb等等。demux的功能就是把音视频的数据帧从容器中剥离出来,然后分别送到不同的×××中。其实音频和视频本身就是2个独立的子系统。容器把它们包在了一起。但是他们都是独立解码的,所以解码之前,需要把它分别分离出来。demux就是干这活的,他为下一步decoder解码提供了数据流。
   Decoder:×××--播放器的核心模块。分为音频和视频×××。影像在录制后, 原始的音视频都是占用大量空间, 而且是冗余度较高的数据. 因此, 通常会在制作的时候就会进行某种压缩 ( 压缩技术就是将数据中的冗余信息去除数据之间的相关性 ). 这就是我们熟知的音视频编码格式, 包括MPEG1(VCD)、MPEG2(DVD)、MPEG4、H.264 等等. 音视频×××的作用就是把这些压缩了的数据还原成原始的音视频数据. 当然, 编码解码过程基本上都是有损的 .×××的作用就是把编码后的数据还原成原始数据。视频对于的视频frame,比如(YUV420/RGB),音频的原始数据即:PCM;解码出来的数据会依次的分发到相应的输出设备。
   Output:音视频的输出设备;
           音频输出设备:扬声器speaker,听筒earpiece,耳机headset,蓝牙耳机,hdmi等
           视频输出设备:显示屏