我在云服务器上运行 Apache(VMware 上的 Windows Server 2008 R2,带宽为 1 Gbps http://95.110.164.61
)。我正在流式传输许多实时 DVB MPEG 传输流,这些流在循环中预压缩(不是 flash),由 VLC 在端口 640xx 上生成,然后由 Apache 在端口 80 上进行反向代理。
服务器的防火墙在所有端口上对 VLC 和 Apache 开放。
超过 1.5 Mbps 时,播放会受到连续停止和继续的影响。请注意,如果您直接请求由 VLC 生成的流,http://95.110.164.61:64087/mpg2_6.4
您会看到正确的流,而如果您请求,则http://95.110.164.61/mpg2_6.4
看不到。
我知道 Flash 流媒体服务器使用 Apache 在端口 80 上进行流媒体传输(并且它可以工作)。我不是 Apache 专家,有人能告诉我是否需要任何“特殊”模块来增加带宽吗?
答案1
Apache 默认没有任何速率限制或带宽限制。事实上,只有外部模块提供此功能,因此您必须付出特别的努力才能启用它。
默认情况下,Apache 将使用尽可能多的带宽。
答案2
Igino Manfre 仍在写作(请不要忘记,我是 Apache 新手)。
也许不应该将其描述为带宽限制,但最终结果是一样的:如果 Apache 配置不正确,它就无法通过网络推送足够的信息。
Windows 下的此活动由 Apache 多线程模块(Windows 下唯一可用的模块,正式名称为多处理模块,但通常称为“Workers”)完成,无论如何都需要配置。当 Apache 在 Windows 下运行时,您只会发现两个进程“httpd”,一个是另一个的子进程。子进程通过连接激活所有必需的线程。在 Apache 文档中,我发现需要一个特定于任何操作系统的部分,可以从 extra\httpd-mpm.conf 复制并粘贴到 httpd.conf 中。Windows 默认部分在标签“IfModule mpm_winnt_module”内仅包含两行来管理多线程。
ThreadsPerChild:服务器进程中的工作线程数常量(设置为 150)
MaxRequestsPerChild:服务器进程服务的最大请求数(设置为 0,自动)
但在这种情况下,这不是软件效率的问题(线程也是如此),而可能是网络缓冲的问题。我在 Apache 的大量文档中发现了 SendBufferSize 参数的存在(将添加到 httpd.conf)。它增加了 TCP 发送缓冲区大小,可用于补偿 RTT 超过 100ms 的高延迟连接(如普通 ADSL 家庭连接)。默认情况下或当为 0 时,服务器将使用 OS 默认值。
发送缓冲区大小 1000000
我决定将其设为 1000000(1 MB),这听起来可能是一个很大的数字,但我已经看到过这些高值的用法。
效果很好!使用 VLC 播放器打开流媒体,现在 Apache 的流媒体速度为 6.4 Mbps,与 VLC 相同。这意味着瓶颈已被消除。通过科学方法,我测试了评论此参数,流媒体再次出现走走停停的情况。
无论如何,为了正确查看流,您需要具有比播放该流所需的带宽足够大的连接带宽(至少 30%),因此要看到 6.4 Mbps,您至少需要 8 Mbps。
我希望这些话能够对别人有所帮助。
另一个警告:如果要在网页中引入视频并希望使用 VLC 插件,还需要配置 VLC 插件网络缓存参数,否则播放仍会受到断断续续的影响。似乎修复 network-cache=1000 (msec)(VLC 播放器默认设置)就足够了。文档——像往常一样——永远不够。
再见,伊吉诺