Skip to content
CAI
Software that uses CAICheck a score

CarGuo/GSYVideoPlayer

40.5

Weak · 24 September 2026

56.5k

lines of production code

Java

with Kotlin

5

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is an Android video player library that provides a unified interface for playback across multiple underlying engines, including IJK, ExoPlayer (Media3), AliPlayer, and RTMP. It supports advanced features such as hardware-accelerated rendering, offline caching, DLNA/UPnP casting, and visual effects like watermarks and pixelation. The library is designed for flexible integration, offering both traditional View-based and modern Jetpack Compose APIs, along with comprehensive utilities for list-based playback, picture-in-picture modes, and subtitle handling.

How it got here

2016 — Media3 migration and demo expansion

14 changes.

The project migrated its core architecture to AndroidX Media3, removing legacy player components and updating build infrastructure. Concurrently, the demo application was significantly expanded to showcase advanced features such as DLNA casting, danmaku support, and complex RecyclerView integration patterns.

2017–2018 — casting, effects, and ExoPlayer integration

12 changes.

This period focused on expanding the player's capabilities by introducing DLNA/UPnP casting infrastructure, GL-based visual effects, and a desktop floating window utility. It also integrated ExoPlayer 2 with advanced features like seamless playlist switching, adaptive bitrate streaming, and comprehensive caching and download support.

2019–2026 — Media3 migration and modern Android support

13 changes.

The project underwent a significant architectural shift by migrating its HTTP data source to AndroidX Media3 and integrating new playback backends, including hardware-accelerated MediaCodec rendering, ExoPlayer with subtitle support, and AliPlayer. Concurrently, the codebase was updated to meet modern Android requirements by supporting 16KB page sizes for 64-bit ABIs and introducing a Jetpack Compose integration module with both native and wrapper modes. These changes were accompanied by the extraction of optional features like DLNA casting into separate modules and the addition of comprehensive instrumentation tests to ensure stability across the new configurations.

Features

Add AliPlayer integration module

Introduces a new video playback backend using the AliPlayer SDK, providing the \AliMediaPlayer\ and \AliPlayerManager\ components to handle video rendering, playback control, and caching within the GSYVideoPlayer framework.

gsyVideoPlayer-aliplay · high confidence

Add ExoPlayer-based video player with external subtitle support

The app now includes a new ExoPlayer-based video playback implementation located in the exosubtitle module. This adds a dedicated player architecture (GSYExoSubTitlePlayer, GSYExoSubTitlePlayerManager, and GSYExoSubTitleVideoView) that supports external subtitle rendering via the Media3 Cue API, allowing subtitles to be displayed without blocking the main video source. The new player also integrates with the existing caching system and provides a demo activity (GSYExoSubTitleDetailPlayer) that demonstrates video export capabilities from the cache to a standard MP4 file with progress tracking.

app/src/main/java/com/example/gsyvideoplayer/exosubtitle · high confidence

Add seamless list-to-detail video switching demo

The app now includes a new demo activity (SwitchListVideoActivity) that demonstrates seamless video playback switching from a list view to a detail view. This feature allows users to tap a video in the list, which transitions to a dedicated detail player (SwitchDetailActivity) while preserving playback state, and supports landscape/portrait orientation changes without screen rotation artifacts. The implementation uses shared element transitions and state cloning to maintain continuity between the list and detail contexts.

app/src/main/java/com/example/gsyvideoplayer/switchplay · high confidence

Added desktop floating window utility library

The app now includes a new utility library in the \floatUtil\ package that enables displaying a floating window (overlay) on the desktop. This implementation handles the necessary permission requests for Android 6.0+ (API 23+) and adapts the window type for Android 8.0+ (API 26+) to ensure compatibility. It provides lifecycle management to automatically show or hide the floating view based on app foreground/background state and includes support for different movement modes (fixed, free, slide) and screen-ratio positioning.

app/src/main/java/com/example/gsyvideoplayer/utils/floatUtil · high confidence

Expanded demo app with new UI layouts and visual assets

