From edd719b68c16d3f2c3a131860827786399d9f55f Mon Sep 17 00:00:00 2001 From: renlu Date: Wed, 28 Sep 2022 08:54:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E9=BB=98=E8=AE=A4=E8=AF=81?= =?UTF-8?q?=E4=B9=A6=E3=80=81=E4=BF=AE=E6=94=B9=E6=88=AA=E5=9B=BE=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=EF=BC=8C=E4=BB=A5=E5=8F=8A=E5=BD=95=E5=83=8F=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E7=A9=BA=E5=AD=97=E7=AC=A6=E4=B8=B2=E7=9A=84=E5=88=A4?= =?UTF-8?q?=E6=96=AD=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- default.pem | 106 +++++++++++++++++----------------- server/WebApi.cpp | 67 ++++++++++----------- src/Record/HlsMakerImpSub.cpp | 1 + src/Record/HlsMakerSub.cpp | 6 +- 4 files changed, 93 insertions(+), 87 deletions(-) diff --git a/default.pem b/default.pem index 2cef8d27..97460132 100644 --- a/default.pem +++ b/default.pem @@ -1,37 +1,64 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEowIBAAKCAQEAjTFnNz2btUHR/K8TegU2n06lXsQuW4AfsMGthBLvnz2zdgL2 +uVxfRCuleoRpECEV9I80ibTXAJlouRLbnhLHto8gzyLeQue9/DtxTEGcS7y2aMha +0wAoUcOBv7tAITSnFepGHXoYgyU7HOCvn96U1bzqLTOhxOCH/xy003dwoEC7+Pjl +dsWs/16cpvYiZV/dZvzDDKIpHSIvQy1whi6N0SDpzz/ncThn1z8xcJDx0I1jVR76 +juP7TttbyhqJkO+fOlLn4yP9K5wZ/dPFJn2+bQRCrzGc4SM7J5YOq8ckTTTbZtSp +9yPpm7O5QyfdzePhOpRrjWroLsqaDOPV2UQlzwIDAQABAoIBADCWTh8P19vdnR3X +v5uPXLcgkL7WQt+g7Qbd91CKVaRWTsHvDilGVNA4Ntc85oyy3gPNHfa/YPdnU0bQ +6vtwGgLEKTWumY6rgdDhQcFMmLTlaV4QiFSw6q8MWMN6c/yZSmA7wMoXAIVs0/VB +ip44sb4Fpw5MBMCjxZjwL3fP09WJPlUqx09vVo7eH8rFwLBikmn982IzRigAx1I8 +TX0wkdqvv33MSxBXPMQIrwPqjf2arxWFzb6vp6yolYbMZtgORF9gznWABRy3oY50 +9jFkTkbxZFlSMVuF7nlM0WJj5Q9/IelBqpozODWUVvB+6inCqkxNLkbh0ISbpXWC +16gUZfUCgYEAxWo3FRNBrNXhVD5h2N4ApyUXkZ5UYIY5zbsHEJCrPjooh9uHu9kh +xXh5v11J/7TV9BfwLZ4qRbDBH4fq0DKEOXOZRLY5Lo4KbrYmlEDCabuJdmwwHeGh +S5K37F5z/+zPz9KWkKN+9Rg32xdLxh0969O77GnvuBrhzASpVsF6ZFMCgYEAtxf1 +eVg4Kxzuy0AWs+CisSVQc+5CbZ9teKA5fli2EVSmL5dsrKatVTIDghudJgQTU6cr +zP9I20K11jeqIoK5saQXH3CzogN6aDuKssq4rDbvVSZ09Zry6N1WMz9GPe31zEYw +sdU1w7vUw+l3unFfWOP4oZm0MH+na61V1YohCRUCgYANlp0J/1RS8DndUZnskoNa +/eucY1iNeE+8QHZhBoQy+U/W4h56qJxxejRvHp28UxczAP7QNQXV3C++2t0nzYJa +bgGLwDs5YB+JtVH8fGSlYHo6w4GgXOp8SDIOvAWiBQvc0zL367kOZ8dYdkcJ8PNV +KzLROA1/D6KhJ2T8ir7A7wKBgQCjVVxGw8xXqZfc+W9HSD3aic8bnJDl+jNOSKEB +dWH2U+1sx0jLPGWketlmV/v4zenv1lHcrl/wObK9RysfXj8JmbiG86NMBI5OLc+t +b+sOtnMLIyNzdqb71Xfwf6HJ3V5IvNTzz6AG3KkRnFSSnlDQm45RmyyDl11jUV4h +APg3gQKBgBzFeuKWnaTZz1FQBr5Ytl9gtxBRMl+49jtkqyzErJYFHe0MTWeD/1xj +mEC/7UERYWhIQF1L4ah6c0QkecR3F1s9/IYK/QHsnSJFwRyFuMas6StCERsDq5oQ +GWpXAmw7JTa8OYwxVjORdXY25Iwv6rEr6iUYBWZrkhoWYBySWpSZ +-----END RSA PRIVATE KEY----- -----BEGIN CERTIFICATE----- -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 -dduKrjk= +LmNydDAJBgNVHRMEAjAAMIIBfwYKKwYBBAHWeQIEAgSCAW8EggFrAWkAdgDoPtDa +PvUGNTLnVyi8iWvJA9PL0RFr7Otp4Xd9bQa9bgAAAYNQt3JvAAAEAwBHMEUCIEaO +G4ffzzaE6OMqiu6PUr+Y+wO2tsXCkGt1jt04Ix1qAiEAhNZwqFACieds1ZbY3r/p +wlF3iFbhqp+kNfPzon7kwc8AdgA1zxkbv7FsV78PrUxtQsu7ticgJlHqP+Eq76gD +wzvWTAAAAYNQt3JVAAAEAwBHMEUCIBOErqyKvihAEKItLWG/Plgtxh/hCTMsE+t5 ++MfsAQLCAiEA76d50S4iy1wxya+8IUASVlKStaHNqBkJAS+Oadxs2sMAdwCzc3cH +4YRQ+GOG1gWp3BEJSnktsWcMC4fc8AMOeTalmgAAAYNQt3LIAAAEAwBIMEYCIQC/ +kfFCpwF76sw/Qx3sxR8b3srW+Ds0k/6VrIIDZcYV5gIhAKkLmuyeDvzulp0y4f0t +GDgIN/OoURq6CuHA67UJlsWzMA0GCSqGSIb3DQEBCwUAA4IBAQB0BwVxPRihSdPJ +FUPLQ+ClHy9O/UisnRD7NadQQtbcMXn6L9Lwd0f2la0ytLQAKHADOZDA08KfQ5qW +B19OeQOlTwp2nhY2ZvoLEG+paeh0gYxIgD76APnd/m3g2H7GeW144ymjPcZRoldj +ZKYSdzStJJIFYXzL3FR9wjkMc4xOEes/IY5PFtj8OT8CFf7zl0R7L2Vcw9RGYi9u +vLjGwwJW9kXTX8UlKXFyjJN0ZyrmxBQHq5uNtigx8xy6HtMnPsc58tp1IqitIELp +HIur2XrRPBJA5XtpDg3AE8bXhRTM8oFMPL0UoSFWyWRYGgBo1Msc10dpXPtmbgIc +pPW8w+2c -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEqjCCA5KgAwIBAgIQAnmsRYvBskWr+YBTzSybsTANBgkqhkiG9w0BAQsFADBh @@ -59,31 +86,4 @@ M0r5LUvStcr82QDWYNPaUy4taCQmyaJ+VB+6wxHstSigOlSNF2a6vg4rgexixeiV 4YSB03Yqp2t3TeZHM9ESfkus74nQyW7pRGezj+TC44xCagCQQOzzNmzEAP2SnCrJ sNE2DpRVMnL8J6xBRdjmOsC3N6cQuKuRXbzByVBjCqAA8t1L0I+9wXJerLPyErjy rMKWaBFLmfK/AHNF4ZihwPGOc7w6UHczBZXH5RFzJNnww+WnKuTPI0HfnVH8lg== ------END CERTIFICATE----- ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAiTtbBLkfqhvnBehH+4hgdaR+b+Y36YLc6+B9Mrcm3Z400xbL -B79xOkpVQ3XDsikJS3oCTwigBwOco9ulTnkB2zKnWo0WeqBgyoI1g+ukS/Cjmocl -4Pq2bhWWTCHmPqhSkikEHXixfUPHzAUhRDSXnhxFnJX2HW+LyR5rnspw7PkWuhep -urIoLq/tVGKnO5OX/2cOmInAPGjrBG+SFa1Z0+D0lCTextP7CKirMQyoIrUR0ZDw -FTREROjwxYTXrUZw3Wrv2JQI+HW/sf71Mp0b0qwFDA8xBvtn9PBrG83d20GMGoXM -qwa8W4gsevczZxq24fC+W8UEX2YIc+MCOwqxJQIDAQABAoIBABdmIf5brFz+dfVJ -ZmCqn7vfaNmemQD9Wbr0Y5SOqxdVnu8xLzwqdd15CDHA9jW+DoIqkxMzxsl7Ya2E -yZpoQptD90oWzXLqPqa47fQI7VIvfU3fZmOGjC2YC7D+hLpBTBb03GlEB4tyz7Hn -XAU7rHB+pJXu8fCR8PVBdRs1rGyTSlOV/o2Q9dnnoAX6AIDWi63ChEJCrl0Mo9pL -e1naRN3hPFJ3SzJnPB6AUhGlxxV0oc71fnPpvW11tlpWshbVXIHJ2yS1zQcTvshj -pbOC9KRsbRQPJA+NEGOEciCP9H/Lh0lFle/zzSbpzetwgPlqTuaPbFwknz6xGux4 -GaBLrH8CgYEAvP6lGIX3a2Ot04bYoQPfO3vRUPigFKCPKQgj62B/M2SVayuMmeAF -9WvbWHLP/gx+vg7d3Pmg5YGeFnWSnrOAfjW4758yhA5f3/XDkSsMqc/NT+bsURuS -Z+sDzeOwYp8kznDPaj0k4XhUSej+6vYM+zsbMzqqsGkTQj1Ncv5eohcCgYEAueKp -MPZtYte8ID/g//p9YPCg9FNiuGMMAvUyig1PQrChSwiLflSoDJsbrtD69IliP+4y -hWeD/X8w+DUv34aQQIsSwoci6gEmG8ErqVOYvCjxksgM+2r0cGJVxqaGUB0gdjah -Z/7ND/yByr0qxuz8izaGfDybGo5F0QB13692uCMCgYAaQ/mF0vhzwEKkJxVsKzGW -/ro0WplExJugxDTZvWtwJQZvAnpj2DJ7zSWKwUoOsIXcvAwxba/itYTW8jgSPjgZ -UjYFd0Z5+9VvNqSbRDRaVTrfY+Rr0T0jnBHHR2F4E032Ms9goGbDvwlXzD3BQbjE -IY7CK+EU60V16zccSCW2uQKBgQC2GJYYEgA8aQyxJwK6oN98PJ3gW2OFL/pPV3aI -CNvRgAix4ZANVM8/ch9fVPfS4FbwO98gErUZeyU0sZ3RQhhEMjlReWK5jCCR5d1o -xi0EfrOQUAtvrGoDQkG3FeDT0ITBaWka4GBwPbPEMSYbs4L+uY5rXE+xZxh70xCl -7VTGswKBgQCOrkDjkzgwg1+GvEFmhUi+N/UaYXzOUvx6ciuxPwb+dyMy1jGpsYhE -1eLJuwtpda2aZpvLzM8HC8a7Amkff/kw8n4d0y0iM2xQ9nZSMx1pZXTCToMK2EDJ -b54tt/amcS1qFF7H3CBDYrkHcr+qPL2ypr+onOGkU3MufFXZk7NcVA== ------END RSA PRIVATE KEY----- +-----END CERTIFICATE----- \ No newline at end of file diff --git a/server/WebApi.cpp b/server/WebApi.cpp index ad3b8a27..5d65a593 100755 --- a/server/WebApi.cpp +++ b/server/WebApi.cpp @@ -1471,43 +1471,44 @@ void installWebApi() { auto scan_path = File::absolutePath(MD5(allArgs["url"]).hexdigest(), snap_root) + "/"; string new_snap = StrPrinter << scan_path << time(NULL) << ".jpeg"; - File::scanDir(scan_path, [&](const string &path, bool isDir) { - if (isDir || !end_with(path, ".jpeg")) { - //忽略文件夹或其他类型的文件 - return true; + if (expire_sec != 0){ + File::scanDir(scan_path, [&](const string &path, bool isDir) { + if (isDir || !end_with(path, ".jpeg")) { + //忽略文件夹或其他类型的文件 + return true; + } + + //找到截图 + auto tm = FindField(path.data() + scan_path.size(), nullptr, ".jpeg"); + if (atoll(tm.data()) + expire_sec < time(NULL)) { + //截图已经过期,改名,以便再次请求时,可以返回老截图 + rename(path.data(), new_snap.data()); + have_old_snap = true; + return true; + } + + //截图存在,且未过期,那么返回之 + res_old_snap = true; + responseSnap(path, allArgs.getParser().getHeader(), invoker); + //中断遍历 + return false; + }); + + if (res_old_snap) { + //已经回复了旧的截图 + return; } - //找到截图 - auto tm = FindField(path.data() + scan_path.size(), nullptr, ".jpeg"); - if (atoll(tm.data()) + expire_sec < time(NULL)) { - //截图已经过期,改名,以便再次请求时,可以返回老截图 - rename(path.data(), new_snap.data()); - have_old_snap = true; - return true; - } - - //截图存在,且未过期,那么返回之 - res_old_snap = true; - responseSnap(path, allArgs.getParser().getHeader(), invoker); - //中断遍历 - return false; - }); - - if (res_old_snap) { - //已经回复了旧的截图 - return; - } - - //无截图或者截图已经过期 - if (!have_old_snap) { - //无过期截图,生成一个空文件,目的是顺便创建文件夹路径 - //同时防止在FFmpeg生成截图途中不停的尝试调用该api多次启动FFmpeg进程 - auto file = File::create_file(new_snap.data(), "wb"); - if (file) { - fclose(file); + //无截图或者截图已经过期 + if (!have_old_snap) { + //无过期截图,生成一个空文件,目的是顺便创建文件夹路径 + //同时防止在FFmpeg生成截图途中不停的尝试调用该api多次启动FFmpeg进程 + auto file = File::create_file(new_snap.data(), "wb"); + if (file) { + fclose(file); + } } } - //启动FFmpeg进程,开始截图,生成临时文件,截图成功后替换为正式文件 auto new_snap_tmp = new_snap + ".tmp"; FFmpegSnap::makeSnap(allArgs["url"], new_snap_tmp, allArgs["timeout_sec"], [invoker, allArgs, new_snap, new_snap_tmp](bool success, const string &err_msg) { diff --git a/src/Record/HlsMakerImpSub.cpp b/src/Record/HlsMakerImpSub.cpp index 0f77d366..33a35f2a 100644 --- a/src/Record/HlsMakerImpSub.cpp +++ b/src/Record/HlsMakerImpSub.cpp @@ -101,6 +101,7 @@ string HlsMakerImpSub::onOpenSegment(uint64_t index) { if (!_file) { WarnL << "create file failed," << segment_path << " " << get_uv_errmsg(); + return ""; } if (_params.empty()) { return strDate + "/" + strHour + "/" + segment_name; diff --git a/src/Record/HlsMakerSub.cpp b/src/Record/HlsMakerSub.cpp index ba114f72..f28f0dca 100644 --- a/src/Record/HlsMakerSub.cpp +++ b/src/Record/HlsMakerSub.cpp @@ -37,7 +37,7 @@ HlsMakerSub::~HlsMakerSub() { } void HlsMakerSub::startRecord(bool isRecord) { - if (_is_record) {//检测到上一次是在录像,清空_segment_file_paths + if (_is_record) { //检测到上一次是在录像,清空_segment_file_paths _segment_file_paths.clear(); } @@ -267,6 +267,10 @@ void HlsMakerSub::createM3u8FileForRecord() { } _m3u8_file_num = 0; + if (_m3u8_file_path.empty()) { + WarnL << "create m3u8 file failed, _m3u8_file_path is empty." ; + return; + } //3.写m3u8文件 string m3u8Header = "#EXTM3U\n"