WebRTC/RTSP/RTMP/HTTP/HLS/HTTP-FLV/WebSocket-FLV/HTTP-TS/HTTP-fMP4/WebSocket-TS/WebSocket-fMP4/GB28181/SRT/STUN/TURN server and client framework based on C++11
This report summarizes scanner evidence for ZLMediaKit/ZLMediaKit, a C++ project with 17,665 GitHub stars. SynthScan examined 158,870 lines of code across 529 source files, recording 296 pattern matches distributed across 12 syntactic categories. The legacy adjusted pattern signal is 2.0 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 283 finding(s).
Are imports declared and package/API names verified? 4 finding(s).
Are wrappers, guards, and repeated structures necessary? 36 finding(s).
Which changes need focused human review? 296 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 296 distinct pattern matches across 12 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ZLMVersion.h.ini | 1 | #ifndef __GIT_VERSION_H__ | COMMENT |
| LOW | CMakeLists.txt | 1 | # MIT License | COMMENT |
| LOW | golang/zlmediakit/mk_common.go | 121 | } | COMMENT |
| LOW | ext-codec/VP9Rtp.cpp | 61 | hasScalabilityStructure ? 'V' : ' ', | COMMENT |
| LOW | ext-codec/VP9Rtp.cpp | 81 | // P,F: | P_DIFF |N| (CONDITIONALLY REQUIRED) - up to 3 times | COMMENT |
| LOW | ext-codec/CMakeLists.txt | 1 | # MIT License | COMMENT |
| LOW | ext-codec/H264Rtp.cpp | 281 | COMMENT | |
| LOW | ext-codec/H264.cpp | 321 | // Find the next frame | COMMENT |
| LOW | ext-codec/MP2A.cpp | 21 | COMMENT | |
| LOW | tests/test_ps.cpp | 1 | #include "Common/config.h" | COMMENT |
| LOW | tests/CMakeLists.txt | 1 | # MIT License | COMMENT |
| LOW | tests/CMakeLists.txt | 21 | # SOFTWARE. | COMMENT |
| LOW | tests/test_rtp_pcap.cpp | 1 | #include "Common/config.h" | COMMENT |
| LOW | tests/test_sortor.cpp | 161 | // 模拟乱序,count是连续倒序次数,最多连续乱序8次 [AUTO-TRANSLATED:76bd8e43] | COMMENT |
| LOW | tests/test_pusherMp4.cpp | 141 | // You can use the mp4 file generated by test_server | COMMENT |
| LOW | tests/test_bench_push.cpp | 1 | /* | COMMENT |
| LOW | tests/test_server.cpp | 21 | COMMENT | |
| LOW | tests/test_server.cpp | 241 | loadIniConfig(); | COMMENT |
| LOW | tests/test_server.cpp | 261 | // hls address: http://127.0.0.1/live/0/hls.m3u8 | COMMENT |
| LOW | tests/test_httpClient.cpp | 81 | ///////////////////////////////http get/////////////////////// | COMMENT |
| LOW | server/pyinvoker.cpp | 1 | #if defined(ENABLE_PYTHON) | COMMENT |
| LOW | server/Process.cpp | 21 | COMMENT | |
| LOW | server/Process.cpp | 301 | // windows下目前没有比较好的手段往子进程发送SIGTERM或信号 [AUTO-TRANSLATED:cd32ad25] | COMMENT |
| LOW | server/CMakeLists.txt | 1 | # MIT License | COMMENT |
| LOW | server/WebApi.cpp | 21 | COMMENT | |
| LOW | server/WebApi.cpp | 41 | #include "FFmpegSource.h" | COMMENT |
| LOW | server/WebApi.cpp | 61 | #include "../webrtc/WebRtcSignalingSession.h" | COMMENT |
| LOW | server/WebHook.cpp | 761 | * kBroadcastHttpAccess event trigger mechanism | COMMENT |
| LOW | server/VideoStack.cpp | 1 | #if defined(ENABLE_VIDEOSTACK) && defined(ENABLE_X264) && defined(ENABLE_FFMPEG) | COMMENT |
| LOW | server/System.cpp | 21 | #include <Windows.h> | COMMENT |
| LOW | server/pyinvoker.h | 1 | | COMMENT |
| LOW | server/ShellParser.h | 21 | // - Whitespace splitting (space, tab, newline) | COMMENT |
| LOW | server/main.cpp | 21 | #include "Common/config.h" | COMMENT |
| LOW | server/main.cpp | 441 | // https服务器,端口默认443 [AUTO-TRANSLATED:24999616] | COMMENT |
| LOW | server/WebApi.h | 181 | }; | COMMENT |
| LOW | srt/SrtTransport.hpp | 1 | #ifndef ZLMEDIAKIT_SRT_TRANSPORT_H | COMMENT |
| LOW | srt/CMakeLists.txt | 1 | # MIT License | COMMENT |
| LOW | srt/SrtTransport.cpp | 1 | #include "Util/onceToken.h" | COMMENT |
| LOW | srt/Common.hpp | 1 | #ifndef ZLMEDIAKIT_SRT_COMMON_H | COMMENT |
| LOW | .github/workflows/docker_py.yml | 81 | # transparency data even for private images, pass --force to cosign below. | COMMENT |
| LOW | .github/workflows/docker.yml | 81 | # https://github.com/sigstore/cosign | COMMENT |
| LOW | api/CMakeLists.txt | 1 | # MIT License | COMMENT |
| LOW | api/include/mk_events_objects.h | 21 | ///////////////////////////////////////////RecordInfo///////////////////////////////////////////// | COMMENT |
| LOW | api/include/mk_events_objects.h | 41 | // Folder path | COMMENT |
| LOW | api/include/mk_events_objects.h | 61 | #define mk_mp4_info_get_file_size mk_record_info_get_file_size | COMMENT |
| LOW | api/include/mk_events_objects.h | 81 | // Parser::Url(), get the HTTP access url (excluding the parameters after ?) | COMMENT |
| LOW | api/include/mk_events_objects.h | 121 | COMMENT | |
| LOW | api/include/mk_transcode.h | 21 | COMMENT | |
| LOW | api/include/mk_transcode.h | 281 | #ifdef __cplusplus | COMMENT |
| LOW | api/include/mk_mediakit.h | 21 | #include "mk_events.h" | COMMENT |
| LOW | api/include/mk_tcp.h | 61 | COMMENT | |
| LOW | api/include/mk_common.h | 21 | #if defined(_WIN32) && defined(_MSC_VER) | COMMENT |
| LOW | api/include/mk_common.h | 41 | #endif | COMMENT |
| LOW | api/include/mk_common.h | 61 | COMMENT | |
| LOW | api/include/mk_common.h | 81 | // File log save days, set to 0 to disable log file | COMMENT |
| LOW | api/include/mk_util.h | 241 | */ | COMMENT |
| LOW | api/include/mk_frame.h | 21 | // cpp | COMMENT |
| LOW | api/source/mk_webrtc.cpp | 21 | #include "Thread/WorkThreadPool.h" | COMMENT |
| LOW | api/source/mk_recorder.cpp | 121 | // 默认解复用mp4不生成mp4 [AUTO-TRANSLATED:11f2dcee] | COMMENT |
| LOW | api/tests/CMakeLists.txt | 1 | # MIT License | COMMENT |
| 185 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/integration/test_av1_rtmp_startup.py | 22 | def test_both_ports_are_distinct_and_reserved(self): | CODE |
| LOW | tests/integration/test_av1_rtmp_startup.py | 30 | def test_failed_bind_retries_with_fresh_config(self): | CODE |
| LOW | tests/integration/test_av1_rtmp_startup.py | 56 | def test_failed_readiness_stops_process_before_retry(self): | CODE |
| LOW | tests/integration/test_av1_rtmp_startup.py | 69 | def test_startup_failure_is_bounded(self): | CODE |
| LOW | www/ZLMRTCClient.js | 870 | function shimSenderReceiverGetStats(window) { | CODE |
| LOW | www/ZLMRTCClient.js | 978 | function shimAddTrackRemoveTrackWithNative(window) { | CODE |
| LOW | www/ZLMRTCClient.js | 2409 | function isActionAllowedInSignalingState(action, type, signalingState) { | CODE |
| LOW | www/ZLMRTCClient.js | 2459 | function addTrackToStreamAndFireEvent(track, stream) { | CODE |
| LOW | www/ZLMRTCClient.js | 2465 | function removeTrackFromStreamAndFireEvent(track, stream) { | CODE |
| LOW | www/ZLMRTCClient.js | 4887 | function shimTrackEventTransceiver(window) { | CODE |
| LOW | www/ZLMRTCClient.js | 5327 | function shimAddIceCandidateNullOrEmpty(window, browserDetails) { | CODE |
| LOW | www/ZLMRTCClient.js | 5632 | function isVideoConstrainsForScreenCast(constraints) { | CODE |
| LOW | www/ZLMRTCClient.js | 7184 | function throwIfCancellationRequested(config) { | CODE |
| LOW | www/ZLMRTCClient.js | 7500 | this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { | CODE |
| LOW⚡ | www/swagger/swagger-ui.js | 1 | !function webpackUniversalModuleDefinition(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"fu | CODE |
| LOW⚡ | www/swagger/swagger-ui-es-bundle-core.js | 2 | import*as e from"base64-js";import*as t from"ieee754";import*as r from"react";import*as n from"redux";import*as a from"i | CODE |
| LOW | www/swagger/swagger-ui-standalone-preset.js | 2 | !function webpackUniversalModuleDefinition(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"fu | CODE |
| LOW | www/webrtc/ZLMRTCClient.js | 870 | function shimSenderReceiverGetStats(window) { | CODE |
| LOW | www/webrtc/ZLMRTCClient.js | 978 | function shimAddTrackRemoveTrackWithNative(window) { | CODE |
| LOW | www/webrtc/ZLMRTCClient.js | 2409 | function isActionAllowedInSignalingState(action, type, signalingState) { | CODE |
| LOW | www/webrtc/ZLMRTCClient.js | 2459 | function addTrackToStreamAndFireEvent(track, stream) { | CODE |
| LOW | www/webrtc/ZLMRTCClient.js | 2465 | function removeTrackFromStreamAndFireEvent(track, stream) { | CODE |
| LOW | www/webrtc/ZLMRTCClient.js | 4887 | function shimTrackEventTransceiver(window) { | CODE |
| LOW | www/webrtc/ZLMRTCClient.js | 5327 | function shimAddIceCandidateNullOrEmpty(window, browserDetails) { | CODE |
| LOW | www/webrtc/ZLMRTCClient.js | 5632 | function isVideoConstrainsForScreenCast(constraints) { | CODE |
| LOW | www/webrtc/ZLMRTCClient.js | 7184 | function throwIfCancellationRequested(config) { | CODE |
| LOW | www/webrtc/ZLMRTCClient.js | 7500 | this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | CMakeLists.txt | 520 | # ---------------------------------------------------------------------------- | COMMENT |
| MEDIUM | CMakeLists.txt | 522 | # ---------------------------------------------------------------------------- | COMMENT |
| MEDIUM | server/WebApi.cpp | 236 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | server/WebApi.cpp | 239 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/Http/HttpBody.cpp | 403 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/Http/HttpBody.cpp | 405 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | www/ZLMRTCClient.js | 4513 | // This is an ugly hack, but at the same time is way more robust than | COMMENT |
| MEDIUM | www/webrtc/ZLMRTCClient.js | 4513 | // This is an ugly hack, but at the same time is way more robust than | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | www/swagger/swagger-ui.js | 1 | !function webpackUniversalModuleDefinition(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"fu | CODE |
| LOW⚡ | www/swagger/swagger-ui.js | 1 | !function webpackUniversalModuleDefinition(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"fu | CODE |
| LOW⚡ | www/swagger/swagger-ui-es-bundle-core.js | 2 | import*as e from"base64-js";import*as t from"ieee754";import*as r from"react";import*as n from"redux";import*as a from"i | CODE |
| LOW⚡ | www/swagger/swagger-ui-es-bundle-core.js | 2 | import*as e from"base64-js";import*as t from"ieee754";import*as r from"react";import*as n from"redux";import*as a from"i | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | conf/config.ini | 737 | # Assuming your pull source format is not H264, H265, or AAC, you can use direct proxy mode to support RTSP proxying. | COMMENT |
| MEDIUM | src/Rtcp/RtcpFCI.h | 38 | // The number of lost macroblocks, in scan order as discussed above. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/openapi/generates.py | 70 | CODE | |
| LOW | tools/openapi/generates.py | 102 | CODE | |
| LOW | tests/integration/test_av1_rtmp_startup.py | 22 | CODE | |
| LOW | tests/integration/av1_rtmp_metadata.py | 32 | CODE | |
| LOW | tests/integration/av1_rtmp_metadata.py | 71 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/integration/av1_rtmp_metadata.py | 53 | except (OSError, ValueError): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | webrtc/DtlsTransport.cpp | 420 | // NOTE: This function returns 0 on success. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | conf/config.ini | 540 | # Set this to 0 to improve compatibility with legacy RTSP devices that do not support `stap-a`. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/openapi/generates.py | 123 | def update_options(version: str, secret: str) -> None: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/integration/av1_rtmp_metadata.py | 183 | except Exception: | CODE |