The demo application now includes a comprehensive set of new XML layouts and drawable resources to showcase additional video player capabilities. New activity layouts provide UIs for casting (DLNA/UPnP), danmaku (bullet comments), ExoPlayer adaptive tracks, subtitle management, video filtering, ad playback, audio-only playback, and foldable device support. Visual assets have been added, including custom video seek bar thumbs, a dialog button background selector, and a shadow effect drawable, enhancing the demo's interface.

app/src/main/res · high confidence

Expanded demo app with new playback and casting scenarios

The demo application now includes several new activities showcasing advanced video player capabilities. Users can now test audio-only playback in AudioDetailPlayer, automatic video playback triggered by scrolling in a RecyclerView via AutoPlayRecyclerViewActivity, and DLNA/UPnP casting to external devices in CastDemoActivity. Additionally, the app demonstrates pre-roll and mid-roll ad insertion through DetailADPlayer and DetailADPlayer2, provides granular control over video features like GIF creation and screenshots in DetailControlActivity, and supports offline playback with ExoPlayer and proxy caching in the new download activities. Danmaku (bullet comments) support is also demonstrated in DanmkuVideoActivity.

app/src/main/java/com/example/gsyvideoplayer · high confidence

Introduce gsyVideoPlayer-compose module with Native and Wrapper integration modes

The new gsyVideoPlayer-compose module provides two ways to integrate the video player in Jetpack Compose apps. The Native mode offers a low-level, state-driven API via GSYPlayerController, exposing reactive snapshots and event flows for full UI customization, along with built-in gesture controls (seek, volume, brightness) and lifecycle management. The Wrapper mode simplifies integration by wrapping existing Android Views like StandardGSYVideoPlayer in AndroidView composables, preserving all legacy features such as built-in UI, fullscreen, and gestures while automatically handling lifecycle pauses and resource disposal.

gsyVideoPlayer-compose/src · high confidence

Introduce video playback data stream support and player abstraction interfaces

The base module now supports playing video from a data input stream (BufferedInputStream) in addition to URLs, a capability currently limited to the IJK kernel. This is enabled by new model classes (GSYModel, VideoOptionModel) and a refactored player management layer (IPlayerManager, BasePlayerManager) that abstracts player initialization and control. The update also adds an ICacheManager interface for standardized caching logic and an IPlayerInitSuccessListener for initialization callbacks.

gsyVideoPlayer-base/src/main/java · high confidence

New Compose demo app with 24 video playback scenarios

A new Compose-based demo application has been added, featuring a main list activity and 24 host activities that demonstrate various video playback capabilities. These demos cover basic wrapper usage, native player integration, list playback with auto-sequencing, ad insertion, caching and downloading, subtitle support, seamless URL switching, multi-window parallel playback, vertical short-video paging, picture-in-picture floating windows, audio-only playback, local file handling, MediaCodec hardware decoding, custom control themes, and foldable device support. Each demo is designed to align with existing Java implementations, providing Compose-native examples for developers.

app/src/main/java/com/example/gsyvideoplayer/compose · high confidence

New ExoPlayer 2 caching, download, and export capabilities

The gsyVideoPlayer-exo\_player2 module now includes a comprehensive caching and download infrastructure built on Media3. Users can pre-cache video streams, manage background downloads via a DownloadManager, and export cached video content to local files (including copying to the system gallery on Android 10+). The module also introduces an ExoMediaSourceInterceptListener interface for customizing data sources and media sources, and adds support for RTSP playback and raw asset handling.

_gsyVideoPlayer-exo\player2 · high confidence

New ExoPlayer-based demo with seamless playlist switching and adaptive track selection

The Exo demo area now includes a custom ExoPlayer implementation that supports seamless switching between multiple video items in a list (next/previous) and adaptive bitrate switching for HLS and DASH sources. This is demonstrated by the new DetailExoListPlayer activity, which plays a sequence of videos with a unified timeline, and the ExoAdaptiveTrackActivity, which allows users to toggle between HLS master playlists and DASH MPDs and manually select video quality tracks via a dialog. The underlying GSYExo2MediaPlayer and GSYExoPlayerManager handle the concatenation of media sources and track selection overrides, while GSYExoVideoManager coordinates the lifecycle and UI state for these Exo-specific features.

