From 9c646d13168170eda85557ec549ec1c94f0449d1 Mon Sep 17 00:00:00 2001 From: xiongziliang <771730766@qq.com> Date: Wed, 10 Jun 2020 10:50:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E9=A2=84=E8=AE=BE=E6=88=AA?= =?UTF-8?q?=E5=9B=BE=E7=9B=B8=E5=85=B3=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/WebApi.cpp | 39 +++++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/server/WebApi.cpp b/server/WebApi.cpp index d596604b..20a653aa 100644 --- a/server/WebApi.cpp +++ b/server/WebApi.cpp @@ -821,13 +821,31 @@ void installWebApi() { val["data"]["paths"] = paths; }); - GET_CONFIG(string, snap_root, API::kSnapRoot); + static auto responseSnap = [](const string &snap_path, + const HttpSession::KeyValue &headerIn, + const HttpSession::HttpResponseInvoker &invoker) { + StrCaseMap headerOut; + struct stat statbuf = {0}; + GET_CONFIG(string, defaultSnap, API::kDefaultSnap); + if (!(stat(snap_path.data(), &statbuf) == 0 && statbuf.st_size != 0) && !defaultSnap.empty()) { + //空文件且设置了预设图,则返回预设图片(也就是FFmpeg生成截图中空档期的默认图片) + const_cast(snap_path) = File::absolutePath(defaultSnap, ""); + headerOut["Content-Type"] = HttpFileManager::getContentType(snap_path.data()); + } else { + //之前生成的截图文件,我们默认为jpeg格式 + headerOut["Content-Type"] = HttpFileManager::getContentType(".jpeg"); + } + //返回图片给http客户端 + invoker.responseFile(headerIn, headerOut, snap_path); + }; //获取截图缓存或者实时截图 //http://127.0.0.1/index/api/getSnap?url=rtmp://127.0.0.1/record/robot.mp4&timeout_sec=10&expire_sec=3 api_regist2("/index/api/getSnap", [](API_ARGS2){ CHECK_SECRET(); CHECK_ARGS("url", "timeout_sec", "expire_sec"); + GET_CONFIG(string, snap_root, API::kSnapRoot); + int expire_sec = allArgs["expire_sec"]; auto scan_path = File::absolutePath(MD5(allArgs["url"]).hexdigest(), snap_root) + "/"; string snap_path; @@ -851,19 +869,7 @@ void installWebApi() { }); if(!snap_path.empty()){ - StrCaseMap headerOut; - struct stat statbuf = {0}; - GET_CONFIG(string, defaultSnap, API::kDefaultSnap); - if (!defaultSnap.empty() && !(stat(snap_path.data(), &statbuf) == 0 && statbuf.st_size != 0)) { - //空文件,则返回预设图片(也就是FFmpeg生成截图中空档期的默认图片) - snap_path = File::absolutePath(defaultSnap, ""); - headerOut["Content-Type"] = HttpFileManager::getContentType(snap_path.data()); - } else { - //之前生成的截图文件,我们默认为jpeg格式 - headerOut["Content-Type"] = HttpFileManager::getContentType(".jpeg"); - } - //返回图片给http客户端 - invoker.responseFile(headerIn,headerOut,snap_path); + responseSnap(snap_path, headerIn, invoker); return; } @@ -883,10 +889,7 @@ void installWebApi() { //生成截图失败,可能残留空文件 File::delete_file(snap_path.data()); } - - StrCaseMap headerOut; - headerOut["Content-Type"] = HttpFileManager::getContentType(".jpeg"); - invoker.responseFile(headerIn, headerOut, snap_path); + responseSnap(snap_path, headerIn, invoker); }); });