【问题标题】:How do I transfer real-time data in HTTP Streaming Protocol.如何在 HTTP 流协议中传输实时数据。
【发布时间】:2011-08-09 10:51:31
【问题描述】:

据我所知,流媒体是传输实时数据的动作。而UDP通常用于实时数据的传输,如RTP(Real-time transfer protocol)。 HTTP Streaming 使用 TCP,如何保证实时性?

【问题讨论】:

  • 定义real-time 的含义,描述您要传输的数据以及时间敏感的方式。

标签: http tcp streaming real-time http-streaming


【解决方案1】:

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

您可以将 TCP 用于实时低带宽消耗的应用程序,例如聊天;但是当您需要大量带宽时,它不是最适合的协议,您应该使用 UDP,因为它不是面向连接的(例如 VoD 或有线电视)。

希望这会有所帮助。

【讨论】:

  • 我不同意。您对带宽的区分是不准确的。仅仅因为您要传输大量数据,并不意味着您选择 UDP。这实际上取决于应用程序及其对延迟、抖动、无序接收和数据包丢失的要求和/或后果。
  • @MattH:那么,你能告诉我一些方法来确保 HTTP 流协议的实时性吗?因为我必须在 Windows Media Http Streaming 协议中构建一个流媒体视频服务器,我必须解决这个解决方案。
  • 我同意你的观点,一切都取决于你需要的 QoS。聊天是一个实时应用程序,但不会影响抖动,延迟很小。这个问题应该定义他对实时的含义以及什么样的流媒体。我想说的是,如果您的应用程序不必保证 QoS,您可以使用 TCP。
  • @Feida Kila : 正如我所说,我想在 Windows Media Http 流协议中流式传输视频。
  • 您无法通过具有 QoS 的 tcp 实时流式传输视频。你需要使用大缓冲区......所以它真的不是实时的。
【解决方案2】:

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

以下示例显示了一个播放请求。

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

【讨论】:

  • 是的。但是在播放请求中,在响应客户端之后,我必须将视频文件的序列数据传输给客户端。而且我不知道如何传输以确保实时。
  • 创建 HTTP 流媒体视频 1. 创建一个普通流媒体格式的视频文件 2. 将文件上传到您的 Web 服务器 3. 为视频文件创建一个简单的超链接,或使用特殊的 HTML 标签将视频嵌入网页。这基本上就是它的全部内容。当用户单击超链接时,他们的媒体播放器会打开并开始流式传输视频文件。如果文件是嵌入的,它会在页面上播放。现在让我们看看如何创建必要的视频文件...
  • 据我所知 TCP 是可靠的传输协议。所以。它通常不用于实时应用程序。而且我想知道http流协议用来确保实时性的方式。
  • 我之前解释过的缓冲区
猜你喜欢
  • 2023-01-14
  • 2014-07-23
  • 1970-01-01
  • 2014-10-10
  • 1970-01-01
  • 1970-01-01
  • 2012-12-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多