app/src/main/java/com/example/gsyvideoplayer/exo · high confidence

New GL-based video effects and custom renderers

The video player now supports several new visual effects and custom rendering modes via the \effect\ package. Users can apply a watermark overlay (BitmapIconEffect) with configurable position, size, and alpha, as well as a pixelation (mosaic) filter. Additionally, new custom renderers enable a 'double playback' effect (rendering the video twice at different scales), a 'fill' mode for stretching video to cover the background, and a 'perspective' effect that composites a bitmap texture over the video stream.

app/src/main/java/com/example/gsyvideoplayer/effect · high confidence

New MediaCodec rendering components for hardware-accelerated playback

Added four new classes in the \mediacodec\ package to support hardware-accelerated video rendering: \MediaCodecRenderView\ and \MediaCodecTextureView\ provide the underlying view infrastructure for rendering decoded video frames, \MediaCodecVideo\ is a player implementation that utilizes these views for standard hardware decoding, and \SmartMediaCodecVideo\ extends the player with a \SmartMediaCodecEventListener\ to expose lifecycle and error events (such as preparation, info, errors, and completion) for smart fallback scenarios.

app/src/main/java/com/example/gsyvideoplayer/mediacodec · high confidence

New RecyclerView holder implementations for video list demos

Added new holder classes (RecyclerItemBaseHolder, RecyclerItemNormalHolder, RecyclerItemPlayNormalHolder, RecyclerItemViewHolder, RecyclerPageItemViewHolder) in the app module to support video playback within RecyclerView lists. These holders integrate with GSYVideoPlayer components (StandardGSYVideoPlayer, SampleCoverVideo, GSYVideoHelper) to handle video binding, UI state management, fullscreen transitions, and small-window playback modes in the demo application.

app/src/main/java/com/example/gsyvideoplayer/holder · high confidence

New casting infrastructure and AD playback base classes

This change introduces the core framework for DLNA/UPnP casting, adding the \CastCapability\ singleton, \CastProvider\ SPI, and session management classes (\CastSession\, \CastDevice\, \CastState\) to the \cast\ package, alongside a new \AndroidManifest.xml\ declaring network state permissions. It also adds base activity classes \GSYBaseActivityDetail\ and \GSYBaseADActivityDetail\ to standardize video playback in detail views, including specific lifecycle and orientation handling for ad-supported playback scenarios.

gsyVideoPlayer-java · high confidence

New demo UI components and custom rendering support

This update introduces several new view classes for the demo application: a custom input dialog for entering URLs, a floating player view for desktop overlay playback, a scrollable WebView, and dialogs for loading states and switching video types. It also adds support for custom video rendering by introducing CustomRenderView and CustomTextureSurface, which allow developers to plug in their own rendering logic and handle screenshot capture via PixelCopy on Android N and above.

app/src/main/java/com/example/gsyvideoplayer/view · high confidence

New demo adapters for list, recycler, and viewpager video playback

Added several new adapter classes to the demo application to showcase different video list and container patterns. DanamakuAdapter provides a custom renderer for danmaku (bullet comments) with image support. ListMultiNormalAdapter and ListNormalAdapter demonstrate ListView-based lists supporting multiple simultaneous players and standard single-player scrolling respectively. RecyclerBaseAdapter, RecyclerNormalAdapter, ViewPagerAdapter, and ViewPagerDemoAdapter provide RecyclerView-based implementations for standard lists and ViewPager2 layouts, including mixed-content view types in the demo adapter.

app/src/main/java/com/example/gsyvideoplayer/adapter · high confidence

New demo player variants for audio, casting, danmaku, and multi-instance playback

