Properly catch exceptions in stream broadcast handlers to prevent unhandled exception crash/termination.

This commit is contained in:
Mathias Tillman
2022-04-07 08:20:47 +02:00
parent 0044ec1d52
commit a9b9d1bd09

View File

@@ -963,6 +963,7 @@ void videoBroadcastThread(udp::socket &sock) {
fec_blocks[0] = payload; fec_blocks[0] = payload;
} }
try {
auto blockIndex = 0; auto blockIndex = 0;
std::for_each(fec_blocks_begin, fec_blocks_end, [&](std::string_view &current_payload) { std::for_each(fec_blocks_begin, fec_blocks_end, [&](std::string_view &current_payload) {
auto packets = (current_payload.size() + (blocksize - 1)) / blocksize; auto packets = (current_payload.size() + (blocksize - 1)) / blocksize;
@@ -1021,6 +1022,11 @@ void videoBroadcastThread(udp::socket &sock) {
session->video.lowseq = lowseq; 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); shutdown_event->raise(true);
} }
@@ -1077,6 +1083,7 @@ void audioBroadcastThread(udp::socket &sock) {
auto &shards_p = session->audio.shards_p; auto &shards_p = session->audio.shards_p;
std::copy_n(audio_packet->payload(), bytes, shards_p[sequenceNumber % RTPA_DATA_SHARDS]); 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); 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); shutdown_event->raise(true);
} }