IIS Smooth Streaming Transport Protocol [2009] http://www./community/files/media/smoothspecs/[MS-SMTH].pdf 另外還找到一篇[MS-SSTR] Smooth Streaming Protocol Specification, 感覺跟上面鏈接的內(nèi)容幾乎一樣,但是時(shí)間是2011年12月,所以看的是這個(gè)新的。 MSDN:http://msdn.microsoft.com/en-us/library/ee673436(v=VS.90).aspx 這篇博客仍舊是讀文檔筆記,但不像上一篇是逐漸變薄的記錄,這篇摘抄了一些重點(diǎn),補(bǔ)充了一點(diǎn)自己原創(chuàng)的材料。
SS protocols provides a means of delivering media from servers to clients in a way that can be cached by standard HTTP cache proxies in the communication chain. Allowing standard HTTP cache proxies to respond to requests on behalf of the server in creases the number of clients that can be served by a single server. cache的機(jī)制在下面的實(shí)驗(yàn)中表現(xiàn)出來了。 SS Transport protocol 的消息交互序列:
把HTTP cache proxies 的角色放進(jìn)去:
不同的client,同樣請(qǐng)求同一塊fragment,第二次直接從cache返回。 自己搭建了一個(gè)SS web server,抓包看了一下消息的內(nèi)容,以BigBuckBunny舉例吧。抓包軟件最開始用的wireshark,可是不知道為什么總是收不到本來期望 能收到的包,后來改用Windows network monitor,很容易上手很好用,還會(huì)列出哪些消息是在哪些進(jìn)程里面。 1. Manifest request 在瀏覽器中輸入http://[server_name]/[virtual_addr]/bigbuckbunny.ism/manifest,client向server發(fā)送HTTP請(qǐng)求。
協(xié)議中要求的(manifest/fragment request):HTTP方法必須是GET,HTTP協(xié)議版本必須是HTTP/1.1 2. Manifest response Server 將bigbuckbunny.ismc 發(fā)回給client,可以在瀏覽器中顯示出來。(用了另外的URL展示)
協(xié)議中要求的(manifest/fragment response):HTTP 狀態(tài)碼必須是200,HTTP協(xié)議版本必須是HTTP/1.1。payload中就是ismc文件的內(nèi)容了。 這時(shí)如果再次請(qǐng)求(在瀏覽器中刷新頁面),得到的響應(yīng)卻是304:
304 not modified,數(shù)據(jù)內(nèi)容跟上一次比沒有變化。這個(gè)應(yīng)該跟cache-control的值有關(guān),沒研究過不深究了。這篇先不研究manifest文件的具體element和attribute,只看消息交互。 3. Fragment request 在瀏覽器中輸入:http://[server_name]/[virtual_add]/SmoothStreamingPlayer.html
server的響應(yīng):
client收到的第一個(gè)響應(yīng),會(huì)是manifest,然后才能根據(jù)manifest里面的信息來構(gòu)建fragment request。
URL里面包含了具體的QualityLevels 和Fragments 值。client向server請(qǐng)求bit rate是2962000,fragments偏移是400000000的video chunk。
4. Fragment response 由于之前已經(jīng)執(zhí)行過,播放過了,所以得到的響應(yīng)時(shí)304。Server說還是老數(shù)據(jù),自己從cache里面拿吧。 5. Continue 下一個(gè)Fragment request 請(qǐng)求的offset是420000000。
終于等到一個(gè)不是304的響應(yīng)。
返回的狀態(tài)碼是200,類型是video/mp4。HTTPPayloadLine是空的,內(nèi)容包含在下一個(gè)響應(yīng)中:
一般在200 ok響應(yīng)之后,要接著發(fā)好幾個(gè)帶有HTTPPayloadLine的包,見下圖,一對(duì)一的都是304響應(yīng)。
用Microsoft Network Monitor 抓包,協(xié)議列,請(qǐng)求都是PCCRTP,在wireshark中直接是HTTP。PCCRTP:Peer Content Caching and Retrieval: HTTP extension. 有時(shí)候client會(huì)收到 412 響應(yīng),代表fragment not yet available。 |
|