The demo app now includes several new player implementations to showcase advanced capabilities. AudioSampleVideo provides a layout optimized for audio-only playback with cover art. CastReceiverPlayer and SampleCastControlVideo implement DLNA/UPnP casting using the jUPnP library, with the receiver player using a separate manager instance to avoid conflicts. DanmakuVideoPlayer integrates danmaku (bullet comments) support with full lifecycle management. MultiSampleVideo enables multiple simultaneous video instances by using unique manager keys. Additional variants include KeepLastFrameVideo to retain the last frame on completion, EmptyControlVideo for a minimal UI, FloatingVideo for picture-in-picture style overlays, CustomRenderVideoPlayer for custom rendering surfaces, PreViewGSYVideoPlayer for WebVTT-based seek previews, and LandLayoutVideo supporting posture-aware fullscreen layouts (book/tabletop modes).

app/src/main/java/com/example/gsyvideoplayer/video · high confidence

New demo utilities and navigation helpers for video player features

This change introduces several new utility classes and navigation helpers within the app's utils package to support expanded demo capabilities. BiliDanmukuParser adds parsing logic for Bilibili-style danmaku (bullet comments), while ScrollCalculatorHelper and SmallVideoHelper provide logic for auto-playing videos in RecyclerViews and managing small-to-fullscreen transitions respectively. CommonUtil is updated to handle Android Q-compatible image saving, and DemoVideoUrls centralizes sample video sources. Additionally, JumpUtils is expanded with new methods to navigate to various demo activities (such as TV playback, empty UI, and adaptive tracks) and migrates Android Support Library imports to AndroidX.

app/src/main/java/com/example/gsyvideoplayer/utils · high confidence

New documentation for dual-channel publishing, architecture, and cast capability planning

Added comprehensive documentation in the \doc/\ directory: \ARCHITECTURE.md\ details the new dual-channel publishing setup (GitHub Packages and Maven Central) and outlines recent playback capabilities like subtitle overlays and GL effects; \CAST\_FEATURE\_PLAN.md\, \CAST\_RECEIVER\_DESIGN.md\, and \CAST\_TEST\_PLAYBOOK.md\ define the architecture, receiver design, and testing strategy for the new optional DLNA/UPnP casting module; \BEAUTY\_FIRST\_CARD\_PLAN.md\ and \BLOOM\_FIRST\_CARD\_PLAN.md\ document the implementation plans for the new beauty and bloom visual effects; and \COMPOSE\_BACKLOG.md\ tracks the progress and gaps of the Compose integration module.

doc · high confidence

New list video adapters for demo app

Added two new adapter classes, SimpleListVideoModeAdapter and SimpleListVideoMode2Adapter, to the demo application. These adapters provide distinct implementations for displaying video lists: the first uses a standard player view with lazy loading and mixed URL sources (MP4 and HLS), while the second utilizes a helper-based approach for small video playback within a list item, featuring a play button trigger and centralized URL management via DemoVideoUrls.

app/src/main/java/com/example/gsyvideoplayer/simple/adapter · high confidence

New listener utilities for video callbacks and AppBar state

The app now includes new helper classes in the listener package to simplify integration. SampleListener provides a concrete implementation of VideoAllCallBack with empty method bodies, allowing developers to easily override only the specific video events they need (such as play, pause, fullscreen, or seek actions) without implementing the entire interface. Additionally, AppBarStateChangeListener offers a reusable abstract class to monitor and react to AppBarLayout state changes (expanded, collapsed, or idle), facilitating smoother UI transitions when the video player is embedded in scrollable layouts.

app/src/main/java/com/example/gsyvideoplayer/listener · high confidence

New simple demo activities for video playback scenarios

The demo app now includes a set of new activities under the 'simple' package to showcase different video playback patterns. SimpleActivity serves as the entry point, launching four distinct demo modes: SimplePlayer for a standalone player, SimpleListVideoActivityMode1 for a standard list view where videos are released when scrolled out of view, SimpleListVideoActivityMode2 for a list view featuring a picture-in-picture small window mode, and two detail view modes (SimpleDetailActivityMode1 and Mode2) demonstrating different fullscreen and orientation handling strategies, including support for non-rotating fullscreen on modern devices.

app/src/main/java/com/example/gsyvideoplayer/simple · high confidence

Repository initialization with documentation, build tooling, and publishing infrastructure

