簡介
可以傳輸音、視頻的通用服務(wù)器有兩種,都有各自的優(yōu)缺點(diǎn)。分別是:標(biāo)準(zhǔn)WEB服務(wù)器和流媒體服務(wù)器。標(biāo)準(zhǔn)WEB服務(wù)器使用HTTP協(xié)議。流媒體服務(wù)器使用兩種協(xié)議提供媒體服務(wù)。這兩種協(xié)議分別是HTTP1.0或1.1以及MMS(Multi Media Server)協(xié)議。流媒體服務(wù)器使用的HTTP協(xié)議是經(jīng)過修改的版本,擴(kuò)展了語法命令以支持實(shí)時傳輸。這是普通HTTP所不支持的。
使用兩種協(xié)議提供媒體服務(wù)和WEB服務(wù)器有著顯著區(qū)別。一個區(qū)別是在WEB服務(wù)器上使用標(biāo)準(zhǔn)HTTP協(xié)議的數(shù)據(jù)不需要一個特殊的服務(wù)器和軟件進(jìn)行瀏覽甚至下載。另外一個區(qū)別是使用MMS(例如Microsoft Windows Media Services)的流媒體服務(wù)器通過流形式提供媒體給使用者。流媒體服務(wù)器可以處理大量數(shù)據(jù)。
MMS是什么
MMS是微軟的私有流媒體協(xié)議。它的最初目的是通過網(wǎng)絡(luò)傳輸多媒體廣播、視頻、音軌、現(xiàn)場直播和一系列的實(shí)時或?qū)崨r材料。使用這個協(xié)議的觀眾可以通過電腦觀看電視圖像或音軌。微軟為有網(wǎng)絡(luò)連接的家用電腦使用者開發(fā)了免費(fèi)軟件。MMS建立在UDP或TCP傳輸/網(wǎng)絡(luò)層上,是屬于應(yīng)用層的。
使用TCP的MMS上URL是MMS://或者MMST://,如果是UDP的MMS使用MMSU://。在低帶寬的情況下推薦使用UDP連接。HTTP帶有大量的頭信息,UDP一般不能通過防火墻,在有防火墻的情況下使用HTTP。TCP的無差錯特性是非常誘人的,它的吞吐量比UDP小,但是在下載MMS的時候TCP是不二的選擇。
哈!看起來開始有趣了!
到目前為止還沒有關(guān)于MMS協(xié)議的任何有效的細(xì)節(jié)。網(wǎng)絡(luò)搜索和庫閱讀也是徒勞無功的。微軟不打算就MMS的內(nèi)容發(fā)表任何看法。這真是水到山前疑無路,從使用HTTP協(xié)議的流媒體服務(wù)器上下載流信息已經(jīng)成為了可能,使用MMS協(xié)議的服務(wù)器還只能‘在線觀看‘,事實(shí)上,也只是目前為止!
讓我們從這里開始--包和流
MMS協(xié)議是以包和數(shù)據(jù)塊的形式從服務(wù)器向使用者發(fā)送數(shù)據(jù)到你的計(jì)算機(jī)上。服務(wù)器上的媒體文件是以ASF或WMA形式存在。直播通過流媒體服務(wù)器組裝成數(shù)據(jù)包。如果是TV/視頻的話,一個包可能會由多個流組成,但是語音廣播就只有一個流??梢哉J(rèn)為多個流是被混合到了一個實(shí)際的包中。包中發(fā)送的流取決于媒體類型。下面會涉及到更多關(guān)于流的內(nèi)容。
MMS協(xié)議包有兩種:命令包和數(shù)據(jù)包。
首先,讓我們來處理命令包
MMS協(xié)議使用一段命令來完成多種人物,比如:連接到流服務(wù)器、請求文件、丟包重傳請求及類似事宜。這是應(yīng)用層協(xié)議,在這一層上媒體使用者和服務(wù)器進(jìn)行通訊。這些都要傳輸?shù)绞褂谜摺?/p>
MMS命令包頭
下面分析MMS包頭結(jié)構(gòu)。以下是小端格式。左邊=LSB,右邊=MSB。0f 00 00 00 就相當(dāng)于0f。
開始 ---->
4bytes = 01 00 00 [00] |
從client發(fā)出的格式是固定的。[00]域從服務(wù)器發(fā)出的時候是可以發(fā)生變化的?,F(xiàn)在不能理解這個比特的含義--總是0,可能是版本號。
4bytes = CE FA 0B B0 |
命令ID值,或許是版本或者序列號。這總是固定的。如果你按照大端來讀就是“Boob Face”.可能是巧合吧。
4bytes |
命令數(shù)據(jù)包長度,計(jì)算到全部數(shù)據(jù)末尾。單位為比特,從協(xié)議類型域之后開始計(jì)算。
4bytes = 4D 4D 53 20 |
協(xié)議類型,固定值為MMS<空格>的ASCII。
4 bytes |
直到包尾的長度,8比特為單位。包含自身數(shù)據(jù)域。例如,8bytes,value = 1。
4 bytes |
序列號。命令是由客戶端發(fā)向服務(wù)器的,序列號的計(jì)數(shù)從0開始。命令的響應(yīng)擁有同樣的序列號。也就是說序列號就是ECHO。客戶端總是發(fā)起命令。
8 bytes |
雙精度時間戳,用于網(wǎng)絡(luò)時序。
4 bytes |
到包尾的長度,單位為8比特。包括自身。例如,8 bytes ,value = 1。
Comm 2bytes | Dir 2bytes |
標(biāo)志命令方向流的值。命令值含義參考MMS命令列表。對于方向域,0x03 = 向服務(wù)器,0x02 = 向客戶端。
----> 長度為40比特的命令頭到此為止。
命令包長度跟在其后,先是‘prefix 1’然后是‘prefix 2’,接下來直到命令包結(jié)束都是‘command specific data’。命令指定數(shù)據(jù)可以是字符串文本‘Unicode 16bit’,或者是raw 8位數(shù)據(jù)。在prefix 數(shù)據(jù)解說之后可以看到命令特定數(shù)據(jù)段含義。
命令包通常都包括上述內(nèi)容,最小字節(jié)是40。命令包頭是作為命令發(fā)送的最小包。注意:包長域包括到包末尾所有的padding。