From ae4fd9f7df59e2d92de82a6f7ac3c2d3af362b9e Mon Sep 17 00:00:00 2001 From: Bruno Herbelin Date: Thu, 13 Oct 2022 16:24:01 +0200 Subject: [PATCH] Disable Broardast and inform user if SRT not available --- UserInterfaceManager.cpp | 41 +++++++++++++++++++++------------------- VideoBroadcast.cpp | 24 ++++++++++++++--------- 2 files changed, 37 insertions(+), 28 deletions(-) diff --git a/UserInterfaceManager.cpp b/UserInterfaceManager.cpp index f318ae4..2c84508 100644 --- a/UserInterfaceManager.cpp +++ b/UserInterfaceManager.cpp @@ -7623,26 +7623,28 @@ void Navigator::RenderMainPannelSettings() // ImGui::Text("Stream"); - char msg[256]; - ImFormatString(msg, IM_ARRAYSIZE(msg), "Broadcast SRT\n\n" - "vimix is listening to SRT requests on Port %d. " - "Example network addresses to call:\n" - " srt//%s:%d (localhost)\n" - " srt//%s:%d (local IP)", - Settings::application.broadcast_port, - NetworkToolkit::host_ips()[0].c_str(), Settings::application.broadcast_port, - NetworkToolkit::host_ips()[1].c_str(), Settings::application.broadcast_port ); + if (VideoBroadcast::available()) { + char msg[256]; + ImFormatString(msg, IM_ARRAYSIZE(msg), "Broadcast SRT\n\n" + "vimix is listening to SRT requests on Port %d. " + "Example network addresses to call:\n" + " srt//%s:%d (localhost)\n" + " srt//%s:%d (local IP)", + Settings::application.broadcast_port, + NetworkToolkit::host_ips()[0].c_str(), Settings::application.broadcast_port, + NetworkToolkit::host_ips()[1].c_str(), Settings::application.broadcast_port ); - ImGuiToolkit::Indication(msg, ICON_FA_PODCAST); - ImGui::SameLine(0); - ImGui::SetCursorPosX(-1.f * IMGUI_RIGHT_ALIGN); - ImGui::SetNextItemWidth(IMGUI_RIGHT_ALIGN); - char bufport[7] = ""; - sprintf(bufport, "%d", Settings::application.broadcast_port); - ImGui::InputTextWithHint("Broadcast", "7070", bufport, 6, ImGuiInputTextFlags_CharsDecimal); - if (ImGui::IsItemDeactivatedAfterEdit()){ - if ( BaseToolkit::is_a_number(bufport, &Settings::application.broadcast_port)) - Settings::application.broadcast_port = CLAMP(Settings::application.broadcast_port, 1029, 49150); + ImGuiToolkit::Indication(msg, ICON_FA_PODCAST); + ImGui::SameLine(0); + ImGui::SetCursorPosX(-1.f * IMGUI_RIGHT_ALIGN); + ImGui::SetNextItemWidth(IMGUI_RIGHT_ALIGN); + char bufport[7] = ""; + sprintf(bufport, "%d", Settings::application.broadcast_port); + ImGui::InputTextWithHint("Broadcast", "7070", bufport, 6, ImGuiInputTextFlags_CharsDecimal); + if (ImGui::IsItemDeactivatedAfterEdit()){ + if ( BaseToolkit::is_a_number(bufport, &Settings::application.broadcast_port)) + Settings::application.broadcast_port = CLAMP(Settings::application.broadcast_port, 1029, 49150); + } } ImGuiToolkit::Indication("Share on local network\n\n" @@ -7658,6 +7660,7 @@ void Navigator::RenderMainPannelSettings() ImGuiToolkit::Spacing(); ImGui::Text("OSC"); + char msg[256]; ImFormatString(msg, IM_ARRAYSIZE(msg), "Open Sound Control\n\n" "vimix accepts OSC messages sent by UDP on Port %d and replies on Port %d." "Example network addresses:\n" diff --git a/VideoBroadcast.cpp b/VideoBroadcast.cpp index 3a8bcf5..9c81c6b 100644 --- a/VideoBroadcast.cpp +++ b/VideoBroadcast.cpp @@ -22,8 +22,8 @@ std::string VideoBroadcast::srt_sink_; std::string VideoBroadcast::h264_encoder_; std::vector< std::pair > pipeline_sink_ { - {"srtsink", "srtsink uri=srt://:XXXX name=sink"}, - {"srtserversink", "srtserversink uri=srt://:XXXX name=sink"} + {"srtsin", "srtsink uri=srt://:XXXX name=sink"}, + {"srtserversin", "srtserversink uri=srt://:XXXX name=sink"} }; std::vector< std::pair > pipeline_encoder_ { @@ -38,6 +38,8 @@ bool VideoBroadcast::available() static bool _tested = false; if (!_tested) { srt_sink_.clear(); + h264_encoder_.clear(); + for (auto config = pipeline_sink_.cbegin(); config != pipeline_sink_.cend() && srt_sink_.empty(); ++config) { if ( GstToolkit::has_feature(config->first) ) { @@ -45,15 +47,19 @@ bool VideoBroadcast::available() } } - h264_encoder_.clear(); - for (auto config = pipeline_encoder_.cbegin(); - config != pipeline_encoder_.cend() && h264_encoder_.empty(); ++config) { - if ( GstToolkit::has_feature(config->first) ) { - h264_encoder_ = config->second; - if (config->first != pipeline_encoder_.back().first) - Log::Info("Video Broadcast uses hardware-accelerated encoder (%s)", config->first.c_str()); + if (!srt_sink_.empty()) + { + for (auto config = pipeline_encoder_.cbegin(); + config != pipeline_encoder_.cend() && h264_encoder_.empty(); ++config) { + if ( GstToolkit::has_feature(config->first) ) { + h264_encoder_ = config->second; + if (config->first != pipeline_encoder_.back().first) + Log::Info("Video Broadcast uses hardware-accelerated encoder (%s)", config->first.c_str()); + } } } + else + Log::Info("Video SRT Broadcast not available."); // perform test only once _tested = true;