The repository is initialized with comprehensive documentation (README, issue templates), standard build tooling (Gradle wrapper, .editorconfig, .gitignore), and a new Maven Central publishing pipeline. This includes a GitHub Actions workflow, Gradle configuration scripts, and PowerShell/Shell helper scripts to automate artifact signing and distribution, alongside a new optional Jetpack Compose module for modern UI integration.

(repo-wide) · high confidence

Support for multiple concurrent video players and isolated cast receiver management

The video manager layer now supports playing multiple videos simultaneously by introducing a key-based singleton map in CustomManager, allowing distinct player instances to be managed independently rather than sharing a single global state. Additionally, a new CastReceiverManager has been added to provide a dedicated, isolated player instance for DLNA/UPnP cast receivers, preventing conflicts with the sender-side global manager and ensuring stable playback on cast devices.

app/src/main/java/com/example/gsyvideoplayer/video/manager · high confidence

Removals

Removal of legacy orientation and utility helper classes

The \CommonUtil\ and \OrientationUtils\ classes have been removed from the \gsyvideoplayer.utils\ package. This eliminates the previous manual orientation handling logic (including the \OrientationEventListener\ and screen-rotation state management) and the \stringForTime\ formatting utility, indicating a shift in how the player manages screen orientation and time display internally.

gsyVideoPlayer/src/main/java/com/shuyu/gsyvideoplayer/utils · high confidence

Removal of legacy video player components and interfaces

The legacy \GSYVideoPlayer\ class, its associated manager (\GSYVideoManager\), custom texture view (\GSYTextureView\), and callback interfaces (\VideoAllCallBack\, \StandardVideoAllCallBack\) have been removed from the library. This deletion eliminates the old player implementation and its specific UI/callback contracts, requiring users to migrate to the current player architecture to maintain video playback functionality.

gsyVideoPlayer/src/main/java/com/shuyu/gsyvideoplayer · high confidence

Behavioural changes

Added NDK r10e compatibility patches for 16K page size support

This location provides a set of patches and a README for users who need to build the project using the older NDK r10e while supporting 16K page size devices. The changes include linker flag updates (-Wl,-z,max-page-size=65536) in Android.mk files for libyuv, SoundTouch, and FFmpeg components, modifications to build scripts (compile-ijk.sh, do-compile-ffmpeg.sh, do-compile-openssl.sh) to enforce specific architectures and page sizes, and an expanded list of supported NDK versions in the environment detection script.

16kpatch/old · high confidence

Added ProGuard consumer rules for the gsyVideoPlayer-compose module

The gsyVideoPlayer-compose module now includes a consumer-rules.pro file to ensure compatibility with R8 and ProGuard optimization. This file preserves the public API classes and method signatures for the native mode entry points (GSYComposeHostPlayer, GSYPlayerController, etc.), the wrapper mode components, and the lifecycle bridge, preventing them from being renamed or removed during minification. It also ensures that the sealed hierarchy for GSYPlayerEvent is retained so that downstream pattern matching remains functional.

gsyVideoPlayer-compose · high confidence

DLNA casting is now an optional module

The DLNA/UPnP casting capability has been extracted into a separate \gsyVideoPlayer-cast\ module, making it an optional dependency rather than part of the core player. This change introduces a new \JupnpDlnaProvider\ and \JupnpDlnaSession\ implementation based on the jUPnP library, handling device discovery, media session control, and DIDL metadata generation. To support this optional feature, the module includes its own \AndroidManifest.xml\ with necessary network permissions and a \consumer-rules.pro\ file to ensure the jUPnP reflection-based code is preserved during release builds.

gsyVideoPlayer-cast · high confidence

Migrate HTTP data source to Media3

The HTTP data source implementation has been migrated from the legacy ExoPlayer 2 library to AndroidX Media3. This change replaces the previous data source classes with new Media3-compatible implementations (GSYDefaultHttpDataSource and GSYExoHttpDataSourceFactory), ensuring compatibility with the updated media framework while maintaining existing configuration options for timeouts and redirects.

app/src/main/java/com/example/gsyvideoplayer/exosource · high confidence

