video-streaming - 流媒体服务如何运作?
问题描述
我正在开发屏幕共享应用程序。目前它的工作方式如下:c++ 应用程序从屏幕上抓取屏幕截图,压缩它们并通过 TCP 发送到服务器(写在 node.js 上)。客户端(希望查看共享数据的人)将链接粘贴到浏览器中并连接到服务器。然后服务器向客户端广播数据。问题在于,当我需要大约 1000-1500 个客户端时,服务器可以同时处理大约 10-15 个客户端。
我知道流媒体平台(如 twitch 或 youtube)可以处理多达 1000000 个(甚至更多)的连接。我想知道他们是怎么做的。更具体地说:1)最适合用于共享数据->服务器和服务器->浏览器客户端传输的协议;2) 实现它的任何其他提示和技巧(代码示例、文章等)。
解决方案
如果您想要从客户端到服务器的实时数据(数据 -> 服务器),建议您可以通过 udp/tcp 实现 rtp 或通过 udp/tcp 实现 mpeg2ts。
对于支持向多个客户端(服务器->浏览器)广播数据的服务器,建议您实现 MPEG DASH/HLS 流(Nginx,Appache - HTTP 服务器)。
MPEG DASH/HLS - 支持基于可用带宽的媒体数据流。大多数浏览器通过 javascript 播放器支持 MPEG DASH/HLS 流。
有许多可用的开源解决方案。
推荐阅读
- java - 在 Java (apache poi) 中将文件另存为 CSV
- css - CSS给出错误:“样式规则的预期选择器”
- repast-simphony - Repast:从负刻度开始模拟
- c - FreeRTOS 中 strnlen 的隐式声明
- javascript - Javascript - 如何等待异步函数完成然后执行另一个函数?
- r - 在 R 中,如何构建一个包含一些引用列表中较早元素的元素的列表?
- ruby-on-rails - 如何遍历“application/ld+json”中的记录
- javascript - jsx问题在一行中显示电话号码
- python - Python中样本均值的置信区间(不同于手动)
- php - 将注册失败的错误日志插入到 PHP 中的表中