【问题标题】:What is a reasonable length limit for SDP?SDP 的合理长度限制是多少?
【发布时间】:2012-12-04 15:59:31
【问题描述】:

我需要存储WebRTC 返回的SDP 结构。规范没有定义最大长度,但显然数据库需要一个。

在这种情况下,合理的长度限制是多少?在这种未定义的情况下,您通常如何决定长度限制?

【问题讨论】:

    标签: database-design database-schema sdp


    【解决方案1】:

    通常,不需要存储整个 SDP 数据包。在大多数情况下,SDP 数据包长度没有上限这一事实不是问题。

    在这种情况下,您可以做的最简单的事情是使用blob

    【讨论】:

    • SDP的哪些子部分通常被存储?根据我的经验,大多数数据库中的 BLOB 支持往往很糟糕(错误的实现、性能差、内存使用率高等)。
    • 根本不存储。 SDP 数据包传送用于建立会话的信息。它通常立即使用并丢弃。为什么需要存储它?
    • 查找 WebRTC。有人需要在两个 Web 浏览器(不能直接相互通信)之间传递 SDP。某人(服务器)需要将该 SDP 放在某个地方。
    【解决方案2】:

    除非 SessionId 和 Originator 在 SDP 中发生变化,否则它可能无法正常工作。

    另一个堆栈可能会看到 SDP 并接受它,但无法与远程客户端通信。

    SDP 很可能需要在某种程度上重新编写。如果您想要一个替代方案,您可以将 SDP 转换为 XML 并将 XML 存储在数据库中,然后使用函数来查询 xml 并将其作为 SDP 动态写出....

    如果 XML 是不可能的,并且您真的只关心存储,请参阅在 SQLServer 中使用 filestream 选项http://www.databasejournal.com/features/mssql/filestream-and-filetable-in-sql-server-2012.html

    此外,在阅读了仅与 WebRTC 相关的草案规范之后......

    https://datatracker.ietf.org/doc/html/draft-nandakumar-rtcweb-sdp-00#page-3

    我相信由于 SDP 中使用了密钥交换,您肯定必须重写 SDP 的某些部分。

    【讨论】:

    • 对不起。我不明白你的回答。为什么 SessionId 或 Originator 需要更改? “另一个堆栈”指的是什么?我为什么要关心一个节点是否无法连接到另一个节点?
    • 根据您的客户获取实际媒体的方式,执行该传输的机制是stack,例如您的客户端用于使用您发送的数据的播放器...如果您使用 HTTP 则可能无关紧要,但如果您将此 SDP 提供给处于 RTSP 会话中的客户端,那么它将无法正常工作,因为 stack正在读取 SDP 以确定信息可能会利用来自 SDP 的无效信息,因此会中止接收。
    • 为什么 SDP 一旦存储在数据库中就不再有效?我只是充当两个交换 SDP 的对等方之间的代理。
    • 因为 SDP 通常包含一个用于标识会话的字段。它还有一个 IN 地址设置为不是你的来源,玩家可能会看到它。查看 RFC tools.ietf.org/html/rfc4566
    • 我在 RFC 中没有看到客户端放弃使用 SDP 的依据,因为 c= 行与服务器的 IP 地址不匹配。如果您不同意,请链接到特定部分。无论如何,我知道 WebRTC 的行为不是这样,所以这不适用于这个问题。
    【解决方案3】:

    回答我自己的问题。

    您可以使用历史值估计最大长度,也可以使用 BLOB。就我而言,我最终选择了 4000 字节的理论限制。

    【讨论】:

    • 我正在编写一个信号服务器并试图保护它免受不良行为者的影响,这意味着我必须将允许的主体大小限制在一个合理的范围内,以容纳大部分 webrtc 提供/答案,所以我想要了解这是否对您有用
    • @EmadElsaid 已经 8 年了。老实说,我不记得了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-15
    • 2023-03-03
    • 1970-01-01
    • 2010-12-08
    • 2011-02-24
    • 1970-01-01
    • 2023-03-13
    相关资源
    最近更新 更多