Proxy cache module restructured with SSL support and memory cache

The proxy cache implementation in this module has been reorganized, introducing a new \ByteArrayCache\ and \ByteArraySource\ for in-memory caching capabilities. The \Config\ class now explicitly supports \HostnameVerifier\ and \TrustManager\ parameters, enabling the proxy to handle SSL certificate errors and custom trust stores when connecting to HTTPS sources. Additionally, the core proxy logic in \HttpProxyCache\ and \HttpUrlSource\ has been updated to utilize these SSL configurations, allowing for more flexible handling of secure connections and self-signed certificates.

_gsyVideoPlayer-proxy\cache/src/main/java · high confidence

RTMP module now supports 16 KB page-aligned native binaries

The RTMP client library has been rebuilt with explicit 16 KB alignment flags (\max-page-size=16384\ and \common-page-size=16384\) to ensure compatibility with Android 17's 16 KB page-size requirement. This change updates the native \librtmp-jni.so\ binaries across all four ABIs (\arm64-v8a\, \x86\_64\, \armeabi-v7a\, \x86\) and includes a C correctness patch to the FLV muxer. The module is now a first-class Android Library Module (\gsyVideoPlayer-rtmp\) with its own manifest, consumer rules, and publishing pipeline, ensuring stable JNI resolution and proper security hardening (BIND\_NOW, stack canaries, 16 KB aligned RELRO).

_gsyVideoPlayer-rtmp, third\party · high confidence

Refined R8 ProGuard rules and added lint configuration for Media3

The app now uses a new, optimized ProGuard configuration that narrows keep rules to specific reflection points (such as GSYVideoPlayer and IjkPlayer) rather than broad package exclusions, reducing APK size while preventing crashes. Additionally, a lint.xml file has been added to suppress UnsafeOptInUsageError warnings for the androidx.media3 UnstableApi, supporting the migration to Media3.

app · high confidence

Support 16KB page size for 64-bit ABIs and expand build targets

This update enables 16KB page size alignment for 64-bit architectures (arm64-v8a and x86\_64) to meet modern Android requirements, while maintaining 4KB alignment for 32-bit (armeabi-v7a). The build system now supports compiling for x86\_64 and armeabi-v7a in addition to arm64, with specific fixes for x86\_64 HTTPS support and runtime crashes on FFmpeg n4.3. Compatibility wrappers for the NDK r22 toolchain on Apple Silicon are also included.

16kpatch · high confidence

Test coverage

Added instrumentation tests for 16 KB page-size RTMP compatibility

Added an instrumented test suite for the RTMP module to guard against regressions on devices with 16 KB memory pages. The new tests verify that the Media3 RTMP data source can successfully read media data from a configured server and that the underlying JNI library loads and fails gracefully when no local server is present, ensuring stability on 16 KB page-size architectures.

app/src/androidTest · high confidence

Dependencies

Project restructured with centralized dependency management and new optional modules

The build system has been completely reorganized to use a centralized dependency definition file (gradle/dependencies.gradle) and a modular architecture. This change introduces new optional modules for DLNA/UPnP casting (gsyVideoPlayer-cast), Jetpack Compose integration (gsyVideoPlayer-compose), and 16 KB-compatible RTMP support (gsyVideoPlayer-rtmp). It also upgrades the core AndroidX Media3 library to version 1.10.1, updates the Android Gradle Plugin to 8.6.1, and raises the minimum SDK for the demo app and cast module to API 26 to support modern casting dependencies.

(dependencies) · high confidence

Upgrade Gradle wrapper to version 8.12

The Gradle wrapper has been updated to use Gradle 8.12 (bin distribution). This ensures that builds are executed with the specified Gradle version, providing consistency across development and CI environments and leveraging improvements or compatibility fixes included in this release.

gradle · high confidence

Housekeeping

Added structure chart log for image assets

A new file, img/StructureChart.log, has been added to the repository. This file contains a text-based diagram illustrating the internal architecture of the media player library, detailing the relationships between the playback kernel layer (IjkMediaPlayer, ExoPlayer2, MediaPlayer), the local cache layer, the render layer (TextureView, SurfaceView, GLSurfaceView), and the UI control layer (GSYVideoView, GSYVideoControlView). This serves as a visual reference for the component hierarchy and data flow within the project.

img · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 35 → 41 (+5.4)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 77 → 86 (+8.6)
  • Architecture 99 → 99 (-0.1)
  • Maturity 56 → 58 (+1.6)
  • Readiness 47 → 42 (-4.9)
  • Security 10 → 22 (+12.3)

Resolved (146)

  • 3.onPrepared (cognitive 43) (app/src/main/java/com/example/gsyvideoplayer/DetailPlayer.java)
  • 5.onPrepared (cognitive 16) (app/src/main/java/com/example/gsyvideoplayer/exosubtitle/GSYExoSubTitleDetailPlayer.java)
  • 7.onClick (cognitive 22) (app/src/main/java/com/example/gsyvideoplayer/DetailPlayer.java)
  • 8.onClick (cognitive 17) (app/src/main/java/com/example/gsyvideoplayer/DetailPlayer.java)
  • Change coupling: GSYRenderView.java ↔ GSYVideoGLViewSimpleRender.java (gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/render/GSYRenderView.java)
  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • Duplicated block (10 lines × 2) (app/src/main/java/com/example/gsyvideoplayer/DetailControlActivity.java)
  • Duplicated block (10 lines × 2) (app/src/main/java/com/example/gsyvideoplayer/exo/GSYExo2MediaPlayer.java)
  • Duplicated block (10 lines × 2) (app/src/main/java/com/example/gsyvideoplayer/video/SampleControlVideo.java)
  • Duplicated block (10 lines × 2) (app/src/main/java/com/example/gsyvideoplayer/view/CustomTextureSurface.java)
  • Duplicated block (10 lines × 2) (gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/video/StandardGSYVideoPlayer.java)
  • Duplicated block (10 lines × 3) (app/src/main/java/com/example/gsyvideoplayer/adapter/ListMultiNormalAdapter.java)
  • Duplicated block (10 lines × 3) (app/src/main/java/com/example/gsyvideoplayer/adapter/ListMultiNormalAdapter.java)
  • Duplicated block (10 lines × 3) (app/src/main/java/com/example/gsyvideoplayer/exo/GSYExo2PlayerView.java)
  • Duplicated block (10 lines × 5) (app/src/main/java/com/example/gsyvideoplayer/simple/SimpleDetailActivityMode1.java)
  • Duplicated block (11 lines × 2) (app/src/main/java/com/example/gsyvideoplayer/AutoPlayRecyclerViewActivity.java)
  • Duplicated block (11 lines × 2) (app/src/main/java/com/example/gsyvideoplayer/adapter/ListVideoAdapter.java)
  • Duplicated block (11 lines × 2) (app/src/main/java/com/example/gsyvideoplayer/exosubtitle/GSYExoSubTitleDetailPlayer.java)
  • Duplicated block (11 lines × 2) (app/src/main/java/com/example/gsyvideoplayer/exosubtitle/GSYExoSubTitleDetailPlayer.java)
  • …and 126 more

