From 68cc757708d542668798ba7df58ab7cca64d2541 Mon Sep 17 00:00:00 2001 From: xia-chu <771730766@qq.com> Date: Thu, 30 Oct 2025 11:20:04 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DgetMediaList=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E7=BA=BF=E7=A8=8B=E5=AE=89=E5=85=A8=E9=97=AE=E9=A2=98?= =?UTF-8?q?=20(#4526)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/WebApi.cpp | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/server/WebApi.cpp b/server/WebApi.cpp index 790086db..e7717963 100755 --- a/server/WebApi.cpp +++ b/server/WebApi.cpp @@ -913,21 +913,24 @@ void installWebApi() { CHECK_SECRET(); // 获取所有MediaSource列表 [AUTO-TRANSLATED:7bf16dc2] // Get all MediaSource lists - bool first = true; - std::shared_ptr done(new Json::Value(val), [invoker, headerOut](Json::Value *val) { - invoker(200, headerOut, val->toStyledString()); - delete val; - }); + std::list lst; MediaSource::for_each_media([&](const MediaSource::Ptr &media) { - if (first) { - first = false; - media->getOwnerPoller()->async([media, done]() mutable { - (*done)["data"].append(makeMediaSourceJson(*media)); - }); - } else { - (*done)["data"].append(makeMediaSourceJson(*media)); - } + lst.emplace_back(media); }, allArgs["schema"], allArgs["vhost"], allArgs["app"], allArgs["stream"]); + + if (lst.size() == 1) { + // 如果是搜索单一流,那么在它的归属线程中执行,用于获取丢包率参数 + auto front = std::move(lst.front()); + front->getOwnerPoller()->async([=]() mutable { + val["data"].append(makeMediaSourceJson(*front)); + invoker(200, headerOut, val.toStyledString()); + }); + } else { + for (auto &media : lst) { + val["data"].append(makeMediaSourceJson(*media)); + } + invoker(200, headerOut, val.toStyledString()); + } }); // 测试url http://127.0.0.1/index/api/isMediaOnline?schema=rtsp&vhost=__defaultVhost__&app=live&stream=obs [AUTO-TRANSLATED:126a75e8]