Janus WebRTC Server
This report summarizes scanner evidence for meetecho/janus-gateway, a C project with 9,204 GitHub stars. SynthScan examined 154,835 lines of code across 219 source files, recording 264 pattern matches distributed across 11 syntactic categories. The legacy adjusted pattern signal is 1.7 (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-11-14.
Can maintainers explain intent, assumptions, and trade-offs? 223 finding(s).
Are imports declared and package/API names verified? 2 finding(s).
Are wrappers, guards, and repeated structures necessary? 48 finding(s).
Which changes need focused human review? 264 finding(s).
Run additional scans to build a history of the legacy pattern signal. Score changes are not a measure of AI adoption or code quality.
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 264 distinct pattern matches across 11 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 | html/demos/webaudio.js | 41 | return; | COMMENT |
| LOW | html/demos/sip.js | 261 | // SDES support by setting "srtp" to "sdes_mandatory", e.g.: | COMMENT |
| LOW | html/demos/sip.js | 841 | register["secret"] = password; | COMMENT |
| LOW | html/demos/sip.js | 921 | handle.doVideo = doVideo; | COMMENT |
| LOW | html/demos/sip.js | 941 | let body = { request: "call", uri: uri }; | COMMENT |
| LOW | html/demos/sip.js | 1221 | // This way you'll tell the plugin to accept the call, but ONLY | COMMENT |
| LOW | html/demos/streaming.js | 421 | if(type === 'data') | COMMENT |
| LOW | html/demos/videoroom.js | 481 | // You can force a specific codec to use when publishing by using the | COMMENT |
| LOW | html/demos/e2e.js | 541 | COMMENT | |
| LOW | html/demos/settings.js | 1 | /* eslint-disable no-unused-vars */ | COMMENT |
| LOW | html/demos/settings.js | 21 | // online demos at http://janus.conf.meetecho.com) you can just use a | COMMENT |
| LOW | html/demos/settings.js | 41 | // you can also pass an array of servers, e.g., to provide alternative | COMMENT |
| LOW | html/demos/settings.js | 61 | // servers we'd like to use to gather additional candidates. This is | COMMENT |
| LOW | html/demos/settings.js | 81 | // By default we leave the iceServers variable empty, which again means | COMMENT |
| LOW | docs/janus-doxygen.cfg | 1 | # Doxyfile 1.8.18 | COMMENT |
| LOW | docs/janus-doxygen.cfg | 21 | # file that follow. The default is UTF-8 which is also the encoding used for all | COMMENT |
| LOW | docs/janus-doxygen.cfg | 41 | PROJECT_NUMBER = 1.4.4 | COMMENT |
| LOW | docs/janus-doxygen.cfg | 61 | OUTPUT_DIRECTORY = | COMMENT |
| LOW | docs/janus-doxygen.cfg | 81 | # The OUTPUT_LANGUAGE tag is used to specify the language in which all | COMMENT |
| LOW | docs/janus-doxygen.cfg | 101 | COMMENT | |
| LOW | docs/janus-doxygen.cfg | 121 | # used to form the text in various listings. Each string in this list, if found | COMMENT |
| LOW | docs/janus-doxygen.cfg | 141 | # operators of the base classes will not be shown. | COMMENT |
| LOW | docs/janus-doxygen.cfg | 161 | # This tag requires that the tag FULL_PATH_NAMES is set to YES. | COMMENT |
| LOW | docs/janus-doxygen.cfg | 181 | # If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the | COMMENT |
| LOW | docs/janus-doxygen.cfg | 201 | # line (until the first dot) of a Qt-style comment as the brief description. If | COMMENT |
| LOW | docs/janus-doxygen.cfg | 221 | # documentation from any documented member that it re-implements. | COMMENT |
| LOW | docs/janus-doxygen.cfg | 241 | # name=value | COMMENT |
| LOW | docs/janus-doxygen.cfg | 261 | COMMENT | |
| LOW | docs/janus-doxygen.cfg | 281 | COMMENT | |
| LOW | docs/janus-doxygen.cfg | 301 | # default for Fortran type files). For instance to make doxygen treat .inc files | COMMENT |
| LOW | docs/janus-doxygen.cfg | 321 | COMMENT | |
| LOW | docs/janus-doxygen.cfg | 341 | # tag to YES in order to let doxygen match functions declarations and | COMMENT |
| LOW | docs/janus-doxygen.cfg | 361 | SIP_SUPPORT = NO | COMMENT |
| LOW | docs/janus-doxygen.cfg | 381 | # If one adds a struct or class to a group and this option is enabled, then also | COMMENT |
| LOW | docs/janus-doxygen.cfg | 401 | # | COMMENT |
| LOW | docs/janus-doxygen.cfg | 421 | # with name TypeT. When disabled the typedef will appear as a member of a file, | COMMENT |
| LOW | docs/janus-doxygen.cfg | 441 | COMMENT | |
| LOW | docs/janus-doxygen.cfg | 481 | # locally in source files will be included in the documentation. If set to NO, | COMMENT |
| LOW | docs/janus-doxygen.cfg | 501 | # The default value is: NO. | COMMENT |
| LOW | docs/janus-doxygen.cfg | 521 | # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend | COMMENT |
| LOW | docs/janus-doxygen.cfg | 541 | COMMENT | |
| LOW | docs/janus-doxygen.cfg | 561 | # The default value is: NO. | COMMENT |
| LOW | docs/janus-doxygen.cfg | 581 | COMMENT | |
| LOW | docs/janus-doxygen.cfg | 601 | # The default value is: NO. | COMMENT |
| LOW | docs/janus-doxygen.cfg | 621 | COMMENT | |
| LOW | docs/janus-doxygen.cfg | 661 | COMMENT | |
| LOW | docs/janus-doxygen.cfg | 681 | # documentation regardless of this setting. | COMMENT |
| LOW | docs/janus-doxygen.cfg | 701 | # page. This will remove the Namespaces entry from the Quick Index and from the | COMMENT |
| LOW | docs/janus-doxygen.cfg | 721 | # optionally specify a file name after the option, if omitted DoxygenLayout.xml | COMMENT |
| LOW | docs/janus-doxygen.cfg | 741 | # Configuration options related to warning and progress messages | COMMENT |
| LOW | docs/janus-doxygen.cfg | 761 | # warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag | COMMENT |
| LOW | docs/janus-doxygen.cfg | 781 | COMMENT | |
| LOW | docs/janus-doxygen.cfg | 821 | ../src/postprocessing | COMMENT |
| LOW | docs/janus-doxygen.cfg | 841 | # *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, | COMMENT |
| LOW | docs/janus-doxygen.cfg | 881 | # certain files from those directories. | COMMENT |
| LOW | docs/janus-doxygen.cfg | 901 | # command). | COMMENT |
| LOW | docs/janus-doxygen.cfg | 921 | # \image command). | COMMENT |
| LOW | docs/janus-doxygen.cfg | 941 | # need to set EXTENSION_MAPPING for the extension otherwise the files are not | COMMENT |
| LOW | docs/janus-doxygen.cfg | 961 | # producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). | COMMENT |
| LOW | docs/janus-doxygen.cfg | 981 | #--------------------------------------------------------------------------- | COMMENT |
| 142 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | docs/janus-doxygen.cfg | 2027 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | docs/janus-doxygen.cfg | 2029 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | docs/janus-doxygen.cfg | 2039 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | docs/janus-doxygen.cfg | 2041 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/janus-doxygen.cfg | 16 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/janus-doxygen.cfg | 18 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/janus-doxygen.cfg | 442 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/janus-doxygen.cfg | 444 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/janus-doxygen.cfg | 740 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/janus-doxygen.cfg | 742 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/janus-doxygen.cfg | 806 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/janus-doxygen.cfg | 808 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/janus-doxygen.cfg | 981 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/janus-doxygen.cfg | 983 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/janus-doxygen.cfg | 1067 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/janus-doxygen.cfg | 1069 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/janus-doxygen.cfg | 1093 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/janus-doxygen.cfg | 1095 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/janus-doxygen.cfg | 1665 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/janus-doxygen.cfg | 1667 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/janus-doxygen.cfg | 1856 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/janus-doxygen.cfg | 1858 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/janus-doxygen.cfg | 1922 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/janus-doxygen.cfg | 1924 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/janus-doxygen.cfg | 1966 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/janus-doxygen.cfg | 1968 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/janus-doxygen.cfg | 2000 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/janus-doxygen.cfg | 2002 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/janus-doxygen.cfg | 2077 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/janus-doxygen.cfg | 2079 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/janus-doxygen.cfg | 2155 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/janus-doxygen.cfg | 2157 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/janus-doxygen.cfg | 2201 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/janus-doxygen.cfg | 2203 | #--------------------------------------------------------------------------- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docs/janus-doxygen.cfg | 305 | # Note: For files without extension you can use no_extension as a placeholder. | COMMENT |
| MEDIUM | docs/janus-doxygen.cfg | 832 | # If the value of the INPUT tag contains directories, you can use the | COMMENT |
| MEDIUM | docs/janus-doxygen.cfg | 879 | # If the value of the INPUT tag contains directories, you can use the | COMMENT |
| MEDIUM | docs/janus-doxygen.cfg | 905 | # If the value of the EXAMPLE_PATH tag contains directories, you can use the | COMMENT |
| LOW | src/sdp-utils.h | 247 | * want to replace them, don't forget to \c g_free the original pointers first. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | html/demos/virtualbg.js | 366 | function handleSegmentationResults(results) { | CODE |
| LOW | html/demos/echotest.js | 648 | function updateSimulcastSvcButtons(substream, temporal) { | CODE |
| LOW | html/demos/janus.js | 1886 | function createPeerconnectionIfNeeded(handleId, callbacks) { | CODE |
| LOW | html/demos/mvideoroom.js | 1043 | function updateSimulcastSvcButtons(feed, substream, temporal) { | CODE |
| LOW | html/demos/admin.js | 657 | function addPluginMessageAttribute() { | CODE |
| LOW | html/demos/admin.js | 789 | function addTransportMessageAttribute() { | CODE |
| LOW | html/demos/videoroom.js | 906 | function updateSimulcastSvcButtons(feed, substream, temporal) { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | html/demos/devices.js | 47 | // Definitely missing in Safari at the moment: https://bugs.webkit.org/show_bug.cgi?id=179415 | COMMENT |
| MEDIUM | docs/janus-doxygen.cfg | 1153 | # it is more robust and this tag (HTML_STYLESHEET) will in the future become | COMMENT |
| MEDIUM | docs/janus-doxygen.cfg | 1163 | # standard style sheet and is therefore more robust against future updates. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/echo.py | 49 | except Exception as e: | CODE |
| LOW | test/echo.py | 83 | except Exception: | CODE |
| LOW | test/echo.py | 318 | except Exception: | CODE |
| MEDIUM | test/echo.py | 53 | def receiveMessage(self): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | test/echo.py | 152 | except asyncio.CancelledError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/plugins/janus_videoroom.c | 4452 | /* we need to check if the room still exists, may have been destroyed already */ | COMMENT |
| LOW | src/plugins/janus_videoroom.c | 4475 | /* We need to check if the room still exists, may have been destroyed already */ | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/echo.py | 172 | CODE | |
| LOW | test/echo.py | 53 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/echo.py | 103 | CODE | |
| LOW | test/echo.py | 118 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | html/demos/recordplay.js | 379 | $('#datafield').attr('placeholder', 'Write a message to record'); | CODE |
| LOW | html/demos/recordplay.js | 398 | $('#datafield').attr('disabled', true).attr('placeholder', '').val(''); | CODE |