VLC 客户端如何在应用层 (HTTP) 中向服务器请求更多数据?
How does a VLC client ask the server for more data in application layer (HTTP)?
我正在从事与视频流相关的项目。我一直在广泛阅读 access_output 和访问模块中的 http 代码。我的问题是关于客户端如何要求服务器在应用层发送更多数据,具体使用http。我假设它位于 src/network 文件夹中的 httpd 文件中,但我一直在写入日志文件,但我似乎无法弄清楚客户端如何请求数据。看起来服务器只是在没有确认的情况下将其发送给客户端,但我非常怀疑情况是否如此。
非常感谢您的帮助!
请求更多数据是使用 HTTP GET
和 Range
header.
实现的
示例:
Range: bytes=123-
Range: bytes=123-456
在VLC中可以找到相关代码modules/access/http.c:
static int Request( access_t *p_access, uint64_t i_tell )
{
[...]
/* Offset */
if( p_sys->i_version == 1 && ! p_sys->b_continuous )
{
p_sys->b_persist = true;
net_Printf( p_access, p_sys->fd, pvs,
"Range: bytes=%"PRIu64"-\r\n", i_tell );
net_Printf( p_access, p_sys->fd, pvs, "Connection: close\r\n" );
}
另请参阅:RFC 中的 HTTP Range Requests。
我正在从事与视频流相关的项目。我一直在广泛阅读 access_output 和访问模块中的 http 代码。我的问题是关于客户端如何要求服务器在应用层发送更多数据,具体使用http。我假设它位于 src/network 文件夹中的 httpd 文件中,但我一直在写入日志文件,但我似乎无法弄清楚客户端如何请求数据。看起来服务器只是在没有确认的情况下将其发送给客户端,但我非常怀疑情况是否如此。
非常感谢您的帮助!
请求更多数据是使用 HTTP GET
和 Range
header.
示例:
Range: bytes=123-
Range: bytes=123-456
在VLC中可以找到相关代码modules/access/http.c:
static int Request( access_t *p_access, uint64_t i_tell )
{
[...]
/* Offset */
if( p_sys->i_version == 1 && ! p_sys->b_continuous )
{
p_sys->b_persist = true;
net_Printf( p_access, p_sys->fd, pvs,
"Range: bytes=%"PRIu64"-\r\n", i_tell );
net_Printf( p_access, p_sys->fd, pvs, "Connection: close\r\n" );
}
另请参阅:RFC 中的 HTTP Range Requests。