{"adoption": {"forks": 304, "observed_at": "2026-08-28T04:05:28.279277+00:00", "stars": 1727}, "canonical_url": "https://ross.abutalabs.com/products/yjplay", "card": {"archived": false, "artifact_type": "library", "description": "一个支持自定义UI布局,流式API, 加密,直播  ,亮度,音量,快进等手势 ,广告视频预览,多种加载模式 ,多种分辨率切换 ,多种封面图, 自定义数据源,列表播放,倍数播放,边播变缓存<font color=\"red\">不是使用AndroidVideoCache</font>,离线播放,神奇的播放器  ", "domain": ["android-tools", "media", "mobile-development", "cross-platform"], "enriched": true, "function": ["video-processing", "ui-components", "gui"], "health_score": 20, "homepage": null, "language": "C", "license": "Apache-2.0", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["yangchaojiang/yjPlay"], "name": "yangchaojiang/yjPlay", "platform": [], "pushed_at": "2020-08-24T04:29:43+00:00", "repo": "yangchaojiang/yjPlay", "stars": 1727, "tags": ["exoplayer", "video-player", "android-library", "gesture-controls", "list-playback", "offline-download", "ad-preview", "live-streaming", "chinese", "android", "mobile"], "topics": ["exoplayer", "video-player", "fullscreen", "video", "listvideo", "textureview", "surfaceview"], "urls": [], "use_cases": ["play videos in an android app with a customizable player ui", "implement video playback in a recyclerview list with seamless detail transition", "add gesture controls for brightness volume and seeking to a video player", "show ad video previews before main video content", "cache and encrypt videos while streaming for offline playback", "switch between multiple video resolutions during playback", "play live streams and hls dash videos on android", "adjust playback speed with fast and slow motion support"], "what_it_is": "yjPlay (JPlayer) is an Android video player library built on top of ExoPlayer, offering customizable UI layouts, gesture controls for brightness/volume/seeking, ad video preview, multi-resolution switching, and list playback with smooth transitions. It supports streaming API calls, encrypted cache-while-playing (without AndroidVideoCache), offline downloads, live streaming, and multiple media formats and protocols including HTTP, RTMP, HTTPS, and Cronet.", "when_to_avoid": ["you need a player for ios or cross-platform frameworks like flutter or react-native", "you require actively maintained dependencies since the latest release dates to 2020", "you only need simple playback and prefer the official exoplayer/media3 directly without extra abstraction"], "when_to_choose": ["you need a highly customizable exoplayer-based player for android with list playback and ad preview support", "you want built-in offline download, encrypted caching, and multi-resolution switching out of the box", "you need tv adaptation and both landscape and portrait fullscreen modes"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/yjplay", "repo": "yangchaojiang/yjPlay", "role": "main", "score": 32}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:28.279277+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:32:30.177963+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f6b6cf3b03c782210936cb50de10a4d5ecc87d84a0e42e180744eee69539335c", "fetched_at": "2026-08-28T04:05:28.279277+00:00", "kind": "readme", "missing": false, "url": "https://github.com/yangchaojiang/yjPlay"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:28.279277+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:32:30.177963+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f6b6cf3b03c782210936cb50de10a4d5ecc87d84a0e42e180744eee69539335c", "fetched_at": "2026-08-28T04:05:28.279277+00:00", "kind": "readme", "missing": false, "url": "https://github.com/yangchaojiang/yjPlay"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:32:30.177963+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f6b6cf3b03c782210936cb50de10a4d5ecc87d84a0e42e180744eee69539335c", "fetched_at": "2026-08-28T04:05:28.279277+00:00", "kind": "readme", "missing": false, "url": "https://github.com/yangchaojiang/yjPlay"}], "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:28.279277+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:28.279277+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:28.279277+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:32:30.177963+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f6b6cf3b03c782210936cb50de10a4d5ecc87d84a0e42e180744eee69539335c", "fetched_at": "2026-08-28T04:05:28.279277+00:00", "kind": "readme", "missing": false, "url": "https://github.com/yangchaojiang/yjPlay"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:28.279277+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:28.279277+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:32:30.177963+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f6b6cf3b03c782210936cb50de10a4d5ecc87d84a0e42e180744eee69539335c", "fetched_at": "2026-08-28T04:05:28.279277+00:00", "kind": "readme", "missing": false, "url": "https://github.com/yangchaojiang/yjPlay"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:28.279277+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:28.279277+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:28.279277+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:32:30.177963+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f6b6cf3b03c782210936cb50de10a4d5ecc87d84a0e42e180744eee69539335c", "fetched_at": "2026-08-28T04:05:28.279277+00:00", "kind": "readme", "missing": false, "url": "https://github.com/yangchaojiang/yjPlay"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:28.279277+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:28.279277+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:32:30.177963+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f6b6cf3b03c782210936cb50de10a4d5ecc87d84a0e42e180744eee69539335c", "fetched_at": "2026-08-28T04:05:28.279277+00:00", "kind": "readme", "missing": false, "url": "https://github.com/yangchaojiang/yjPlay"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:32:30.177963+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f6b6cf3b03c782210936cb50de10a4d5ecc87d84a0e42e180744eee69539335c", "fetched_at": "2026-08-28T04:05:28.279277+00:00", "kind": "readme", "missing": false, "url": "https://github.com/yangchaojiang/yjPlay"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:32:30.177963+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f6b6cf3b03c782210936cb50de10a4d5ecc87d84a0e42e180744eee69539335c", "fetched_at": "2026-08-28T04:05:28.279277+00:00", "kind": "readme", "missing": false, "url": "https://github.com/yangchaojiang/yjPlay"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:32:30.177963+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f6b6cf3b03c782210936cb50de10a4d5ecc87d84a0e42e180744eee69539335c", "fetched_at": "2026-08-28T04:05:28.279277+00:00", "kind": "readme", "missing": false, "url": "https://github.com/yangchaojiang/yjPlay"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3470, "days_push": 2200, "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}}