当消息大小超过限制时如何通过WebRTC和libdatachannel发送消息

问题描述 投票:0回答:1

我正在使用 libdatachannel 库,我想将文件内容发送给应答者。

我有数据通道,但是当我通过数据通道发送文件内容时,出现错误“消息大小超出限制”。我不知道如何将我的消息分成块。(设置 maxMessageSize 不是选项,因为文件大小根据提供者和应答者是浏览器而变化)

我简单地尝试过;


    void sendfile2Content(std::shared_ptr<rtc::DataChannel> dc, const std::map<std::wstring, std::wstring>& files)
    {
        nlohmann::json msg
        {
            {"Message_Type", "File"},
            {"FileName_to_Contents", files}
        };
    
        dc->send(msg.dump());
    }

当我调用该函数时,我得到std::logic_error(消息大小超出限制)。

当消息大小超过消息大小限制时如何向peer发送消息?

c++ webrtc sctp libdatachannel
1个回答
0
投票

SCTP(WebRTC 数据通道使用的协议)将消息大小限制为 16kB,虽然存在发送更大消息的协议扩展,但它们存在严重问题,例如实现之间无法互操作并导致队头阻塞。因此,您应该构建代码以将消息限制为 16kB。

为了通过数据通道实现文件传输,您需要在发送方手动将数据拆分为 16kB 的块,并在接收方重新组装这些块。由于数据通道 API 早于 Promise,因此您还需要等待

onbufferedamountlow
回调,以避免压垮套接字缓冲区。

WebRTC 示例中有一个 示例,并且 Galene 源代码中有一个 使用 Promise 的实现(免责声明,我是作者)。

© www.soinside.com 2019 - 2024. All rights reserved.