如何在HTTP流协议中传输实时数据



据我所知,流是传输实时数据的行为。而UDP通常用于实时数据的传输,即RTP (real-time transfer protocol)。而HTTP流使用TCP,那么它如何确保实时性呢?

对于在客户端使用输入缓冲区的流,想象一个flash视频播放器(像youtube的一个)..一部分内容首先在客户端进行缓冲,然后开始播放;如果缓冲区的信息用完,你必须停下来重新填充缓冲区并继续播放。

你可以在低带宽的消费应用中实时使用TCP,比如聊天;但是当你需要很多带宽时,它不是最适合的协议,你应该使用UDP,因为它不是面向连接的(例如VoD或有线电视)。

在手册中你得到了所有的请求和响应,例如播放

下面的例子显示了一个播放请求。

GET /welcome HTTP/1.1
Accept: */*
User-Agent: NSPlayer/12.0.7724.0
Host: SampleServer
X-Accept-Authentication: Negotiate, NTLM, Digest, Basic
Pragma: version11-enabled=1
Pragma: no-cache,rate=1.000,stream-time=0,stream-offset=4294967295:4294967295,packet-num=4294967295,max-duration=0
Pragma: xPlayStrm=1
Pragma: client-id=2338761264
Pragma: LinkBW=2147483647, AccelBW=2147483647, AccelDuration=18000, Speed=91268.055
Supported: com.microsoft.wm.srvppair, com.microsoft.wm.sswitch, com.microsoft.wm.startupprofile
Pragma: playlist-seek-id=64
Pragma: xClientGUID={BFE16E37-55EC-4AE4-A5A9-0B0D307F4B72}
Pragma: stream-switch-count=2
Pragma: stream-switch-entry=ffff:1:0 ffff:2:0 
Accept-Language: en-us, *;q=0.1

下面的例子显示了一个Play响应。

HTTP/1.1 200 OK
Content-Type: application/x-mms-framed
Server: Servername1/9.5.6001.18281
Date: Mon, 08 Mar 2010 18:39:44 GMT
Pragma: no-cache, client-id=2338761264, features="", timeout=60000, AccelBW=3500000, AccelDuration=18000, Speed=5.000
Cache-Control: no-cache, x-wms-content-size=51077, max-age=86399, user-public, must-revalidate, proxy-public, proxy-revalidate
Last-Modified: Tue, 22 Jan 2008 22:54:31 GMT
Etag: "51077"
Transfer-Encoding: chunked
X-StartupProfile: Rate=10,12,15,20,30;MaxBytes=459,459,459,459,459;Time=0,0,0,0,0;StartTime=3290;LastTime=15120;MaxDiffTime=0;MaxDiffSndTime=0;ByteRate=2538,2538,2538,2538,2538;
Supported: com.microsoft.wm.srvppair, com.microsoft.wm.sswitch, com.microsoft.wm.predstrm, com.microsoft.wm.fastcache, com.microsoft.wm.startupprofile

[http://msdn.microsoft.com/en-us/library/cc251235%28v=PROT.10%29.aspx] [1]

[1]: http://msdn.microsoft.com/en-us/library/cc251235%28v=PROT.10%29.aspxenter这里的代码enter code here

最新更新