Merge pull request #118 from HomerSp/fix-network-drop-crash

Properly catch exceptions in stream broadcast handlers
This commit is contained in:
ReenigneArcher
2022-04-11 18:29:56 -04:00
committed by GitHub
+12
View File
@@ -963,6 +963,7 @@ void videoBroadcastThread(udp::socket &sock) {
fec_blocks[0] = payload;
}
try {
auto blockIndex = 0;
std::for_each(fec_blocks_begin, fec_blocks_end, [&](std::string_view &current_payload) {
auto packets = (current_payload.size() + (blocksize - 1)) / blocksize;
@@ -1021,6 +1022,11 @@ void videoBroadcastThread(udp::socket &sock) {
session->video.lowseq = lowseq;
}
catch(const std::exception &e) {
BOOST_LOG(error) << "Broadcast video failed "sv << e.what();
std::this_thread::sleep_for(100ms);
}
}
shutdown_event->raise(true);
}
@@ -1077,6 +1083,7 @@ void audioBroadcastThread(udp::socket &sock) {
auto &shards_p = session->audio.shards_p;
std::copy_n(audio_packet->payload(), bytes, shards_p[sequenceNumber % RTPA_DATA_SHARDS]);
try {
sock.send_to(asio::buffer((char *)audio_packet.get(), sizeof(audio_packet_raw_t) + bytes), session->audio.peer);
@@ -1102,6 +1109,11 @@ void audioBroadcastThread(udp::socket &sock) {
}
}
}
catch(const std::exception &e) {
BOOST_LOG(error) << "Broadcast audio failed "sv << e.what();
std::this_thread::sleep_for(100ms);
}
}
shutdown_event->raise(true);
}