[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-3953":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":16,"forks30d":16,"starsTrendScore":19,"compositeScore":20,"rankGlobal":10,"rankLanguage":10,"license":21,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":24,"hasPages":22,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":36,"readmeContent":37,"aiSummary":38,"trendingCount":16,"starSnapshotCount":16,"syncStatus":39,"lastSyncTime":40,"discoverSource":41},3953,"GSYVideoPlayer","CarGuo\u002FGSYVideoPlayer","CarGuo","Video players (IJKplayer, ExoPlayer, MediaPlayer), HTTPS, 16k page size, danmaku (bullet chat) support, external subtitles, support for filters, watermarks, and GIF screenshots, pre-roll and mid-roll ads, multiple simultaneous playback, basic seeking\u002Fdragging, volume and brightness adjustment, play-while-cache support","",null,"Java",21437,4318,432,13,0,5,11,3,45,"Apache License 2.0",false,"master",true,[26,27,28,29,30,31,32,33,34,35],"16k","android","exoplayer","ffmpeg","gsy","ijkplayer","player","ssl","video","videocache","2026-06-12 02:00:56","![](.\u002Fimg\u002Fhome_logo.png)\n\n**[中文文档](README_CN.md)**\n\n## Supports [IJKPlayer](https:\u002F\u002Fgithub.com\u002FCarGuo\u002Fijkplayer), [Media3(EXOPlayer2)](https:\u002F\u002Fgithub.com\u002Fandroidx\u002Fmedia), MediaPlayer, AliPlayer, implementing a multi-functional video player. (Please read the following instructions carefully, most questions can be answered below).\n\n## * HarmonyOS version [openharmony-tpc\u002FGSYVideoPlayer](https:\u002F\u002Fgitcode.com\u002Fopenharmony-tpc\u002Fopenharmony_tpc_samples\u002Ftree\u002Fmaster\u002FGSYVideoPlayer)\n\n> ## If cloning is too slow or images are not visible, you can try to synchronize from the following addresses\n> - **GitCode** https:\u002F\u002Fgitcode.com\u002FZuoYueLiang\u002FGSYVideoPlayer\n> - **Gitee**：https:\u002F\u002Fgitee.com\u002FCarGuo\u002FGSYVideoPlayer\n\n Type          | Function\n-------------|-------------------------------------------------------------------------------------------------------------------------------------------------\n **Cache**      | **Play while caching, using [AndroidVideoCache](https:\u002F\u002Fgithub.com\u002Fdanikula\u002FAndroidVideoCache); Media3(ExoPlayer) uses SimpleCache.**\n **Protocols**      | **h263\\4\\5, Https, concat, rtsp, hls, rtmp, crypto, mpeg, etc. [ (ijk mode format support) ](https:\u002F\u002Fgithub.com\u002FCarGuo\u002FGSYVideoPlayer\u002Fblob\u002Fmaster\u002Fdoc\u002FDECODERS.md)**\n **Filters**      | **Simple filters (mosaic, black and white, color filter, Gaussian, blur, etc. more than 20 kinds), animation, (watermark, multi-screen playback, etc.).**\n **Frame images**      | **Video first frame, video frame screenshots, composed player screenshots including UI, and video to gif function.**\n **Playback**      | **List playback, continuous list playback, gravity rotation and manual rotation, video's own rotation attribute, fast and slow playback, network video loading speed.**\n **Screen**      | **Adjust display ratio: default, 16:9, 4:3, fill; rotate screen angle during playback (0,90,180,270); mirror rotation.**\n **Kernel**      | **IJKPlayer, Media3(EXOPlayer), MediaPlayer, AliPlayer switching, custom kernel**\n **Layout**      | **Full screen and non-full screen two sets of layout switching, pure playback support without any operation controls, barrage function, inherited custom any layout.**\n **Playback**      | **Singleton playback, multiple simultaneous playback, video list sliding automatic playback, seamless playback of list switching detail pages.**\n **Window**      | **Small window, small window playback in multiple windows (including desktop).**\n **Ads**      | **Opening ads, skip ad support, interstitial ad function.**\n **Subtitles**      | **Unified external subtitle overlay supports SRT\u002FWebVTT across IJK, Media3(EXOPlayer), and MediaPlayer; Media3 embedded cues can bridge to the same UI.**\n **Dash**    | **Media3(exo2) mode supports dash; the demo supports HLS master \u002F DASH MPD adaptive quality track switching.**\n **Stream**  | **Supports metadata playback**\n **Adapt 16k**  | **ex_so adapts to 16K Page Size**\n **openssl** | **Currently ex_so's arm64\u002Fx86_64  uses openssl 1.1.1w**\n **FFmpeg**  | **Currently ex_so's arm64\u002Fx86_64 uses FFmpeg 4.3**\n **FFmpeg**  | **Currently ex_so's arm64\u002Fx86_64  supports G711a(pcm_alaw)**\n **More**      | **No black screen when pausing front and back switching; multi-URL quality switching; Exo HLS\u002FDASH adaptive quality; seamless switching support; keep-last-frame demo; WebVTT progress bar preview.**\n **Customization**     | **Customizable rendering layer, custom management layer, custom playback layer (control layer), custom cache layer.**\n\n[![Maven Central Version](https:\u002F\u002Fimg.shields.io\u002Fmaven-central\u002Fv\u002Fio.github.carguo\u002Fgsyvideoplayer)](https:\u002F\u002Fcentral.sonatype.com\u002Fartifact\u002Fio.github.carguo\u002Fgsyvideoplayer)\n[![](https:\u002F\u002Fjitpack.io\u002Fv\u002FCarGuo\u002FGSYVideoPlayer.svg)](https:\u002F\u002Fjitpack.io\u002F#CarGuo\u002FGSYVideoPlayer)\n[![Build Status](https:\u002F\u002Fapp.travis-ci.com\u002FCarGuo\u002FGSYVideoPlayer.svg?branch=master)](https:\u002F\u002Fapp.travis-ci.com\u002FCarGuo\u002FGSYVideoPlayer)\n[![Github Actions](https:\u002F\u002Fgithub.com\u002FCarGuo\u002FGSYVideoPlayer\u002Fworkflows\u002FCI\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002FCarGuo\u002FGSYVideoPlayer\u002Factions)\n\n[]()\n[![GitHub stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002FCarGuo\u002FGSYVideoPlayer.svg)](https:\u002F\u002Fgithub.com\u002FCarGuo\u002FGSYVideoPlayer\u002Fstargazers)\n[![GitHub forks](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fforks\u002FCarGuo\u002FGSYVideoPlayer.svg)](https:\u002F\u002Fgithub.com\u002FCarGuo\u002FGSYVideoPlayer\u002Fnetwork)\n[![GitHub issues](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fissues\u002FCarGuo\u002FGSYVideoPlayer.svg)](https:\u002F\u002Fgithub.com\u002FCarGuo\u002FGSYVideoPlayer\u002Fissues)\n[![GitHub License](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-Apache_2.0-blue.svg)](https:\u002F\u002Fgithub.com\u002FCarGuo\u002FGSYVideoPlayer\u002Fblob\u002Fmaster\u002FLICENSE)\n\n[]()\n[![Star](https:\u002F\u002Fgitcode.com\u002FZuoYueLiang\u002FGSYVideoPlayer\u002Fstar\u002Fbadge.svg)](https:\u002F\u002Fgitcode.com\u002FZuoYueLiang\u002FGSYVideoPlayer\u002Foverview)\n![](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002Fandroidx\u002Fmedia?label=media)\n\n| Official Account | Juejin                                                          | Zhihu                                        | CSDN                                    | Jianshu\n|---------|-------------------------------------------------------------|-------------------------------------------|-----------------------------------------|----------------------------------------------|\n| GSYTech | [Click me](https:\u002F\u002Fjuejin.im\u002Fuser\u002F582aca2ba22b9d006b59ae68\u002Fposts) | [Click me](https:\u002F\u002Fwww.zhihu.com\u002Fpeople\u002Fcarguo) | [Click me](https:\u002F\u002Fblog.csdn.net\u002FZuoYueLiang) | [Click me](https:\u002F\u002Fwww.jianshu.com\u002Fu\u002F6e613846e1ea)\n\n![](http:\u002F\u002Fimg.cdn.guoshuyu.cn\u002FWeChat-Code)\n\n### [--------------Demo APK Download Address---------------](https:\u002F\u002Fgithub.com\u002FCarGuo\u002FGSYVideoPlayer\u002Freleases)\n\n## I. Using Dependencies\n\nThere are currently three hosting methods:\n\n- MavenCentral: Available after version 11.0.0, all base class packages are published and hosted here.\n- Github Package: Available from version 9.1.0, but before version 11.0.0, the basic dependencies of GSYIjkJava are still hosted on jitpack.\n- Jitpack IO: Will continue to be released, but there is a random loss of packages on the hosting platform.\n\n\n#### [--- Version Update Instructions --- ](https:\u002F\u002Fgithub.com\u002FCarGuo\u002FGSYVideoPlayer\u002Fblob\u002Fmaster\u002Fdoc\u002FUPDATE_VERSION.md).\n\n#### [--- Recent Playback Features --- ](https:\u002F\u002Fgithub.com\u002FCarGuo\u002FGSYVideoPlayer\u002Fblob\u002Fmaster\u002Fdoc\u002FRECENT_FEATURES_EN.md).\n\n### 1. MavenCentral Reference (Recommended)\n\nSince jitpack keeps losing packages, it has been migrated to MavenCentral. The usage is as follows:\n\n#### First Add\n\n```groovy\nallprojects {\n    repositories {\n        \u002F\u002F\u002F...\n        mavenCentral()\n        maven { url \"https:\u002F\u002Fmaven.aliyun.com\u002Frepository\u002Fpublic\" }\n    }\n}\n```\n\n**You can choose one of the following three and add it to the build.gradle under the module.**\n\n#### A. Direct Introduction\n\n```groovy\n \u002F\u002FComplete version introduction\n\nimplementation 'io.github.carguo:gsyvideoplayer:12.1.0'\n\n\n\u002F\u002FWhether AliPlayer mode is needed\nimplementation 'io.github.carguo:gsyvideoplayer-aliplay:12.1.0'\n```\n\n#### B. Add java and the so support you want:\n\n```groovy\n implementation 'io.github.carguo:gsyvideoplayer-java:12.1.0'\n\n \u002F\u002FWhether ExoPlayer mode is needed\n implementation 'io.github.carguo:gsyvideoplayer-exo2:12.1.0'\n\n \u002F\u002FWhether AliPlayer mode is needed\n implementation 'io.github.carguo:gsyvideoplayer-aliplay:12.1.0'\n\n \u002F\u002Fso of ijk mode according to your needs\n implementation 'io.github.carguo:gsyvideoplayer-arm64:12.1.0'\n implementation 'io.github.carguo:gsyvideoplayer-armv7a:12.1.0'\n implementation 'io.github.carguo:gsyvideoplayer-armv5:12.1.0'\n implementation 'io.github.carguo:gsyvideoplayer-x86:12.1.0'\n implementation 'io.github.carguo:gsyvideoplayer-x64:12.1.0'\n```\n\n#### C. Support other format protocols (mpeg, rtsp, concat, crypto protocols, support 16k Page Size)\n\nA and B normal versions support 263\u002F264\u002F265, etc. For mpeg encoding, there will be sound but no picture.\nThe so introduced by C supports mpeg encoding and other supplementary protocols, but the so package is relatively larger.\n\n```groovy\n implementation 'io.github.carguo:gsyvideoplayer-java:12.1.0'\n\n \u002F\u002FWhether ExoPlayer mode is needed\n implementation 'io.github.carguo:gsyvideoplayer-exo2:12.1.0'\n\n \u002F\u002FWhether AliPlayer mode is needed\n implementation 'io.github.carguo:gsyvideoplayer-aliplay:12.1.0'\n\n \u002F\u002FMore ijk encoding support\n implementation 'io.github.carguo:gsyvideoplayer-ex_so:12.1.0'\n\n```\n\n### 2. Github Package Dependency Method (Recommended)\n\n**Since Jitpack often has the problem of random loss of historical packages, a new Github Package dependency method is added. The usage is as follows**:\n\n> However, accessing github package requires a token to access, which is more troublesome, but it is stable.\n\n```groovy\nallprojects {\n    repositories {\n\t\t\u002F\u002F...\n        maven {\n            url 'https:\u002F\u002Fmaven.pkg.github.com\u002FCarGuo\u002FGSYVideoPlayer'\n\n            \u002F\u002F You can also use your own GitHub account and token\n            \u002F\u002F For convenience, I have provided a token for an infrequently used account here\n            credentials {\n                \u002F\u002F your github name\n                username = 'carsmallguo'\n                \u002F\u002F your github generate new token\n                password = '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'\n            }\n        }\n        maven {\n            url \"https:\u002F\u002Fmaven.aliyun.com\u002Frepository\u002Fpublic\"\n        }\n        mavenCentral()\n\n    }\n}\n```\n\n- To generate your own token, you can see: https:\u002F\u002Fdocs.github.com\u002Fzh\u002Fauthentication\u002Fkeeping-your-account-and-data-secure\u002Fmanaging-your-personal-access-tokens\n\n> In theory, it is the avatar in the upper right corner - Settings - Developer Settings - Personal access tokens - tokens (classic) -\n> Generate new token (classic) - read:packages\n> Remember to choose permanent for the expiration time\n\n**You can choose one of the following three and add it to the build.gradle under the module.**\n\n#### A. Direct Introduction\n\n```groovy\n \u002F\u002FComplete version introduction\n implementation 'com.shuyu:gsyvideoplayer:12.1.0'\n\n\n \u002F\u002FWhether AliPlayer mode is needed\n implementation 'com.shuyu:gsyvideoplayer-aliplay:12.1.0'\n```\n\n#### B. Add java and the so support you want:\n\n```groovy\n implementation 'com.shuyu:gsyvideoplayer-java:12.1.0'\n\n \u002F\u002FWhether ExoPlayer mode is needed\n implementation 'com.shuyu:gsyvideoplayer-exo2:12.1.0'\n\n \u002F\u002FWhether AliPlayer mode is needed\n implementation 'com.shuyu:gsyvideoplayer-aliplay:12.1.0'\n\n \u002F\u002Fso of ijk mode according to your needs\n implementation 'com.shuyu:gsyvideoplayer-armv5:12.1.0'\n implementation 'com.shuyu:gsyvideoplayer-armv7a:12.1.0'\n implementation 'com.shuyu:gsyvideoplayer-arm64:12.1.0'\n implementation 'com.shuyu:gsyvideoplayer-x86:12.1.0'\n implementation 'com.shuyu:gsyvideoplayer-x64:12.1.0'\n```\n\n#### C. Support other format protocols (mpeg, rtsp, concat, crypto protocols, support 16k Page Size)\n\nA and B normal versions support 263\u002F264\u002F265, etc. For mpeg encoding, there will be sound but no picture.\nThe so introduced by C supports mpeg encoding and other supplementary protocols, but the so package is relatively larger.\n\n```groovy\n implementation 'com.shuyu:gsyvideoplayer-java:12.1.0'\n\n \u002F\u002FWhether ExoPlayer mode is needed\n implementation 'com.shuyu:gsyvideoplayer-exo2:12.1.0'\n\n\n \u002F\u002FWhether AliPlayer mode is needed\n implementation 'com.shuyu:gsyvideoplayer-aliplay:12.1.0'\n\n \u002F\u002FMore ijk encoding support\n implementation 'com.shuyu:gsyvideoplayer-ex_so:12.1.0'\n\n```\n\n### 3. Jitpack Introduction Method (will continue to be released, but not highly recommended)\n\nHistorical packages may have random packet loss, and it is not easy to supplement, see [#4144](https:\u002F\u002Fgithub.com\u002FCarGuo\u002FGSYVideoPlayer\u002Fissues\u002F4144):\n\n#### First, add in the build.gradle under the project\n\n```groovy\nallprojects {\n    repositories {\n\t\t\u002F\u002F...\n        maven { url 'https:\u002F\u002Fjitpack.io' }\n        maven { url \"https:\u002F\u002Fmaven.aliyun.com\u002Frepository\u002Fpublic\" }\n        mavenCentral()\n    }\n}\n```\n\n**You can choose one of the following three and add it to the build.gradle under the module.**\n\n#### A. Direct Introduction\n\n```groovy\n \u002F\u002FComplete version introduction\n\n implementation 'com.github.CarGuo.GSYVideoPlayer:gsyvideoplayer:v12.1.0'\n\n\n \u002F\u002FWhether AliPlayer mode is needed\n implementation 'com.github.CarGuo.GSYVideoPlayer:gsyvideoplayer-aliplay:v12.1.0'\n```\n\n#### B. Add java and the so support you want:\n\n```groovy\n implementation 'com.github.CarGuo.GSYVideoPlayer:gsyvideoplayer-java:v12.1.0'\n\n \u002F\u002FWhether ExoPlayer mode is needed\n implementation 'com.github.CarGuo.GSYVideoPlayer:gsyvideoplayer-exo2:v12.1.0'\n\n \u002F\u002FWhether AliPlayer mode is needed\n implementation 'com.github.CarGuo.GSYVideoPlayer:gsyvideoplayer-aliplay:v12.1.0'\n\n \u002F\u002Fso of ijk mode according to your needs\n implementation 'com.github.CarGuo.GSYVideoPlayer:gsyvideoplayer-arm64:v12.1.0'\n implementation 'com.github.CarGuo.GSYVideoPlayer:gsyvideoplayer-armv7a:v12.1.0'\n implementation 'com.github.CarGuo.GSYVideoPlayer:gsyvideoplayer-armv5:v12.1.0'\n implementation 'com.github.CarGuo.GSYVideoPlayer:gsyvideoplayer-x86:v12.1.0'\n implementation 'com.github.CarGuo.GSYVideoPlayer:gsyvideoplayer-x64:v12.1.0'\n```\n\n#### C. Support other format protocols (mpeg, rtsp, concat, crypto protocols, support 16k Page Size)\n\nA and B normal versions support 263\u002F264\u002F265, etc. For mpeg encoding, there will be sound but no picture.\nThe so introduced by C supports mpeg encoding and other supplementary protocols, but the so package is relatively larger.\n\n```groovy\n implementation 'com.github.CarGuo.GSYVideoPlayer:gsyvideoplayer-java:v12.1.0'\n\n \u002F\u002FWhether ExoPlayer mode is needed\n implementation 'com.github.CarGuo.GSYVideoPlayer:gsyvideoplayer-exo2:v12.1.0'\n\n \u002F\u002FWhether AliPlayer mode is needed\n implementation 'com.github.CarGuo.GSYVideoPlayer:gsyvideoplayer-aliplay:v12.1.0'\n\n \u002F\u002FMore ijk encoding support\n implementation 'com.github.CarGuo.GSYVideoPlayer:gsyvideoplayer-ex_so:v12.1.0'\n\n```\n\n----------------------------------------------------------\n\n#### Global switching support in code (for more, please refer to the documentation and demo below)\n\n```\n\n\u002F\u002FEXOPlayer kernel, supports more formats\nPlayerFactory.setPlayManager(Exo2PlayerManager.class);\n\u002F\u002FSystem kernel mode\nPlayerFactory.setPlayManager(SystemPlayerManager.class);\n\u002F\u002Fijk kernel, default mode\nPlayerFactory.setPlayManager(IjkPlayerManager.class);\n\u002F\u002Faliplay kernel, default mode\nPlayerFactory.setPlayManager(AliPlayerManager.class);\n\n\n\u002F\u002Fexo cache mode, supports m3u8, only supports exo\nCacheFactory.setCacheManager(ExoPlayerCacheManager.class);\n\u002F\u002FProxy cache mode, supports all modes, does not support m3u8, etc., default\nCacheFactory.setCacheManager(ProxyCacheManager.class);\n\n\n\n\u002F\u002FSwitch rendering mode\nGSYVideoType.setShowType(GSYVideoType.SCREEN_MATCH_FULL);\n\u002F\u002FDefault display ratio\nGSYVideoType.SCREEN_TYPE_DEFAULT = 0;\n\u002F\u002F16:9\nGSYVideoType.SCREEN_TYPE_16_9 = 1;\n\u002F\u002F4:3\nGSYVideoType.SCREEN_TYPE_4_3 = 2;\n\u002F\u002FFull screen cropping display, for normal display CoverImageView it is recommended to use FrameLayout as the parent layout\nGSYVideoType.SCREEN_TYPE_FULL = 4;\n\u002F\u002FFull screen stretching display, when using this attribute, it is recommended to use FrameLayout for surface_container\nGSYVideoType.SCREEN_MATCH_FULL = -4;\n\u002F***\n * Custom display ratio under SCREEN_TYPE_CUSTOM\n * @param screenScaleRatio Aspect ratio, such as 16:9\n *\u002F\npublic static void setScreenScaleRatio(float screenScaleRatio)\n\n\n\u002F\u002FSwitch drawing mode\nGSYVideoType.setRenderType(GSYVideoType.SUFRACE);\nGSYVideoType.setRenderType(GSYVideoType.GLSURFACE);\nGSYVideoType.setRenderType(GSYVideoType.TEXTURE);\n\n\n\u002F\u002Fijk close log\nIjkPlayerManager.setLogLevel(IjkMediaPlayer.IJK_LOG_SILENT);\n\n\n\u002F\u002Fexoplayer custom MediaSource\nExoSourceManager.setExoMediaSourceInterceptListener(new ExoMediaSourceInterceptListener() {\n    @Override\n    public MediaSource getMediaSource(String dataSource, boolean preview, boolean cacheEnable, boolean isLooping, File cacheDir) {\n        \u002F\u002FCustomizable MediaSource\n        return null;\n    }\n});\n\n```\n\n### [--- More dependency methods, please click - ](https:\u002F\u002Fgithub.com\u002FCarGuo\u002FGSYVideoPlayer\u002Fblob\u002Fmaster\u002Fdoc\u002FDEPENDENCIES.md)\n\n## II. Other Recommendations\n\n###     * My technical community: [Juejin](https:\u002F\u002Fjuejin.cn\u002Fuser\u002F817692379985752\u002Fposts)\n\n###     * QQ group, welcome if interested (usually a lot of chitchat and complaints, because the number of people is saturated, it's just daily nonsense, no one solves problems): ~~\n\n174815284~~ , New group: 992451658 .\n\n###     * [Flutter Github Client](https:\u002F\u002Fgithub.com\u002FCarGuo\u002Fgsy_github_app_flutter) , [Compose Github Client](https:\u002F\u002Fgithub.com\u002FCarGuo\u002FGSYGithubAppCompose) , [React Native Github Client](https:\u002F\u002Fgithub.com\u002FCarGuo\u002FGSYGithubAPP) , [Weex Github Client](https:\u002F\u002Fgithub.com\u002FCarGuo\u002FGSYGithubAPPWeex) , [Native Kotlin Github Client](https:\u002F\u002Fgithub.com\u002FCarGuo\u002FGSYGithubAPPKotlin)\n\n###     * [RxFFmpeg Android audio and video editing tool](https:\u002F\u002Fgithub.com\u002Fmicroshow\u002FRxFFmpeg)\n\n###     * [oarplayer Rtmp player, based on MediaCodec and srs-librtmp, does not rely on ffmpeg](https:\u002F\u002Fgithub.com\u002Fqingkouwei\u002Foarplayer)\n\n###     * HarmonyOS version [openharmony-tpc\u002FGSYVideoPlayer](https:\u002F\u002Fgitcode.com\u002Fopenharmony-tpc\u002Fopenharmony_tpc_samples\u002Ftree\u002Fmaster\u002FGSYVideoPlayer)\n\n## III. Documentation Wiki\n\n Document            | Portal\n---------------|----------------------------------------------------------------------------------------------------------------------------------------------------\n **Usage Instructions**      | ***[--- Simple usage, quick start documentation](https:\u002F\u002Fgithub.com\u002FCarGuo\u002FGSYVideoPlayer\u002Fblob\u002Fmaster\u002Fdoc\u002FUSE.md)***\n **Recommended Reading**      | ***[--- Basic audio and video knowledge that mobile developers must know 1](https:\u002F\u002Fjuejin.cn\u002Fpost\u002F7057132141875822622), [--- Basic audio and video knowledge that mobile developers must know 2](https:\u002F\u002Fmp.weixin.qq.com\u002Fs\u002FHjSdmAsHuvixCH_EWdvk3Q)***\n **Project Analysis Description**    | ***[--- Project analysis description, including project architecture and analysis](https:\u002F\u002Fgithub.com\u002FCarGuo\u002FGSYVideoPlayer\u002Fblob\u002Fmaster\u002Fdoc\u002FGSYVIDEO_PLAYER_PROJECT_INFO.md)***\n API Documentation Entrance        | **[--- Usage instructions, API documentation - Entrance](https:\u002F\u002Fgithub.com\u002FCarGuo\u002FGSYVideoPlayer\u002Fwiki)**\n **FAQ Entrance**    | ***[--- FAQ - Entrance (most of the problems you encounter are solved here) ](https:\u002F\u002Fgithub.com\u002FCarGuo\u002FGSYVideoPlayer\u002Fblob\u002Fmaster\u002Fdoc\u002FQUESTION.md)***\n Encoding Format          | **[--- IJK so file configuration format description](https:\u002F\u002Fgithub.com\u002FCarGuo\u002FGSYVideoPlayer\u002Fblob\u002Fmaster\u002Fdoc\u002FDECODERS.md)**\n Compile Custom SO       | **[--- IJKPlayer Compile Custom SO - Entrance](https:\u002F\u002Fgithub.com\u002FCarGuo\u002FGSYVideoPlayer\u002Fblob\u002Fmaster\u002Fdoc\u002FBUILD_SO.md)**\n Version Update Instructions        | **[--- Version Update Instructions - Entrance](https:\u002F\u002Fgithub.com\u002FCarGuo\u002FGSYVideoPlayer\u002Fblob\u002Fmaster\u002Fdoc\u002FUPDATE_VERSION.md)**\n compileSdk too high | --- **[#3514](https:\u002F\u002Fgithub.com\u002FCarGuo\u002FGSYVideoPlayer\u002Fissues\u002F3514)**\n\n![Framework diagram](.\u002Fimg\u002FStructureChart2.jpg)\n![Framework diagram2](.\u002Fimg\u002FStructureChart3.jpg)\n![Framework diagram3](.\u002Fimg\u002Fp1.png)\n![Framework diagram4](.\u002Fimg\u002Fp4.png)\n![Framework diagram5](.\u002Fimg\u002Fp2.png)\n\n> More visible: https:\u002F\u002Fcodewiki.google\u002Fgithub.com\u002Fcarguo\u002Fgsyvideoplayer\n\n## IV. Running Effect\n\n* ### 1. Open a playback (rotation, mirror, fill)\n\n\u003Cimg src=\".\u002Fimg\u002F11.gif\" width=\"240px\" height=\"426px\"\u002F>\n\n* ### 2. List\u002FDetail Mode (animation, rotation, small window)\n\n\u003Cdiv>\n\u003Cimg src=\".\u002Fimg\u002F22.gif\" width=\"240px\" height=\"426px\"\u002F>\n\u003Cimg src=\".\u002Fimg\u002F33.gif\" width=\"240px\" height=\"426px\"\u002F>\n\u003Cimg src=\".\u002Fimg\u002F44.gif\" width=\"240px\" height=\"426px\"\u002F>\n\u003C\u002Fdiv>\n\n* ### 3. Barrage\n\n\u003Cimg src=\".\u002Fimg\u002F55.gif\" width=\"240px\" height=\"426px\"\u002F>\n\n* ### 4. Filters and GL animation\n\n\u003Cimg src=\".\u002Fimg\u002F09.gif\"\u002F>\n\n* ### 6. Background filled with blur playback\n\n\u003Cimg src=\".\u002Fimg\u002F99.png\" width=\"426px\" height=\"240px\"\u002F>\n\n* ### 7. Progress bar small window preview\n\n\u003Cimg src=\".\u002Fimg\u002F07.gif\" height=\"240px\"\u002F>\n\nThe demo now uses a WebVTT thumbnail track for seek preview instead of extracting many frames from the original video on the client. The VTT can point to separate images or sprite coordinates:\n\n```text\nWEBVTT\n\n00:00:00.000 --> 00:00:01.000\n160p-00001.jpg#xywh=0,0,284,160\n```\n\nLibrary APIs include `GSYVideoPreviewVttParser`, `GSYVideoPreviewProvider`, and `GSYVideoPreviewFrame`. The app layer loads the frame image and crops the sprite area if needed. See `PreViewGSYVideoPlayer#setPreviewVttUrl(String previewVttUrl)`.\n\n## V. Recent Versions\n\n### v12.1.0 (2026-04-01)\n\n- update media3 1.10.0\n- ex_so: fix ex_so (x86_64) https #4238\n\n### v12.0.0 (2026-03-13)\n\n- ex_so: update ffmpeg 4.3\n- ex_so: x86_64 support 16k page size\n- ex_so: armv7a update ffmpeg n4.3\n- ex_so: #4224 add common-page-size for 64-bit linker flags for Stack Canary\n- fix #4225 ff_hevc_sao_band_filter_neon_8+100)\n- #4178 exo player rtmp fix 16k\n- #4226 Fix NPE in Kotlin implementations of ExoMediaSourceInterceptListener\n- #4228 Fix fullscreen player requiring two clicks to resume from paused state\n- Update mediaVersion to 1.9.2\n- fix #4218 support export exo cache\n- Update minSdk to 23 and media version to 1.9\n\n### v11.3.0 (2025-12-05)\n- link #3019\n- fix #4211\n\n\n### v11.2.0 (2025-11-25)\n- fix #4169\n- fix #4174\n- fix #4171\n- add new function with clearVideoSurface [IjkExo2MediaPlayer]\n- fix #4199\n- fix #4204\n\n### v11.1.0 (2025-08-04)\n\n- update media3 1.8.0\n\n### v11.0.0 (2025-07-10)\n\n- Update and migrate underlying dependencies\n- fix #4140\n\n\n### More versions, please check: [Version Update Instructions](https:\u002F\u002Fgithub.com\u002FCarGuo\u002FGSYVideoPlayer\u002Fblob\u002Fmaster\u002Fdoc\u002FUPDATE_VERSION.md)\n\n## VI. About Issues\n\n```\nBefore asking questions, please refer to the documents and instructions above, and reproduce the problem in the Demo.\n\nProblem description:\n\n1. Which page in which Demo.\n2. Problem manifestation and reproduction steps.\n3. Supplementary video stream url and screenshots of the problem.\n4. Supplementary model and Android version of the problem.\n```\n\n## VII. Obfuscation\n\n```\n-keep class com.shuyu.gsyvideoplayer.video.** { *; }\n-dontwarn com.shuyu.gsyvideoplayer.video.**\n-keep class com.shuyu.gsyvideoplayer.video.base.** { *; }\n-dontwarn com.shuyu.gsyvideoplayer.video.base.**\n-keep class com.shuyu.gsyvideoplayer.utils.** { *; }\n-dontwarn com.shuyu.gsyvideoplayer.utils.**\n-keep class com.shuyu.gsyvideoplayer.player.** {*;}\n-dontwarn com.shuyu.gsyvideoplayer.player.**\n-keep class tv.danmaku.ijk.** { *; }\n-dontwarn tv.danmaku.ijk.**\n-keep class androidx.media3.** {*;}\n-keep interface androidx.media3.**\n\n-keep class com.shuyu.alipay.** {*;}\n-keep interface com.shuyu.alipay.**\n\n-keep public class * extends android.view.View{\n    *** get*();\n    void set*(***);\n    public \u003Cinit>(android.content.Context);\n    public \u003Cinit>(android.content.Context, java.lang.Boolean);\n    public \u003Cinit>(android.content.Context, android.util.AttributeSet);\n    public \u003Cinit>(android.content.Context, android.util.AttributeSet, int);\n}\n```\n\nIf it is an Alibaba Cloud player, you can refer to its documentation ( https:\u002F\u002Fhelp.aliyun.com\u002Fdocument_detail\u002F124711.html?spm=a2c4g.124711.0.0.7fa0125dkwUPoU\n), you need to add some keep rules:\n\n```\n-keep class com.alivc.**{*;}\n-keep class com.aliyun.**{*;}\n-keep class com.cicada.**{*;}\n-dontwarn com.alivc.**\n-dontwarn com.aliyun.**\n-dontwarn com.cicada.**\n```\n\n## Warm Reminder\n\n#### [If cloning is too slow, you can try downloading from Gitee](https:\u002F\u002Fgitee.com\u002FCarGuo\u002FGSYVideoPlayer)\n\n```\nRegarding customization and problems, please refer to the FAQ, demo, and issues first.\n\nLearn more about basic audio and video common sense, and understand containers, audio and video encoding, ffmpeg, and the differences in mediacodec.\nTry to avoid asking why others can play.\n\nThe player is highly customizable. For customization, please refer to the demo and read the source code. There are many functions now, and the demo is constantly being updated.\n\nSome new functions and project structures are also constantly being adjusted.\n\nWelcome to ask questions, thank you.\n\n```\n\n## Dependency Size Reference\n\nIt is recommended to use ndk filtering, please refer to [Reference 4: 4. NDK so support](http:\u002F\u002Fwww.jianshu.com\u002Fp\u002F86e4b336c17d)\n![](https:\u002F\u002Fooo.0o0.ooo\u002F2017\u002F06\u002F15\u002F5941f343a39f5.png)\n\n## Star History Chart\n\n[![Star History Chart](https:\u002F\u002Fapi.star-history.com\u002Fsvg?repos=CarGuo\u002FGSYVideoPlayer&type=Date)](https:\u002F\u002Fstar-history.com\u002F#CarGuo\u002FGSYVideoPlayer&Date)\n\n## Warm Reminder\n\nOpen source projects mainly provide communication and learning, do not provide technical support, and do not accept business cooperation, purely public interest open source\n\n## License\n\n```\nPlease refer to the IJKPlayer and AndroidVideoCache related agreements.\nThe project started from jiecao, and was refactored after some changes.\nOccasionally, some variable and method names may still have a shadow of jiaozi, but it is basically a new project.\n```\n","GSYVideoPlayer 是一个支持多种播放器内核（如IJKPlayer、ExoPlayer、MediaPlayer等）的多功能Android视频播放库。它具备播放HTTPS加密视频、16k页面大小适应性、弹幕支持、外部字幕加载、滤镜及水印添加、GIF截图等功能，并且能够实现边缓存边播放。此外，该库还支持前置和中置广告插入、多视频同时播放以及基本的拖拽、音量与亮度调节操作。适用于需要高度定制化视频播放功能的应用场景，比如在线教育平台、视频社交应用或多媒体内容展示网站。",2,"2026-06-11 02:57:24","top_language"]