{"adoption": {"forks": 158, "observed_at": "2026-08-28T04:05:02.900561+00:00", "stars": 1553}, "canonical_url": "https://ross.abutalabs.com/products/videocalling", "card": {"archived": false, "artifact_type": "application", "description": "局域网p2p视频聊天", "domain": ["android-tools", "media"], "enriched": true, "function": ["video-processing", "audio-processing", "networking", "p2p"], "health_score": 20, "homepage": null, "language": "Java", "license": "NOASSERTION", "license_family": "other", "maturity": "maintenance", "member_repos": ["xmtggh/VideoCalling"], "name": "xmtggh/VideoCalling", "platform": [], "pushed_at": "2019-08-26T02:13:50+00:00", "repo": "xmtggh/VideoCalling", "stars": 1553, "tags": ["video-calling", "h264", "mediacodec", "ffmpeg", "netty", "x264", "opengl", "speex", "lan", "demo", "real-time", "android"], "topics": ["ffmpeg", "android", "camera", "x264", "netty", "mediacodec", "p2p", "opengl"], "urls": [], "use_cases": ["make p2p video calls over LAN on Android", "learn how to build an Android video chat app", "stream H.264 video between two Android devices", "compare hardware vs software video encoding and decoding", "implement audio noise reduction with speex in a call app", "study Netty-based real-time media transport"], "what_it_is": "An Android demo app for peer-to-peer audio and video calling over a local network, connecting directly via IP address and port. It demonstrates H.264 encoding/decoding using both hardware (MediaCodec) and software (x264/FFmpeg) pipelines with Netty-based transport and OpenGL rendering.", "when_to_avoid": ["you need calls over the internet or NAT traversal", "you need a production-ready, maintained solution", "you require a permissive license for commercial use"], "when_to_choose": ["you need LAN-only video calling without a server", "you want a learning reference for Android audio/video codecs and networking", "you need both hardware and software codec examples"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/videocalling", "repo": "xmtggh/VideoCalling", "role": "main", "score": 32}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:02.900561+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:30:11.169559+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b9c2eab5c9737ed46fa7e765b72baf282e9ebda60feed47be5f175778a6970fd", "fetched_at": "2026-08-28T04:05:02.900561+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xmtggh/VideoCalling"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:02.900561+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:30:11.169559+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b9c2eab5c9737ed46fa7e765b72baf282e9ebda60feed47be5f175778a6970fd", "fetched_at": "2026-08-28T04:05:02.900561+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xmtggh/VideoCalling"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:30:11.169559+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b9c2eab5c9737ed46fa7e765b72baf282e9ebda60feed47be5f175778a6970fd", "fetched_at": "2026-08-28T04:05:02.900561+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xmtggh/VideoCalling"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:05:02.900561+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:02.900561+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:02.900561+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:30:11.169559+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b9c2eab5c9737ed46fa7e765b72baf282e9ebda60feed47be5f175778a6970fd", "fetched_at": "2026-08-28T04:05:02.900561+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xmtggh/VideoCalling"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:02.900561+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:02.900561+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:30:11.169559+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b9c2eab5c9737ed46fa7e765b72baf282e9ebda60feed47be5f175778a6970fd", "fetched_at": "2026-08-28T04:05:02.900561+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xmtggh/VideoCalling"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:02.900561+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:02.900561+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:02.900561+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:30:11.169559+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b9c2eab5c9737ed46fa7e765b72baf282e9ebda60feed47be5f175778a6970fd", "fetched_at": "2026-08-28T04:05:02.900561+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xmtggh/VideoCalling"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:02.900561+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:02.900561+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:30:11.169559+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b9c2eab5c9737ed46fa7e765b72baf282e9ebda60feed47be5f175778a6970fd", "fetched_at": "2026-08-28T04:05:02.900561+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xmtggh/VideoCalling"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:30:11.169559+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b9c2eab5c9737ed46fa7e765b72baf282e9ebda60feed47be5f175778a6970fd", "fetched_at": "2026-08-28T04:05:02.900561+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xmtggh/VideoCalling"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:30:11.169559+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b9c2eab5c9737ed46fa7e765b72baf282e9ebda60feed47be5f175778a6970fd", "fetched_at": "2026-08-28T04:05:02.900561+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xmtggh/VideoCalling"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:30:11.169559+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b9c2eab5c9737ed46fa7e765b72baf282e9ebda60feed47be5f175778a6970fd", "fetched_at": "2026-08-28T04:05:02.900561+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xmtggh/VideoCalling"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases", "no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3185, "days_push": 2565, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 32, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}