我与 srt 套接字建立了服务器和客户端连接(通过 Haivision https://github.com/Haivision/srt)。连接按预期建立,但是,当通信开始时,出现了一个奇怪的错误应用程序……
我有一个带有 srt 套接字的服务器和客户端连接(由 Haivision https://github.com/Haivision/srt 提供)。连接按预期建立,但是,当通信开始时,出现一个奇怪的错误。我的数据包结构是宽度:2 个字节高度:2 个字节图像:宽度 高度 3(3 个字节,rgb,每个像素)
当尝试接收代表宽度的前 2 个字节时,控制台中打印了以下消息:\'LiveCC:缓冲区大小:2 太小,无法达到最大值 1316\'
我无法解决这个问题,在读取其余数据之前读取前 4 个字节对于代码流来说至关重要,但 srt 似乎无法处理小于 1316 字节的数据,我不知道该怎么做。如果有人更了解协议实现并能帮助我解决这个问题,那就太好了。
这是我失败的代码:
// _sock is the srt socket
typedef std::vector<Pixel> Image;
Image Viewer::receiveImage(uint16_t& width, uint16_t& height)
{
int receivedBytes;
char buffer[sizeof(uint16_t)];
receivedBytes = srt_recvmsg(_sock, buffer, sizeof(buffer)); // here the error gets printed
width = static_cast<uint16_t>(*buffer);
receivedBytes = srt_recvmsg(_sock, buffer, sizeof(buffer)); // here the error gets printed
height = static_cast<uint16_t>(*buffer);
Image image(width * height * BITS_IN_BYTE);
receivedBytes = srt_recvmsg(_sock, (char*)image.data(), image.size());
if (receivedBytes <= 0)
{
throw std::runtime_error("Failed to receive stream from Sharer");
}
image.resize(receivedBytes);
return image;
}