增加windows多设备投屏
This commit is contained in:
@@ -20,7 +20,7 @@ NetworkSender::~NetworkSender() {
|
||||
WSACleanup();
|
||||
}
|
||||
|
||||
bool NetworkSender::Initialize(const std::string& ip, int port) {
|
||||
bool NetworkSender::Initialize(const std::vector<std::string>& ips, int port) {
|
||||
socket_ = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
|
||||
if (socket_ == INVALID_SOCKET) return false;
|
||||
|
||||
@@ -28,11 +28,16 @@ bool NetworkSender::Initialize(const std::string& ip, int port) {
|
||||
int sndBuf = 1024 * 1024; // 1MB
|
||||
setsockopt(socket_, SOL_SOCKET, SO_SNDBUF, (char*)&sndBuf, sizeof(sndBuf));
|
||||
|
||||
destAddr_.sin_family = AF_INET;
|
||||
destAddr_.sin_port = htons(port);
|
||||
inet_pton(AF_INET, ip.c_str(), &destAddr_.sin_addr);
|
||||
destAddrs_.clear();
|
||||
for (const auto& ip : ips) {
|
||||
sockaddr_in addr = {};
|
||||
addr.sin_family = AF_INET;
|
||||
addr.sin_port = htons(port);
|
||||
inet_pton(AF_INET, ip.c_str(), &addr.sin_addr);
|
||||
destAddrs_.push_back(addr);
|
||||
}
|
||||
|
||||
return true;
|
||||
return !destAddrs_.empty();
|
||||
}
|
||||
|
||||
bool NetworkSender::SendFrame(const std::vector<uint8_t>& data, uint64_t timestamp, int width, int height, bool isKeyFrame) {
|
||||
@@ -75,10 +80,12 @@ bool NetworkSender::SendFrame(const std::vector<uint8_t>& data, uint64_t timesta
|
||||
memcpy(packet.data(), &transHeader, HEADER_SIZE);
|
||||
memcpy(packet.data() + HEADER_SIZE, buffer.data() + offset, chunkSize);
|
||||
|
||||
int sent = sendto(socket_, (const char*)packet.data(), (int)packet.size(), 0, (sockaddr*)&destAddr_, sizeof(destAddr_));
|
||||
if (sent < 0) {
|
||||
// std::cerr << "Send failed" << std::endl;
|
||||
// Continue sending other fragments anyway
|
||||
for (const auto& addr : destAddrs_) {
|
||||
int sent = sendto(socket_, (const char*)packet.data(), (int)packet.size(), 0, (sockaddr*)&addr, sizeof(addr));
|
||||
if (sent < 0) {
|
||||
// std::cerr << "Send failed" << std::endl;
|
||||
// Continue sending other fragments anyway
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user