New (268)

  • ClassTooLong: GSYBaseVideoPlayer (gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/video/base/GSYBaseVideoPlayer.java)
  • ClassTooLong: GSYVideoBaseManager (gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/GSYVideoBaseManager.java)
  • ClassTooLong: GSYVideoControlView (gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/video/base/GSYVideoControlView.java)
  • ClassTooLong: GSYVideoView (gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/video/base/GSYVideoView.java)
  • ClassTooLong: StandardGSYVideoPlayer (gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/video/StandardGSYVideoPlayer.java)
  • Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no installation or build instructions (README_DEPENDENCY_GUIDE.md)
  • Duplicated block (10 lines × 2) (app/src/main/java/com/example/gsyvideoplayer/DetailListPlayer.java)
  • Duplicated block (10 lines × 2) (app/src/main/java/com/example/gsyvideoplayer/effect/GSYVideoGLViewCustomRender.java)
  • Duplicated block (10 lines × 2) (app/src/main/java/com/example/gsyvideoplayer/exo/GSYExo2PlayerView.java)
  • Duplicated block (10 lines × 2) (app/src/main/java/com/example/gsyvideoplayer/mediacodec/MediaCodecTextureView.java)
  • Duplicated block (10 lines × 2) (app/src/main/java/com/example/gsyvideoplayer/view/CustomTextureSurface.java)
  • Duplicated block (10 lines × 2) (gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/utils/OrientationUtils.java)
  • Duplicated block (10 lines × 3) (app/src/main/java/com/example/gsyvideoplayer/DetailControlActivity.java)
  • Duplicated block (10 lines × 3) (app/src/main/java/com/example/gsyvideoplayer/PlayActivity.java)
  • Duplicated block (10 lines × 3) (app/src/main/java/com/example/gsyvideoplayer/exo/GSYExo2PlayerView.java)
  • Duplicated block (10 lines × 3) (app/src/main/java/com/example/gsyvideoplayer/exo/GSYExo2PlayerView.java)
  • Duplicated block (10 lines × 4) (app/src/main/java/com/example/gsyvideoplayer/RecyclerView2Activity.java)
  • Duplicated block (10 lines × 4) (app/src/main/java/com/example/gsyvideoplayer/video/KeepLastFrameVideo.java)
  • …and 248 more

Changes since last survey

  • 17 commits — 15 feature/other, 2 fixes

By area

  • app/src — 4 commits
  • app/test_evidence — 4 commits
  • (root) — 3 commits
  • gsyVideoPlayer-java/src — 2 commits
  • app/proguard-rules.pro — 1 commit
  • doc/R8_ANALYZER_REPORT.md — 1 commit
  • gsyVideoPlayer-cast/src — 1 commit
  • gsyVideoPlayer-rtmp/src — 1 commit

Notable commits

  • fix: fix(fold): enable fullscreen entry on click for XML and Compose demos
  • fix: fix(fold): refresh layout on configuration change, verified across postures
  • change: Change Star History Chart link in README
  • change: Release v13.2.0 with 16 KB-compatible RTMP module
  • change: build(r8): minimize keep rules to reflection surface only
  • change: build: upgrade Gradle wrapper to 8.12 and pin R8 to 9.4.14
  • change: chore: ignore and untrack app/test_evidence local test scratch
  • change: docs(skills): add GSYVideoPlayer skill pack (13 skills) and R8 analyzer report
  • change: docs: list optional cast dependency in direct setup
  • change: feat(fold): add XML and Compose foldable demos (BOOK/TABLETOP split)
  • change: feat(fold): injectable posture for full state-matrix verification
  • change: feat(fold): posture-aware fullscreen split for XML demo
  • change: feat(gl): FBO 多 pass 管线、降采样金字塔与 Bloom 辉光
  • change: feat(gl): Glitch 故障风 / CRT 扫描线与 uTime 动画支持
  • change: feat(gl): LUT 电影级调色 LookupEffect 与纹理资产管线
  • change: feat(gl): 美颜保边磨皮 BeautyEffect 与暖色美白
  • change: feat: publish DLNA cast as optional module

Architecture

  • Containers 0 added · 0 removed · contexts 5 added · 2 removed · edges 6 added · 0 removed

Added bounded contexts (5)

  • app
  • gsyVideoPlayer-compose
  • gsyVideoPlayer-exo_player2
  • gsyVideoPlayer-java
  • gsyVideoPlayer-proxy_cache

Removed bounded contexts (2)

  • .
  • gsyVideoPlayer

Added dependency edges (6)

  • app → gsyVideoPlayer-compose
  • app → gsyVideoPlayer-exo_player2
  • app → gsyVideoPlayer-java
  • app → gsyVideoPlayer-proxy_cache
  • gsyVideoPlayer-compose → gsyVideoPlayer-java
  • gsyVideoPlayer-java → gsyVideoPlayer-proxy_cache

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

CarGuo/GSYVideoPlayer was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 24 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 2afd95b7e29396d374fd91e02a96fa46facb5a52 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-ae95d6cad036.