如何处理与实时流媒体服务器连接的慢速消费者/客户端

tun*_*h24 7 .net architecture algorithm network-programming video-streaming

我正在使用自定义编解码器处理直播服务器(必须使用它,没有办法解决它).多个客户端将与服务器连接以获取实时源.在理想的世界中,所有客户端都将通过宽带连接进行连接,并且在编码之后,我可以以循环方式将所有编码帧转发到每个插槽.但在现实生活中,我可以通过高延迟连接以及慢/移动连接来连接客户端.这将导致很少客户能够快速摄取数据而其他客户将滞后.

显然,像循环法这样的技术在这里不起作用.另一种可行的技术是对每个连接进行编码,但这会在服务器端消耗过多的CPU - 这也是不可接受的.最后,我正在考虑改进的h264 i-frame技术.基本上,无论内容如何,​​只需每1-2秒添加一个I帧.这样,一个缓慢的消费者将能够在每个I帧同步其余部分.反馈?是否有任何标准技术/算法来处理这种情况?

Lou*_*cci 2

  • 您至少需要两种编码:正常(高带宽)和较小(低带宽)。
  • 将.NET 4.5 的await/async 语法与socket.*Async 方法结合使用也会带来一些额外的性能,而不是使用循环同步套接字、使用IO 完成端口和更少的阻塞。(一个这样的例子:/sf/answers/884202721/
  • 最后确定是否为您的客户提供高带宽版本或低带宽版本,而不实施自适应比特率流。
    • 给用户一个选择
    • 进行带宽测试,向客户端发送包含 128KB 数据的 echo 请求,并使用发送时间和返回时间来确定客户端对于高带宽版本是否足够快。