多媒體開發(fā)之視頻播放概述
video track +---------------+ frame +--------------+
+--------------->| Video Decoder |------------->| Video Output |
| +---------------+ +--------------+
+----------+ +-----+-----+
|DataSource|---->| Demuxer |
+----------+ +-----+-----+
| +------------------+ +--------------+
+--------------->| Audio Decoder |------------->| Audio Output |
audio track +---------------+ PCM +--------------+
1、根據(jù)上面的數(shù)據(jù)流程圖,我們大致可以將音視頻播放分為4大模塊:DataSource、Demuxer(Parser)、Decoder、Output;
主要流程:
播放器從DataSource獲取媒體數(shù)據(jù),通過Demuxer分離音視頻軌道,分別送到相應(yīng)的音視頻解碼器,最后將解碼后的數(shù)據(jù)輸出到音視頻設(shè)備。
各部分說明:
DataSource:數(shù)據(jù)源包括本地SDcard中的音視頻文件,也包括網(wǎng)絡(luò)數(shù)據(jù)源,比如:http、http live、RTSP/RTP...,DataSource的作用是將把數(shù)據(jù)源抽象出來,為下一個demux模塊提供它需要的穩(wěn)定的數(shù)據(jù)流。 DataSource為Demuxer提供原始數(shù)據(jù)。
Demuxer:Parser模塊,主要是對各種媒體文件的解析,視頻文件一般情況下都是按照一定的音視頻容器把音視頻的流交織在一起?,F(xiàn)在有很多不同的容器格式。如ts、mp4、flv、mkv、avi、rmvb等等。demux的功能就是把音視頻的數(shù)據(jù)幀從容器中剝離出來,然后分別送到不同的解碼器中。其實音頻和視頻本身就是2個獨立的子系統(tǒng)。容器把它們包在了一起。但是他們都是獨立解碼的,所以解碼之前,需要把它分別分離出來。demux就是干這活的,他為下一步decoder解碼提供了數(shù)據(jù)流。
Decoder:解碼器--播放器的核心模塊。分為音頻和視頻解碼器。影像在錄制后, 原始的音視頻都是占用大量空間, 而且是冗余度較高的數(shù)據(jù). 因此, 通常會在制作的時候就會進(jìn)行某種壓縮 ( 壓縮技術(shù)就是將數(shù)據(jù)中的冗余信息去除數(shù)據(jù)之間的相關(guān)性 ). 這就是我們熟知的音視頻編碼格式, 包括MPEG1(VCD)、MPEG2(DVD)、MPEG4、H.264 等等. 音視頻解碼器的作用就是把這些壓縮了的數(shù)據(jù)還原成原始的音視頻數(shù)據(jù). 當(dāng)然, 編碼解碼過程基本上都是有損的 .解碼器的作用就是把編碼后的數(shù)據(jù)還原成原始數(shù)據(jù)。視頻對于的視頻frame,比如(YUV420/RGB),音頻的原始數(shù)據(jù)即:PCM;解碼出來的數(shù)據(jù)會依次的分發(fā)到相應(yīng)的輸出設(shè)備。
Output:音視頻的輸出設(shè)備;
音頻輸出設(shè)備:揚聲器speaker,聽筒earpiece,耳機headset,藍(lán)牙耳機,hdmi等
視頻輸出設(shè)備:顯示屏