他们在视频流媒体的技术支持中写了些什么?

大家好 在我们的支持下,每天都会打开数十个不同的电话,从简单的问题(“帮助建立集群”)到非常复杂的“流程不起作用,流程有时会停顿”,但是有些问题已经引起人们的注意,公司的每个员工都可以详细回答。

由于问题不会停止,因此您可以在此处回答。

为什么视频被延迟?


我们在博客上有两篇关于该主题的文章( 一篇两篇 ),如果您正在使用视频,请阅读它们,在这里我将给出简短而全面的答案:

现代Internet流是一种HLS协议 。 有时是DASH,但这并不重要,因为它们都是分段的。

如何运作? 流式视频被“切”为小文件(通常为2-8秒,具体取决于内容的动态),3-10个此类片段被累积并通过特殊的播放列表进行描述,当删除旧片段并添加新片段时,该播放列表会自动更新。 好简单 更多段-更长的延迟,每个段更长的持续时间-更长的延迟。 10-20秒是正常的。

为什么需要这个? 为什么要在视频服务器内存中存储这么多视频? 从Wi-Fi网络切换到移动连接时,分段允许播放器不对Internet连接的不稳定做出反应,也不中断视频。 如果未事先准备好视频并将其打包到单独的文件中,则即使有一点点毛刺或带宽不足,我们也会在屏幕上显示视频伪像,并且分段使播放器有大约4-20秒的时间来恢复播放器的连接并加载新数据。

如果您需要无延迟的视频怎么办? 如果您打算安排网络聊天,通过互联网控制直升机,观看IP摄像机,请选择其他协议。 以下是示例:WebRTC,MSE-LD,RTMP。

如何保护视频? 仅粘贴到您的网站上


任务非常简单-应该保护网站上的视频不被插入其他网站,没有人愿意为别人的流量付费,视频流量非常昂贵。 视频可以是私人的,不应超出您的个人帐户。

对于所有此类请求,我总是有一个答案-您需要在您的站点上配置Securelink 。 不能单方面保护内容-网站本身必须生成链接,您不能仅仅获取并插入指向该网站的静态链接。

Securelink是一种古老且高效的链接保护技术。 许多habruchitel都知道Nginx的特殊模块-ngx_http_secure_link_module。 我们不使用Nginx,但是有一个相似且效率不低的实现,唯一的区别在于参数的顺序。

如何运作? 该站点根据用户数据生成唯一的一次性链接。 Web服务器对客户端了解什么? 没错,这是IP地址,用户代理,Cookie和请求的URL。 如果客户端被授权,则可以在会话变量中获取其他信息,例如,服务数据库中的唯一客户端ID,或订阅的有效期。

我们将参数收集到一行中,并使用您喜欢的算法(例如SHA1)进行哈希处理。 事实证明,这是一组无用的字符。 例如,来自字符串“ 127.0.0.1Habr”的哈希将为:70ebe94671dd21bd65f4a00dfd988adc83fe6bda。

这条线将被传输到视频流媒体,其任务是验证链接的有效性,该链接是由您的站点生成的,不是“烂”的并且没有传递给第三方。 该网站没有反馈,因此视频流媒体应使用与网站使用的相同数据生成哈希。 视频流媒体还知道客户端的IP地址,所请求的内容,但绝不知道用户ID或链接寿命。 您必须将这些数据直接传输到链接并使用密钥,以便任何人都无法自己生成链接。

我们采用“ 127.0.0.1Habr1540327100SECRET”行并得到SHA1 99fe961672c52aa3033b98b545ec2cdec93bf515,现在我们形成了以下形式的链接:

example.com/Habr/index.m3u8?token=99fe961672c52aa3033b98b545ec2cdec93bf515-1540327100

example.com是您的视频服务器,Habr是请求的视频,index.m3u8是HLS播放列表的标准名称,值令牌是来自我们生成的Web服务器的字符串。

视频流媒体可以轻松地从此数据中提取获得相同哈希值所需的所有信息:从Web服务器变量中读取IP地址,从URL中获取所请求的内容,从令牌参数中获取生命周期,它唯一缺少的就是密钥,它将必须在配置文件中注册并保密。

您将无法将此类链接发送给朋友或在其他浏览器中打开-哈希公式中包含IP地址,并且您无法成功替换生命周期-则哈希将不匹配。

陷阱


我确实想在两段中进行描述,但是总之,它没有奏效。 这是第一个问题-并非每个人都准备深入研究此类细节,因为插入静态链接要容易得多。 我们的网站上有现成的示例 ,因此应该没有问题。

站点和Web服务器经常错误地确定客户端的IP地址,如果使用CDN网络(例如CloudFlare),这是正常的。 在这种情况下,您需要从正确的标头中获取IP地址,可能需要CDN提供程序的帮助。 例如,CloudFlare具有CF-Connecting-IP。

时间错误。 其中一台服务器上的时间不正确,再加上试图使链接寿命最小化的尝试,通常会导致链接断开。 还会发生这样的情况:用户将标签页打开几个小时,然后由于寿命短而无法播放视频。

3-24小时的链接寿命-这是正常现象,无论如何它们都会受到保护,并且有一些方法可以限制同时观看的次数。

而不是总数


在评论中告诉我们如何避免这种链接保护机制?

Source: https://habr.com/ru/post/zh-CN427499/


All Articles