From 5c58f39046c10094c1d3b0586fa81462beadbf38 Mon Sep 17 00:00:00 2001 From: xia-chu <771730766@qq.com> Date: Sat, 18 Oct 2025 13:00:54 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96getMediaList=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=EF=BC=8C=E6=96=B0=E5=A2=9E=E8=BF=94=E5=9B=9EcurrentSt?= =?UTF-8?q?amp=E5=AD=97=E6=AE=B5=EF=BC=8C=E8=8E=B7=E5=8F=96=E5=8D=95?= =?UTF-8?q?=E4=B8=AA=E6=B5=81=E6=97=B6=E7=A1=AE=E4=BF=9D=E8=BF=94=E5=9B=9E?= =?UTF-8?q?loss=E5=AD=97=E6=AE=B5=20(#4260)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/WebApi.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/server/WebApi.cpp b/server/WebApi.cpp index 2c1ade7f..790086db 100755 --- a/server/WebApi.cpp +++ b/server/WebApi.cpp @@ -391,6 +391,7 @@ Value makeMediaSourceJson(MediaSource &media){ item["schema"] = media.getSchema(); dumpMediaTuple(media.getMediaTuple(), item); item["createStamp"] = (Json::UInt64) media.getCreateStamp(); + item["currentStamp"] = (Json::UInt64) media.getTimeStamp(TrackInvalid); item["aliveSecond"] = (Json::UInt64) media.getAliveSecond(); item["bytesSpeed"] = (Json::UInt64) media.getBytesSpeed(); item["totalBytes"] = (Json::UInt64) media.getTotalBytes(); @@ -908,12 +909,24 @@ void installWebApi() { // Test url1 (get streams with virtual host "__defaultVost__") http://127.0.0.1/index/api/getMediaList?vhost=__defaultVost__ // 测试url2(获取rtsp类型的流) http://127.0.0.1/index/api/getMediaList?schema=rtsp [AUTO-TRANSLATED:21c2c15d] // Test url2 (get rtsp type streams) http://127.0.0.1/index/api/getMediaList?schema=rtsp - api_regist("/index/api/getMediaList",[](API_ARGS_MAP){ + api_regist("/index/api/getMediaList",[](API_ARGS_MAP_ASYNC){ 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; + }); MediaSource::for_each_media([&](const MediaSource::Ptr &media) { - val["data"].append(makeMediaSourceJson(*media)); + if (first) { + first = false; + media->getOwnerPoller()->async([media, done]() mutable { + (*done)["data"].append(makeMediaSourceJson(*media)); + }); + } else { + (*done)["data"].append(makeMediaSourceJson(*media)); + } }, allArgs["schema"], allArgs["vhost"], allArgs["app"], allArgs["stream"]); });