实例介绍
【实例简介】
DKVideoPlayer:安卓视频播放器。该播放器封装了MediaPlayer、ExoPlayer、IjkPlayer,实现了模仿抖音的功能,包括预加载、列表播放、悬浮播放、广告播放、弹幕、视频水印和视频滤镜。本站提供相关源码下载。DKVideoPlayer是一款适用于Android平台的视频播放器。
【实例截图】
【核心代码】
文件清单
└── DKVideoPlayer-5203b55fcd01207b44e76e14f2730ced7cbdf5ee
├── build.gradle
├── constants.gradle
├── devlin.jks
├── dkplayer-java
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── xyz
│ │ └── doikki
│ │ └── videoplayer
│ │ ├── controller
│ │ │ ├── BaseVideoController.java
│ │ │ ├── ControlWrapper.java
│ │ │ ├── GestureVideoController.java
│ │ │ ├── IControlComponent.java
│ │ │ ├── IGestureComponent.java
│ │ │ ├── IVideoController.java
│ │ │ ├── MediaPlayerControl.java
│ │ │ └── OrientationHelper.java
│ │ ├── player
│ │ │ ├── AbstractPlayer.java
│ │ │ ├── AndroidMediaPlayerFactory.java
│ │ │ ├── AndroidMediaPlayer.java
│ │ │ ├── AudioFocusHelper.java
│ │ │ ├── BaseVideoView.java
│ │ │ ├── PlayerFactory.java
│ │ │ ├── ProgressManager.java
│ │ │ ├── VideoViewConfig.java
│ │ │ ├── VideoView.java
│ │ │ └── VideoViewManager.java
│ │ ├── render
│ │ │ ├── IRenderView.java
│ │ │ ├── MeasureHelper.java
│ │ │ ├── RenderViewFactory.java
│ │ │ ├── TextureRenderViewFactory.java
│ │ │ └── TextureRenderView.java
│ │ └── util
│ │ ├── CutoutUtil.java
│ │ ├── L.java
│ │ └── PlayerUtils.java
│ └── res
│ └── values
│ └── attrs.xml
├── dkplayer-players
│ ├── exo
│ │ ├── build.gradle
│ │ ├── proguard-rules.pro
│ │ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ └── xyz
│ │ └── doikki
│ │ └── videoplayer
│ │ └── exo
│ │ ├── ExoMediaPlayerFactory.java
│ │ ├── ExoMediaPlayer.java
│ │ └── ExoMediaSourceHelper.java
│ └── ijk
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ ├── tv
│ │ │ └── danmaku
│ │ │ └── ijk
│ │ │ └── media
│ │ │ └── player
│ │ │ ├── AbstractMediaPlayer.java
│ │ │ ├── AndroidMediaPlayer.java
│ │ │ ├── annotations
│ │ │ │ ├── AccessedByNative.java
│ │ │ │ └── CalledByNative.java
│ │ │ ├── exceptions
│ │ │ │ └── IjkMediaException.java
│ │ │ ├── ffmpeg
│ │ │ │ └── FFmpegApi.java
│ │ │ ├── IjkLibLoader.java
│ │ │ ├── IjkMediaCodecInfo.java
│ │ │ ├── IjkMediaMeta.java
│ │ │ ├── IjkMediaPlayer.java
│ │ │ ├── IjkTimedText.java
│ │ │ ├── IMediaPlayer.java
│ │ │ ├── ISurfaceTextureHolder.java
│ │ │ ├── ISurfaceTextureHost.java
│ │ │ ├── MediaInfo.java
│ │ │ ├── MediaPlayerProxy.java
│ │ │ ├── misc
│ │ │ │ ├── AndroidMediaFormat.java
│ │ │ │ ├── AndroidTrackInfo.java
│ │ │ │ ├── IAndroidIO.java
│ │ │ │ ├── IjkMediaFormat.java
│ │ │ │ ├── IjkTrackInfo.java
│ │ │ │ ├── IMediaDataSource.java
│ │ │ │ ├── IMediaFormat.java
│ │ │ │ └── ITrackInfo.java
│ │ │ ├── pragma
│ │ │ │ ├── DebugLog.java
│ │ │ │ └── Pragma.java
│ │ │ └── TextureMediaPlayer.java
│ │ └── xyz
│ │ └── doikki
│ │ └── videoplayer
│ │ └── ijk
│ │ ├── IjkPlayerFactory.java
│ │ ├── IjkPlayer.java
│ │ └── RawDataSourceProvider.java
│ └── jniLibs
│ ├── arm64-v8a
│ │ ├── libijkffmpeg.so
│ │ ├── libijkplayer.so
│ │ └── libijksdl.so
│ ├── armeabi
│ │ ├── libijkffmpeg.so
│ │ ├── libijkplayer.so
│ │ └── libijksdl.so
│ ├── armeabi-v7a
│ │ ├── libijkffmpeg.so
│ │ ├── libijkplayer.so
│ │ └── libijksdl.so
│ ├── x86
│ │ ├── libijkffmpeg.so
│ │ ├── libijkplayer.so
│ │ └── libijksdl.so
│ └── x86_64
│ ├── libijkffmpeg.so
│ ├── libijkplayer.so
│ └── libijksdl.so
├── dkplayer-sample
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── assets
│ │ ├── bitmap_overlay_video_processor_fragment.glsl
│ │ ├── bitmap_overlay_video_processor_vertex.glsl
│ │ ├── test.mp4
│ │ └── tiktok_data
│ ├── ic_launcher-web.png
│ ├── java
│ │ └── xyz
│ │ └── doikki
│ │ └── dkplayer
│ │ ├── activity
│ │ │ ├── api
│ │ │ │ ├── ParallelPlayActivity.java
│ │ │ │ ├── PlayerActivityJava.java
│ │ │ │ ├── PlayerActivity.kt
│ │ │ │ └── PlayRawAssetsActivity.java
│ │ │ ├── BaseActivity.java
│ │ │ ├── CpuInfoActivity.java
│ │ │ ├── extend
│ │ │ │ ├── ADActivity.java
│ │ │ │ ├── CacheActivity.java
│ │ │ │ ├── CustomExoPlayerActivity.java
│ │ │ │ ├── CustomIjkPlayerActivity.java
│ │ │ │ ├── DanmakuActivity.java
│ │ │ │ ├── DefinitionPlayerActivity.java
│ │ │ │ ├── FullScreenActivity.java
│ │ │ │ ├── PadActivity.java
│ │ │ │ └── PlayListActivity.java
│ │ │ ├── list
│ │ │ │ ├── DetailActivity.java
│ │ │ │ └── tiktok
│ │ │ │ ├── OnViewPagerListener.java
│ │ │ │ ├── TikTok2Activity.java
│ │ │ │ ├── TikTok3Activity.java
│ │ │ │ ├── TikTokActivity.java
│ │ │ │ └── ViewPagerLayoutManager.java
│ │ │ ├── MainActivity.kt
│ │ │ └── pip
│ │ │ ├── AndroidOPiPActivity.java
│ │ │ ├── PIPActivity.java
│ │ │ ├── PIPListActivity.java
│ │ │ └── TinyScreenActivity.java
│ │ ├── adapter
│ │ │ ├── listener
│ │ │ │ ├── OnItemChildClickListener.java
│ │ │ │ └── OnItemClickListener.java
│ │ │ ├── ListPagerAdapter.java
│ │ │ ├── Tiktok2Adapter.java
│ │ │ ├── Tiktok3Adapter.java
│ │ │ ├── TikTokAdapter.java
│ │ │ ├── TikTokListAdapter.java
│ │ │ ├── VideoListViewAdapter.java
│ │ │ └── VideoRecyclerViewAdapter.java
│ │ ├── app
│ │ │ └── MyApplication.java
│ │ ├── bean
│ │ │ ├── TiktokBean.java
│ │ │ └── VideoBean.java
│ │ ├── fragment
│ │ │ ├── BaseFragment.java
│ │ │ ├── list
│ │ │ │ ├── ListViewFragment.java
│ │ │ │ ├── RecyclerViewAutoPlayFragment.java
│ │ │ │ ├── RecyclerViewFragment.java
│ │ │ │ ├── RecyclerViewPortraitFragment.java
│ │ │ │ ├── SeamlessPlayFragment.java
│ │ │ │ └── TikTokListFragment.java
│ │ │ └── main
│ │ │ ├── ApiFragment.java
│ │ │ ├── ExtensionFragment.java
│ │ │ ├── ListFragment.java
│ │ │ └── PipFragment.java
│ │ ├── util
│ │ │ ├── cache
│ │ │ │ ├── PreloadManager.java
│ │ │ │ ├── PreloadTask.java
│ │ │ │ └── ProxyVideoCacheManager.java
│ │ │ ├── DataUtil.java
│ │ │ ├── IntentKeys.java
│ │ │ ├── PIPManager.java
│ │ │ ├── ProgressManagerImpl.java
│ │ │ ├── Tag.java
│ │ │ └── Utils.java
│ │ └── widget
│ │ ├── CenteredImageSpan.java
│ │ ├── component
│ │ │ ├── AdControlView.java
│ │ │ ├── DebugInfoView.java
│ │ │ ├── DefinitionControlView.java
│ │ │ ├── MyDanmakuView.java
│ │ │ ├── PipControlView.java
│ │ │ ├── PlayerMonitor.java
│ │ │ └── TikTokView.java
│ │ ├── controller
│ │ │ ├── FloatController.java
│ │ │ ├── PortraitWhenFullScreenController.java
│ │ │ └── TikTokController.java
│ │ ├── FloatView.java
│ │ ├── player
│ │ │ ├── CustomExoMediaPlayer.java
│ │ │ └── CustomIjkMediaPlayer.java
│ │ ├── render
│ │ │ ├── gl
│ │ │ │ ├── BitmapOverlayVideoProcessor.java
│ │ │ │ ├── GLSurfaceRenderViewFactory.java
│ │ │ │ └── GLSurfaceRenderView.java
│ │ │ ├── gl2
│ │ │ │ ├── chooser
│ │ │ │ │ └── GLConfigChooser.java
│ │ │ │ ├── contextfactory
│ │ │ │ │ └── GLContextFactory.java
│ │ │ │ ├── EglUtil.java
│ │ │ │ ├── filter
│ │ │ │ │ ├── GlBilateralFilter.java
│ │ │ │ │ ├── GlBoxBlurFilter.java
│ │ │ │ │ ├── GlBrightnessFilter.java
│ │ │ │ │ ├── GlBulgeDistortionFilter.java
│ │ │ │ │ ├── GlCGAColorspaceFilter.java
│ │ │ │ │ ├── GlContrastFilter.java
│ │ │ │ │ ├── GlCrosshatchFilter.java
│ │ │ │ │ ├── GlExposureFilter.java
│ │ │ │ │ ├── GlFilterGroup.java
│ │ │ │ │ ├── GlFilter.java
│ │ │ │ │ ├── GlGammaFilter.java
│ │ │ │ │ ├── GlGaussianBlurFilter.java
│ │ │ │ │ ├── GlGrayScaleFilter.java
│ │ │ │ │ ├── GlHalftoneFilter.java
│ │ │ │ │ ├── GlHazeFilter.java
│ │ │ │ │ ├── GlHighlightShadowFilter.java
│ │ │ │ │ ├── GlHueFilter.java
│ │ │ │ │ ├── GlInvertFilter.java
│ │ │ │ │ ├── GlLookUpTableFilter.java
│ │ │ │ │ ├── GlLuminanceFilter.java
│ │ │ │ │ ├── GlLuminanceThresholdFilter.java
│ │ │ │ │ ├── GlMonochromeFilter.java
│ │ │ │ │ ├── GlOpacityFilter.java
│ │ │ │ │ ├── GlOverlayFilter.java
│ │ │ │ │ ├── GlPixelationFilter.java
│ │ │ │ │ ├── GlPosterizeFilter.java
│ │ │ │ │ ├── GlPreviewFilter.java
│ │ │ │ │ ├── GlRGBFilter.java
│ │ │ │ │ ├── GlSaturationFilter.java
│ │ │ │ │ ├── GlSepiaFilter.java
│ │ │ │ │ ├── GlSharpenFilter.java
│ │ │ │ │ ├── GlSolarizeFilter.java
│ │ │ │ │ ├── GlSphereRefractionFilter.java
│ │ │ │ │ ├── GlSwirlFilter.java
│ │ │ │ │ ├── GlThreex3TextureSamplingFilter.java
│ │ │ │ │ ├── GlToneCurveFilter.java
│ │ │ │ │ ├── GlToneFilter.java
│ │ │ │ │ ├── GlVibranceFilter.java
│ │ │ │ │ ├── GlVignetteFilter.java
│ │ │ │ │ ├── GlWatermarkFilter.java
│ │ │ │ │ ├── GlWeakPixelInclusionFilter.java
│ │ │ │ │ ├── GlWhiteBalanceFilter.java
│ │ │ │ │ └── GlZoomBlurFilter.java
│ │ │ │ ├── GLFramebufferObject.java
│ │ │ │ ├── GLFrameBufferObjectRenderer.java
│ │ │ │ ├── GLSurfaceRenderView2.java
│ │ │ │ ├── GLSurfaceTexture.java
│ │ │ │ ├── GLVideoRenderer.java
│ │ │ │ └── Resolution.java
│ │ │ ├── SurfaceRenderViewFactory.java
│ │ │ ├── SurfaceRenderView.java
│ │ │ ├── TikTokRenderViewFactory.java
│ │ │ └── TikTokRenderView.java
│ │ ├── VerticalViewPager.java
│ │ └── videoview
│ │ ├── DanmukuVideoView.java
│ │ ├── ExoVideoView.java
│ │ └── IjkVideoView.java
│ └── res
│ ├── anim
│ │ ├── anim_alpha_in.xml
│ │ ├── anim_alpha_out.xml
│ │ ├── anim_float_window_enter.xml
│ │ ├── anim_float_window_exit.xml
│ │ ├── anim_slide_bottom_in.xml
│ │ ├── anim_slide_bottom_out.xml
│ │ ├── anim_slide_top_in.xml
│ │ └── anim_slide_top_out.xml
│ ├── drawable
│ │ ├── selector_mute_icon.xml
│ │ ├── shape_ad_bg.xml
│ │ └── shape_float_window_background.xml
│ ├── drawable-hdpi
│ │ ├── ic_tab_extension.png
│ │ ├── ic_tab_functions.png
│ │ ├── ic_tab_list.png
│ │ └── ic_tab_picture_in_picture.png
│ ├── drawable-mdpi
│ │ ├── ic_tab_extension.png
│ │ ├── ic_tab_functions.png
│ │ ├── ic_tab_list.png
│ │ └── ic_tab_picture_in_picture.png
│ ├── drawable-xhdpi
│ │ ├── ic_tab_extension.png
│ │ ├── ic_tab_functions.png
│ │ ├── ic_tab_list.png
│ │ └── ic_tab_picture_in_picture.png
│ ├── drawable-xxhdpi
│ │ ├── ic_tab_extension.png
│ │ ├── ic_tab_functions.png
│ │ ├── ic_tab_list.png
│ │ └── ic_tab_picture_in_picture.png
│ ├── drawable-xxxhdpi
│ │ ├── ic_tab_extension.png
│ │ ├── ic_tab_functions.png
│ │ ├── ic_tab_list.png
│ │ └── ic_tab_picture_in_picture.png
│ ├── layout
│ │ ├── activity_custom_exo_player.xml
│ │ ├── activity_custom_ijk_player.xml
│ │ ├── activity_danmaku_player.xml
│ │ ├── activity_detail.xml
│ │ ├── activity_layout_common.xml
│ │ ├── activity_main.xml
│ │ ├── activity_pad.xml
│ │ ├── activity_parallel_play.xml
│ │ ├── activity_pip_android_o.xml
│ │ ├── activity_pip.xml
│ │ ├── activity_player.xml
│ │ ├── activity_play_raw_assets.xml
│ │ ├── activity_tiktok2.xml
│ │ ├── activity_tiktok3.xml
│ │ ├── activity_tiktok.xml
│ │ ├── fragment_api.xml
│ │ ├── fragment_extension.xml
│ │ ├── fragment_list_view.xml
│ │ ├── fragment_list.xml
│ │ ├── fragment_pip.xml
│ │ ├── fragment_recycler_view.xml
│ │ ├── fragment_tiktok_list.xml
│ │ ├── item_tiktok_list.xml
│ │ ├── item_tik_tok.xml
│ │ ├── item_video.xml
│ │ ├── layout_ad_control_view.xml
│ │ ├── layout_definition_control_view.xml
│ │ ├── layout_float_controller.xml
│ │ ├── layout_rate_item.xml
│ │ ├── layout_rate_pop.xml
│ │ └── layout_tiktok_controller.xml
│ ├── menu
│ │ ├── main_menu.xml
│ │ ├── main_navigation_items.xml
│ │ └── tiktok_impl_menu.xml
│ ├── mipmap-anydpi-v26
│ │ ├── ic_launcher_round.xml
│ │ └── ic_launcher.xml
│ ├── mipmap-hdpi
│ │ ├── ic_launcher_foreground.png
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ ├── mipmap-mdpi
│ │ ├── ic_launcher_foreground.png
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ ├── mipmap-xhdpi
│ │ ├── ic_launcher_foreground.png
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ ├── mipmap-xxhdpi
│ │ ├── ic_launcher_foreground.png
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ ├── mipmap-xxxhdpi
│ │ ├── ic_launcher_foreground.png
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ ├── raw
│ │ └── movie
│ ├── values
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── ic_launcher_background.xml
│ │ ├── ids.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ ├── values-en
│ │ └── strings.xml
│ └── xml
│ └── network_security_config.xml
├── dkplayer-ui
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── xyz
│ │ └── doikki
│ │ └── videocontroller
│ │ ├── component
│ │ │ ├── CompleteView.java
│ │ │ ├── ErrorView.java
│ │ │ ├── GestureView.java
│ │ │ ├── LiveControlView.java
│ │ │ ├── PrepareView.java
│ │ │ ├── TitleView.java
│ │ │ └── VodControlView.java
│ │ └── StandardVideoController.java
│ └── res
│ ├── drawable
│ │ ├── dkplayer_battery_level.xml
│ │ ├── dkplayer_layer_progress_bar.xml
│ │ ├── dkplayer_progress_loading.xml
│ │ ├── dkplayer_seekbar_thumb_normal.xml
│ │ ├── dkplayer_seekbar_thumb_pressed.xml
│ │ ├── dkplayer_seekbar_thumb.xml
│ │ ├── dkplayer_selector_full_screen_button.xml
│ │ ├── dkplayer_selector_lock_button.xml
│ │ ├── dkplayer_selector_play_button.xml
│ │ ├── dkplayer_shape_back_bg.xml
│ │ ├── dkplayer_shape_play_bg.xml
│ │ ├── dkplayer_shape_standard_controller_top_bg.xml
│ │ ├── dkplayer_shape_stardard_controller_bottom_bg.xml
│ │ └── dkplayer_shape_status_view_btn.xml
│ ├── drawable-hdpi
│ │ ├── dkplayer_ic_action_arrow_back.png
│ │ ├── dkplayer_ic_action_autorenew.png
│ │ ├── dkplayer_ic_action_battery_10.png
│ │ ├── dkplayer_ic_action_battery_20.png
│ │ ├── dkplayer_ic_action_battery_30.png
│ │ ├── dkplayer_ic_action_battery_40.png
│ │ ├── dkplayer_ic_action_battery_50.png
│ │ ├── dkplayer_ic_action_battery_60.png
│ │ ├── dkplayer_ic_action_battery_70.png
│ │ ├── dkplayer_ic_action_battery_80.png
│ │ ├── dkplayer_ic_action_battery_90.png
│ │ ├── dkplayer_ic_action_battery.png
│ │ ├── dkplayer_ic_action_brightness.png
│ │ ├── dkplayer_ic_action_close.png
│ │ ├── dkplayer_ic_action_fast_forward.png
│ │ ├── dkplayer_ic_action_fast_rewind.png
│ │ ├── dkplayer_ic_action_fullscreen_exit.png
│ │ ├── dkplayer_ic_action_fullscreen.png
│ │ ├── dkplayer_ic_action_lock_close.png
│ │ ├── dkplayer_ic_action_lock_open.png
│ │ ├── dkplayer_ic_action_pause.png
│ │ ├── dkplayer_ic_action_play_arrow.png
│ │ ├── dkplayer_ic_action_replay.png
│ │ ├── dkplayer_ic_action_volume_off.png
│ │ └── dkplayer_ic_action_volume_up.png
│ ├── drawable-mdpi
│ │ ├── dkplayer_ic_action_arrow_back.png
│ │ ├── dkplayer_ic_action_autorenew.png
│ │ ├── dkplayer_ic_action_battery_10.png
│ │ ├── dkplayer_ic_action_battery_20.png
│ │ ├── dkplayer_ic_action_battery_30.png
│ │ ├── dkplayer_ic_action_battery_40.png
│ │ ├── dkplayer_ic_action_battery_50.png
│ │ ├── dkplayer_ic_action_battery_60.png
│ │ ├── dkplayer_ic_action_battery_70.png
│ │ ├── dkplayer_ic_action_battery_80.png
│ │ ├── dkplayer_ic_action_battery_90.png
│ │ ├── dkplayer_ic_action_battery.png
│ │ ├── dkplayer_ic_action_brightness.png
│ │ ├── dkplayer_ic_action_close.png
│ │ ├── dkplayer_ic_action_fast_forward.png
│ │ ├── dkplayer_ic_action_fast_rewind.png
│ │ ├── dkplayer_ic_action_fullscreen_exit.png
│ │ ├── dkplayer_ic_action_fullscreen.png
│ │ ├── dkplayer_ic_action_lock_close.png
│ │ ├── dkplayer_ic_action_lock_open.png
│ │ ├── dkplayer_ic_action_pause.png
│ │ ├── dkplayer_ic_action_play_arrow.png
│ │ ├── dkplayer_ic_action_replay.png
│ │ ├── dkplayer_ic_action_volume_off.png
│ │ └── dkplayer_ic_action_volume_up.png
│ ├── drawable-xhdpi
│ │ ├── dkplayer_ic_action_arrow_back.png
│ │ ├── dkplayer_ic_action_autorenew.png
│ │ ├── dkplayer_ic_action_battery_10.png
│ │ ├── dkplayer_ic_action_battery_20.png
│ │ ├── dkplayer_ic_action_battery_30.png
│ │ ├── dkplayer_ic_action_battery_40.png
│ │ ├── dkplayer_ic_action_battery_50.png
│ │ ├── dkplayer_ic_action_battery_60.png
│ │ ├── dkplayer_ic_action_battery_70.png
│ │ ├── dkplayer_ic_action_battery_80.png
│ │ ├── dkplayer_ic_action_battery_90.png
│ │ ├── dkplayer_ic_action_battery.png
│ │ ├── dkplayer_ic_action_brightness.png
│ │ ├── dkplayer_ic_action_close.png
│ │ ├── dkplayer_ic_action_fast_forward.png
│ │ ├── dkplayer_ic_action_fast_rewind.png
│ │ ├── dkplayer_ic_action_fullscreen_exit.png
│ │ ├── dkplayer_ic_action_fullscreen.png
│ │ ├── dkplayer_ic_action_lock_close.png
│ │ ├── dkplayer_ic_action_lock_open.png
│ │ ├── dkplayer_ic_action_pause.png
│ │ ├── dkplayer_ic_action_play_arrow.png
│ │ ├── dkplayer_ic_action_replay.png
│ │ ├── dkplayer_ic_action_volume_off.png
│ │ └── dkplayer_ic_action_volume_up.png
│ ├── drawable-xxhdpi
│ │ ├── dkplayer_ic_action_arrow_back.png
│ │ ├── dkplayer_ic_action_autorenew.png
│ │ ├── dkplayer_ic_action_battery_10.png
│ │ ├── dkplayer_ic_action_battery_20.png
│ │ ├── dkplayer_ic_action_battery_30.png
│ │ ├── dkplayer_ic_action_battery_40.png
│ │ ├── dkplayer_ic_action_battery_50.png
│ │ ├── dkplayer_ic_action_battery_60.png
│ │ ├── dkplayer_ic_action_battery_70.png
│ │ ├── dkplayer_ic_action_battery_80.png
│ │ ├── dkplayer_ic_action_battery_90.png
│ │ ├── dkplayer_ic_action_battery.png
│ │ ├── dkplayer_ic_action_brightness.png
│ │ ├── dkplayer_ic_action_close.png
│ │ ├── dkplayer_ic_action_fast_forward.png
│ │ ├── dkplayer_ic_action_fast_rewind.png
│ │ ├── dkplayer_ic_action_fullscreen_exit.png
│ │ ├── dkplayer_ic_action_fullscreen.png
│ │ ├── dkplayer_ic_action_lock_close.png
│ │ ├── dkplayer_ic_action_lock_open.png
│ │ ├── dkplayer_ic_action_pause.png
│ │ ├── dkplayer_ic_action_play_arrow.png
│ │ ├── dkplayer_ic_action_replay.png
│ │ ├── dkplayer_ic_action_volume_off.png
│ │ └── dkplayer_ic_action_volume_up.png
│ ├── drawable-xxxhdpi
│ │ ├── dkplayer_ic_action_arrow_back.png
│ │ ├── dkplayer_ic_action_autorenew.png
│ │ ├── dkplayer_ic_action_battery_10.png
│ │ ├── dkplayer_ic_action_battery_20.png
│ │ ├── dkplayer_ic_action_battery_30.png
│ │ ├── dkplayer_ic_action_battery_40.png
│ │ ├── dkplayer_ic_action_battery_50.png
│ │ ├── dkplayer_ic_action_battery_60.png
│ │ ├── dkplayer_ic_action_battery_70.png
│ │ ├── dkplayer_ic_action_battery_80.png
│ │ ├── dkplayer_ic_action_battery_90.png
│ │ ├── dkplayer_ic_action_battery.png
│ │ ├── dkplayer_ic_action_brightness.png
│ │ ├── dkplayer_ic_action_close.png
│ │ ├── dkplayer_ic_action_fast_forward.png
│ │ ├── dkplayer_ic_action_fast_rewind.png
│ │ ├── dkplayer_ic_action_fullscreen_exit.png
│ │ ├── dkplayer_ic_action_fullscreen.png
│ │ ├── dkplayer_ic_action_lock_close.png
│ │ ├── dkplayer_ic_action_lock_open.png
│ │ ├── dkplayer_ic_action_pause.png
│ │ ├── dkplayer_ic_action_play_arrow.png
│ │ ├── dkplayer_ic_action_replay.png
│ │ ├── dkplayer_ic_action_volume_off.png
│ │ └── dkplayer_ic_action_volume_up.png
│ ├── layout
│ │ ├── dkplayer_layout_complete_view.xml
│ │ ├── dkplayer_layout_error_view.xml
│ │ ├── dkplayer_layout_gesture_control_view.xml
│ │ ├── dkplayer_layout_live_control_view.xml
│ │ ├── dkplayer_layout_prepare_view.xml
│ │ ├── dkplayer_layout_standard_controller.xml
│ │ ├── dkplayer_layout_title_view.xml
│ │ └── dkplayer_layout_vod_control_view.xml
│ ├── values
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ └── strings.xml
│ └── values-en
│ └── strings.xml
├── dkplayer-videocache
│ ├── build.gradle
│ └── src
│ └── main
│ ├── AndroidManifest.xml
│ └── java
│ └── com
│ └── danikula
│ └── videocache
│ ├── ByteArrayCache.java
│ ├── ByteArraySource.java
│ ├── Cache.java
│ ├── CacheListener.java
│ ├── Config.java
│ ├── file
│ │ ├── DiskUsage.java
│ │ ├── FileCache.java
│ │ ├── FileNameGenerator.java
│ │ ├── Files.java
│ │ ├── LruDiskUsage.java
│ │ ├── Md5FileNameGenerator.java
│ │ ├── TotalCountLruDiskUsage.java
│ │ ├── TotalSizeLruDiskUsage.java
│ │ └── UnlimitedDiskUsage.java
│ ├── GetRequest.java
│ ├── headers
│ │ ├── EmptyHeadersInjector.java
│ │ └── HeaderInjector.java
│ ├── HttpProxyCache.java
│ ├── HttpProxyCacheServerClients.java
│ ├── HttpProxyCacheServer.java
│ ├── HttpUrlSource.java
│ ├── IgnoreHostProxySelector.java
│ ├── InterruptedProxyCacheException.java
│ ├── Logger.java
│ ├── Pinger.java
│ ├── Preconditions.java
│ ├── ProxyCacheException.java
│ ├── ProxyCache.java
│ ├── ProxyCacheUtils.java
│ ├── SourceInfo.java
│ ├── Source.java
│ ├── sourcestorage
│ │ ├── DatabaseSourceInfoStorage.java
│ │ ├── NoSourceInfoStorage.java
│ │ ├── SourceInfoStorageFactory.java
│ │ └── SourceInfoStorage.java
│ └── StorageUtils.java
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── LICENSE
├── other
│ ├── module-lite.sh
│ └── test.ffconcat
├── publish.gradle
├── README-en.md
├── README.md
└── settings.gradle
132 directories, 533 files
DKVideoPlayer:安卓视频播放器。该播放器封装了MediaPlayer、ExoPlayer、IjkPlayer,实现了模仿抖音的功能,包括预加载、列表播放、悬浮播放、广告播放、弹幕、视频水印和视频滤镜。本站提供相关源码下载。DKVideoPlayer是一款适用于Android平台的视频播放器。
【实例截图】
【核心代码】
文件清单
└── DKVideoPlayer-5203b55fcd01207b44e76e14f2730ced7cbdf5ee
├── build.gradle
├── constants.gradle
├── devlin.jks
├── dkplayer-java
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── xyz
│ │ └── doikki
│ │ └── videoplayer
│ │ ├── controller
│ │ │ ├── BaseVideoController.java
│ │ │ ├── ControlWrapper.java
│ │ │ ├── GestureVideoController.java
│ │ │ ├── IControlComponent.java
│ │ │ ├── IGestureComponent.java
│ │ │ ├── IVideoController.java
│ │ │ ├── MediaPlayerControl.java
│ │ │ └── OrientationHelper.java
│ │ ├── player
│ │ │ ├── AbstractPlayer.java
│ │ │ ├── AndroidMediaPlayerFactory.java
│ │ │ ├── AndroidMediaPlayer.java
│ │ │ ├── AudioFocusHelper.java
│ │ │ ├── BaseVideoView.java
│ │ │ ├── PlayerFactory.java
│ │ │ ├── ProgressManager.java
│ │ │ ├── VideoViewConfig.java
│ │ │ ├── VideoView.java
│ │ │ └── VideoViewManager.java
│ │ ├── render
│ │ │ ├── IRenderView.java
│ │ │ ├── MeasureHelper.java
│ │ │ ├── RenderViewFactory.java
│ │ │ ├── TextureRenderViewFactory.java
│ │ │ └── TextureRenderView.java
│ │ └── util
│ │ ├── CutoutUtil.java
│ │ ├── L.java
│ │ └── PlayerUtils.java
│ └── res
│ └── values
│ └── attrs.xml
├── dkplayer-players
│ ├── exo
│ │ ├── build.gradle
│ │ ├── proguard-rules.pro
│ │ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ └── xyz
│ │ └── doikki
│ │ └── videoplayer
│ │ └── exo
│ │ ├── ExoMediaPlayerFactory.java
│ │ ├── ExoMediaPlayer.java
│ │ └── ExoMediaSourceHelper.java
│ └── ijk
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ ├── tv
│ │ │ └── danmaku
│ │ │ └── ijk
│ │ │ └── media
│ │ │ └── player
│ │ │ ├── AbstractMediaPlayer.java
│ │ │ ├── AndroidMediaPlayer.java
│ │ │ ├── annotations
│ │ │ │ ├── AccessedByNative.java
│ │ │ │ └── CalledByNative.java
│ │ │ ├── exceptions
│ │ │ │ └── IjkMediaException.java
│ │ │ ├── ffmpeg
│ │ │ │ └── FFmpegApi.java
│ │ │ ├── IjkLibLoader.java
│ │ │ ├── IjkMediaCodecInfo.java
│ │ │ ├── IjkMediaMeta.java
│ │ │ ├── IjkMediaPlayer.java
│ │ │ ├── IjkTimedText.java
│ │ │ ├── IMediaPlayer.java
│ │ │ ├── ISurfaceTextureHolder.java
│ │ │ ├── ISurfaceTextureHost.java
│ │ │ ├── MediaInfo.java
│ │ │ ├── MediaPlayerProxy.java
│ │ │ ├── misc
│ │ │ │ ├── AndroidMediaFormat.java
│ │ │ │ ├── AndroidTrackInfo.java
│ │ │ │ ├── IAndroidIO.java
│ │ │ │ ├── IjkMediaFormat.java
│ │ │ │ ├── IjkTrackInfo.java
│ │ │ │ ├── IMediaDataSource.java
│ │ │ │ ├── IMediaFormat.java
│ │ │ │ └── ITrackInfo.java
│ │ │ ├── pragma
│ │ │ │ ├── DebugLog.java
│ │ │ │ └── Pragma.java
│ │ │ └── TextureMediaPlayer.java
│ │ └── xyz
│ │ └── doikki
│ │ └── videoplayer
│ │ └── ijk
│ │ ├── IjkPlayerFactory.java
│ │ ├── IjkPlayer.java
│ │ └── RawDataSourceProvider.java
│ └── jniLibs
│ ├── arm64-v8a
│ │ ├── libijkffmpeg.so
│ │ ├── libijkplayer.so
│ │ └── libijksdl.so
│ ├── armeabi
│ │ ├── libijkffmpeg.so
│ │ ├── libijkplayer.so
│ │ └── libijksdl.so
│ ├── armeabi-v7a
│ │ ├── libijkffmpeg.so
│ │ ├── libijkplayer.so
│ │ └── libijksdl.so
│ ├── x86
│ │ ├── libijkffmpeg.so
│ │ ├── libijkplayer.so
│ │ └── libijksdl.so
│ └── x86_64
│ ├── libijkffmpeg.so
│ ├── libijkplayer.so
│ └── libijksdl.so
├── dkplayer-sample
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── assets
│ │ ├── bitmap_overlay_video_processor_fragment.glsl
│ │ ├── bitmap_overlay_video_processor_vertex.glsl
│ │ ├── test.mp4
│ │ └── tiktok_data
│ ├── ic_launcher-web.png
│ ├── java
│ │ └── xyz
│ │ └── doikki
│ │ └── dkplayer
│ │ ├── activity
│ │ │ ├── api
│ │ │ │ ├── ParallelPlayActivity.java
│ │ │ │ ├── PlayerActivityJava.java
│ │ │ │ ├── PlayerActivity.kt
│ │ │ │ └── PlayRawAssetsActivity.java
│ │ │ ├── BaseActivity.java
│ │ │ ├── CpuInfoActivity.java
│ │ │ ├── extend
│ │ │ │ ├── ADActivity.java
│ │ │ │ ├── CacheActivity.java
│ │ │ │ ├── CustomExoPlayerActivity.java
│ │ │ │ ├── CustomIjkPlayerActivity.java
│ │ │ │ ├── DanmakuActivity.java
│ │ │ │ ├── DefinitionPlayerActivity.java
│ │ │ │ ├── FullScreenActivity.java
│ │ │ │ ├── PadActivity.java
│ │ │ │ └── PlayListActivity.java
│ │ │ ├── list
│ │ │ │ ├── DetailActivity.java
│ │ │ │ └── tiktok
│ │ │ │ ├── OnViewPagerListener.java
│ │ │ │ ├── TikTok2Activity.java
│ │ │ │ ├── TikTok3Activity.java
│ │ │ │ ├── TikTokActivity.java
│ │ │ │ └── ViewPagerLayoutManager.java
│ │ │ ├── MainActivity.kt
│ │ │ └── pip
│ │ │ ├── AndroidOPiPActivity.java
│ │ │ ├── PIPActivity.java
│ │ │ ├── PIPListActivity.java
│ │ │ └── TinyScreenActivity.java
│ │ ├── adapter
│ │ │ ├── listener
│ │ │ │ ├── OnItemChildClickListener.java
│ │ │ │ └── OnItemClickListener.java
│ │ │ ├── ListPagerAdapter.java
│ │ │ ├── Tiktok2Adapter.java
│ │ │ ├── Tiktok3Adapter.java
│ │ │ ├── TikTokAdapter.java
│ │ │ ├── TikTokListAdapter.java
│ │ │ ├── VideoListViewAdapter.java
│ │ │ └── VideoRecyclerViewAdapter.java
│ │ ├── app
│ │ │ └── MyApplication.java
│ │ ├── bean
│ │ │ ├── TiktokBean.java
│ │ │ └── VideoBean.java
│ │ ├── fragment
│ │ │ ├── BaseFragment.java
│ │ │ ├── list
│ │ │ │ ├── ListViewFragment.java
│ │ │ │ ├── RecyclerViewAutoPlayFragment.java
│ │ │ │ ├── RecyclerViewFragment.java
│ │ │ │ ├── RecyclerViewPortraitFragment.java
│ │ │ │ ├── SeamlessPlayFragment.java
│ │ │ │ └── TikTokListFragment.java
│ │ │ └── main
│ │ │ ├── ApiFragment.java
│ │ │ ├── ExtensionFragment.java
│ │ │ ├── ListFragment.java
│ │ │ └── PipFragment.java
│ │ ├── util
│ │ │ ├── cache
│ │ │ │ ├── PreloadManager.java
│ │ │ │ ├── PreloadTask.java
│ │ │ │ └── ProxyVideoCacheManager.java
│ │ │ ├── DataUtil.java
│ │ │ ├── IntentKeys.java
│ │ │ ├── PIPManager.java
│ │ │ ├── ProgressManagerImpl.java
│ │ │ ├── Tag.java
│ │ │ └── Utils.java
│ │ └── widget
│ │ ├── CenteredImageSpan.java
│ │ ├── component
│ │ │ ├── AdControlView.java
│ │ │ ├── DebugInfoView.java
│ │ │ ├── DefinitionControlView.java
│ │ │ ├── MyDanmakuView.java
│ │ │ ├── PipControlView.java
│ │ │ ├── PlayerMonitor.java
│ │ │ └── TikTokView.java
│ │ ├── controller
│ │ │ ├── FloatController.java
│ │ │ ├── PortraitWhenFullScreenController.java
│ │ │ └── TikTokController.java
│ │ ├── FloatView.java
│ │ ├── player
│ │ │ ├── CustomExoMediaPlayer.java
│ │ │ └── CustomIjkMediaPlayer.java
│ │ ├── render
│ │ │ ├── gl
│ │ │ │ ├── BitmapOverlayVideoProcessor.java
│ │ │ │ ├── GLSurfaceRenderViewFactory.java
│ │ │ │ └── GLSurfaceRenderView.java
│ │ │ ├── gl2
│ │ │ │ ├── chooser
│ │ │ │ │ └── GLConfigChooser.java
│ │ │ │ ├── contextfactory
│ │ │ │ │ └── GLContextFactory.java
│ │ │ │ ├── EglUtil.java
│ │ │ │ ├── filter
│ │ │ │ │ ├── GlBilateralFilter.java
│ │ │ │ │ ├── GlBoxBlurFilter.java
│ │ │ │ │ ├── GlBrightnessFilter.java
│ │ │ │ │ ├── GlBulgeDistortionFilter.java
│ │ │ │ │ ├── GlCGAColorspaceFilter.java
│ │ │ │ │ ├── GlContrastFilter.java
│ │ │ │ │ ├── GlCrosshatchFilter.java
│ │ │ │ │ ├── GlExposureFilter.java
│ │ │ │ │ ├── GlFilterGroup.java
│ │ │ │ │ ├── GlFilter.java
│ │ │ │ │ ├── GlGammaFilter.java
│ │ │ │ │ ├── GlGaussianBlurFilter.java
│ │ │ │ │ ├── GlGrayScaleFilter.java
│ │ │ │ │ ├── GlHalftoneFilter.java
│ │ │ │ │ ├── GlHazeFilter.java
│ │ │ │ │ ├── GlHighlightShadowFilter.java
│ │ │ │ │ ├── GlHueFilter.java
│ │ │ │ │ ├── GlInvertFilter.java
│ │ │ │ │ ├── GlLookUpTableFilter.java
│ │ │ │ │ ├── GlLuminanceFilter.java
│ │ │ │ │ ├── GlLuminanceThresholdFilter.java
│ │ │ │ │ ├── GlMonochromeFilter.java
│ │ │ │ │ ├── GlOpacityFilter.java
│ │ │ │ │ ├── GlOverlayFilter.java
│ │ │ │ │ ├── GlPixelationFilter.java
│ │ │ │ │ ├── GlPosterizeFilter.java
│ │ │ │ │ ├── GlPreviewFilter.java
│ │ │ │ │ ├── GlRGBFilter.java
│ │ │ │ │ ├── GlSaturationFilter.java
│ │ │ │ │ ├── GlSepiaFilter.java
│ │ │ │ │ ├── GlSharpenFilter.java
│ │ │ │ │ ├── GlSolarizeFilter.java
│ │ │ │ │ ├── GlSphereRefractionFilter.java
│ │ │ │ │ ├── GlSwirlFilter.java
│ │ │ │ │ ├── GlThreex3TextureSamplingFilter.java
│ │ │ │ │ ├── GlToneCurveFilter.java
│ │ │ │ │ ├── GlToneFilter.java
│ │ │ │ │ ├── GlVibranceFilter.java
│ │ │ │ │ ├── GlVignetteFilter.java
│ │ │ │ │ ├── GlWatermarkFilter.java
│ │ │ │ │ ├── GlWeakPixelInclusionFilter.java
│ │ │ │ │ ├── GlWhiteBalanceFilter.java
│ │ │ │ │ └── GlZoomBlurFilter.java
│ │ │ │ ├── GLFramebufferObject.java
│ │ │ │ ├── GLFrameBufferObjectRenderer.java
│ │ │ │ ├── GLSurfaceRenderView2.java
│ │ │ │ ├── GLSurfaceTexture.java
│ │ │ │ ├── GLVideoRenderer.java
│ │ │ │ └── Resolution.java
│ │ │ ├── SurfaceRenderViewFactory.java
│ │ │ ├── SurfaceRenderView.java
│ │ │ ├── TikTokRenderViewFactory.java
│ │ │ └── TikTokRenderView.java
│ │ ├── VerticalViewPager.java
│ │ └── videoview
│ │ ├── DanmukuVideoView.java
│ │ ├── ExoVideoView.java
│ │ └── IjkVideoView.java
│ └── res
│ ├── anim
│ │ ├── anim_alpha_in.xml
│ │ ├── anim_alpha_out.xml
│ │ ├── anim_float_window_enter.xml
│ │ ├── anim_float_window_exit.xml
│ │ ├── anim_slide_bottom_in.xml
│ │ ├── anim_slide_bottom_out.xml
│ │ ├── anim_slide_top_in.xml
│ │ └── anim_slide_top_out.xml
│ ├── drawable
│ │ ├── selector_mute_icon.xml
│ │ ├── shape_ad_bg.xml
│ │ └── shape_float_window_background.xml
│ ├── drawable-hdpi
│ │ ├── ic_tab_extension.png
│ │ ├── ic_tab_functions.png
│ │ ├── ic_tab_list.png
│ │ └── ic_tab_picture_in_picture.png
│ ├── drawable-mdpi
│ │ ├── ic_tab_extension.png
│ │ ├── ic_tab_functions.png
│ │ ├── ic_tab_list.png
│ │ └── ic_tab_picture_in_picture.png
│ ├── drawable-xhdpi
│ │ ├── ic_tab_extension.png
│ │ ├── ic_tab_functions.png
│ │ ├── ic_tab_list.png
│ │ └── ic_tab_picture_in_picture.png
│ ├── drawable-xxhdpi
│ │ ├── ic_tab_extension.png
│ │ ├── ic_tab_functions.png
│ │ ├── ic_tab_list.png
│ │ └── ic_tab_picture_in_picture.png
│ ├── drawable-xxxhdpi
│ │ ├── ic_tab_extension.png
│ │ ├── ic_tab_functions.png
│ │ ├── ic_tab_list.png
│ │ └── ic_tab_picture_in_picture.png
│ ├── layout
│ │ ├── activity_custom_exo_player.xml
│ │ ├── activity_custom_ijk_player.xml
│ │ ├── activity_danmaku_player.xml
│ │ ├── activity_detail.xml
│ │ ├── activity_layout_common.xml
│ │ ├── activity_main.xml
│ │ ├── activity_pad.xml
│ │ ├── activity_parallel_play.xml
│ │ ├── activity_pip_android_o.xml
│ │ ├── activity_pip.xml
│ │ ├── activity_player.xml
│ │ ├── activity_play_raw_assets.xml
│ │ ├── activity_tiktok2.xml
│ │ ├── activity_tiktok3.xml
│ │ ├── activity_tiktok.xml
│ │ ├── fragment_api.xml
│ │ ├── fragment_extension.xml
│ │ ├── fragment_list_view.xml
│ │ ├── fragment_list.xml
│ │ ├── fragment_pip.xml
│ │ ├── fragment_recycler_view.xml
│ │ ├── fragment_tiktok_list.xml
│ │ ├── item_tiktok_list.xml
│ │ ├── item_tik_tok.xml
│ │ ├── item_video.xml
│ │ ├── layout_ad_control_view.xml
│ │ ├── layout_definition_control_view.xml
│ │ ├── layout_float_controller.xml
│ │ ├── layout_rate_item.xml
│ │ ├── layout_rate_pop.xml
│ │ └── layout_tiktok_controller.xml
│ ├── menu
│ │ ├── main_menu.xml
│ │ ├── main_navigation_items.xml
│ │ └── tiktok_impl_menu.xml
│ ├── mipmap-anydpi-v26
│ │ ├── ic_launcher_round.xml
│ │ └── ic_launcher.xml
│ ├── mipmap-hdpi
│ │ ├── ic_launcher_foreground.png
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ ├── mipmap-mdpi
│ │ ├── ic_launcher_foreground.png
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ ├── mipmap-xhdpi
│ │ ├── ic_launcher_foreground.png
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ ├── mipmap-xxhdpi
│ │ ├── ic_launcher_foreground.png
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ ├── mipmap-xxxhdpi
│ │ ├── ic_launcher_foreground.png
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ ├── raw
│ │ └── movie
│ ├── values
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── ic_launcher_background.xml
│ │ ├── ids.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ ├── values-en
│ │ └── strings.xml
│ └── xml
│ └── network_security_config.xml
├── dkplayer-ui
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── xyz
│ │ └── doikki
│ │ └── videocontroller
│ │ ├── component
│ │ │ ├── CompleteView.java
│ │ │ ├── ErrorView.java
│ │ │ ├── GestureView.java
│ │ │ ├── LiveControlView.java
│ │ │ ├── PrepareView.java
│ │ │ ├── TitleView.java
│ │ │ └── VodControlView.java
│ │ └── StandardVideoController.java
│ └── res
│ ├── drawable
│ │ ├── dkplayer_battery_level.xml
│ │ ├── dkplayer_layer_progress_bar.xml
│ │ ├── dkplayer_progress_loading.xml
│ │ ├── dkplayer_seekbar_thumb_normal.xml
│ │ ├── dkplayer_seekbar_thumb_pressed.xml
│ │ ├── dkplayer_seekbar_thumb.xml
│ │ ├── dkplayer_selector_full_screen_button.xml
│ │ ├── dkplayer_selector_lock_button.xml
│ │ ├── dkplayer_selector_play_button.xml
│ │ ├── dkplayer_shape_back_bg.xml
│ │ ├── dkplayer_shape_play_bg.xml
│ │ ├── dkplayer_shape_standard_controller_top_bg.xml
│ │ ├── dkplayer_shape_stardard_controller_bottom_bg.xml
│ │ └── dkplayer_shape_status_view_btn.xml
│ ├── drawable-hdpi
│ │ ├── dkplayer_ic_action_arrow_back.png
│ │ ├── dkplayer_ic_action_autorenew.png
│ │ ├── dkplayer_ic_action_battery_10.png
│ │ ├── dkplayer_ic_action_battery_20.png
│ │ ├── dkplayer_ic_action_battery_30.png
│ │ ├── dkplayer_ic_action_battery_40.png
│ │ ├── dkplayer_ic_action_battery_50.png
│ │ ├── dkplayer_ic_action_battery_60.png
│ │ ├── dkplayer_ic_action_battery_70.png
│ │ ├── dkplayer_ic_action_battery_80.png
│ │ ├── dkplayer_ic_action_battery_90.png
│ │ ├── dkplayer_ic_action_battery.png
│ │ ├── dkplayer_ic_action_brightness.png
│ │ ├── dkplayer_ic_action_close.png
│ │ ├── dkplayer_ic_action_fast_forward.png
│ │ ├── dkplayer_ic_action_fast_rewind.png
│ │ ├── dkplayer_ic_action_fullscreen_exit.png
│ │ ├── dkplayer_ic_action_fullscreen.png
│ │ ├── dkplayer_ic_action_lock_close.png
│ │ ├── dkplayer_ic_action_lock_open.png
│ │ ├── dkplayer_ic_action_pause.png
│ │ ├── dkplayer_ic_action_play_arrow.png
│ │ ├── dkplayer_ic_action_replay.png
│ │ ├── dkplayer_ic_action_volume_off.png
│ │ └── dkplayer_ic_action_volume_up.png
│ ├── drawable-mdpi
│ │ ├── dkplayer_ic_action_arrow_back.png
│ │ ├── dkplayer_ic_action_autorenew.png
│ │ ├── dkplayer_ic_action_battery_10.png
│ │ ├── dkplayer_ic_action_battery_20.png
│ │ ├── dkplayer_ic_action_battery_30.png
│ │ ├── dkplayer_ic_action_battery_40.png
│ │ ├── dkplayer_ic_action_battery_50.png
│ │ ├── dkplayer_ic_action_battery_60.png
│ │ ├── dkplayer_ic_action_battery_70.png
│ │ ├── dkplayer_ic_action_battery_80.png
│ │ ├── dkplayer_ic_action_battery_90.png
│ │ ├── dkplayer_ic_action_battery.png
│ │ ├── dkplayer_ic_action_brightness.png
│ │ ├── dkplayer_ic_action_close.png
│ │ ├── dkplayer_ic_action_fast_forward.png
│ │ ├── dkplayer_ic_action_fast_rewind.png
│ │ ├── dkplayer_ic_action_fullscreen_exit.png
│ │ ├── dkplayer_ic_action_fullscreen.png
│ │ ├── dkplayer_ic_action_lock_close.png
│ │ ├── dkplayer_ic_action_lock_open.png
│ │ ├── dkplayer_ic_action_pause.png
│ │ ├── dkplayer_ic_action_play_arrow.png
│ │ ├── dkplayer_ic_action_replay.png
│ │ ├── dkplayer_ic_action_volume_off.png
│ │ └── dkplayer_ic_action_volume_up.png
│ ├── drawable-xhdpi
│ │ ├── dkplayer_ic_action_arrow_back.png
│ │ ├── dkplayer_ic_action_autorenew.png
│ │ ├── dkplayer_ic_action_battery_10.png
│ │ ├── dkplayer_ic_action_battery_20.png
│ │ ├── dkplayer_ic_action_battery_30.png
│ │ ├── dkplayer_ic_action_battery_40.png
│ │ ├── dkplayer_ic_action_battery_50.png
│ │ ├── dkplayer_ic_action_battery_60.png
│ │ ├── dkplayer_ic_action_battery_70.png
│ │ ├── dkplayer_ic_action_battery_80.png
│ │ ├── dkplayer_ic_action_battery_90.png
│ │ ├── dkplayer_ic_action_battery.png
│ │ ├── dkplayer_ic_action_brightness.png
│ │ ├── dkplayer_ic_action_close.png
│ │ ├── dkplayer_ic_action_fast_forward.png
│ │ ├── dkplayer_ic_action_fast_rewind.png
│ │ ├── dkplayer_ic_action_fullscreen_exit.png
│ │ ├── dkplayer_ic_action_fullscreen.png
│ │ ├── dkplayer_ic_action_lock_close.png
│ │ ├── dkplayer_ic_action_lock_open.png
│ │ ├── dkplayer_ic_action_pause.png
│ │ ├── dkplayer_ic_action_play_arrow.png
│ │ ├── dkplayer_ic_action_replay.png
│ │ ├── dkplayer_ic_action_volume_off.png
│ │ └── dkplayer_ic_action_volume_up.png
│ ├── drawable-xxhdpi
│ │ ├── dkplayer_ic_action_arrow_back.png
│ │ ├── dkplayer_ic_action_autorenew.png
│ │ ├── dkplayer_ic_action_battery_10.png
│ │ ├── dkplayer_ic_action_battery_20.png
│ │ ├── dkplayer_ic_action_battery_30.png
│ │ ├── dkplayer_ic_action_battery_40.png
│ │ ├── dkplayer_ic_action_battery_50.png
│ │ ├── dkplayer_ic_action_battery_60.png
│ │ ├── dkplayer_ic_action_battery_70.png
│ │ ├── dkplayer_ic_action_battery_80.png
│ │ ├── dkplayer_ic_action_battery_90.png
│ │ ├── dkplayer_ic_action_battery.png
│ │ ├── dkplayer_ic_action_brightness.png
│ │ ├── dkplayer_ic_action_close.png
│ │ ├── dkplayer_ic_action_fast_forward.png
│ │ ├── dkplayer_ic_action_fast_rewind.png
│ │ ├── dkplayer_ic_action_fullscreen_exit.png
│ │ ├── dkplayer_ic_action_fullscreen.png
│ │ ├── dkplayer_ic_action_lock_close.png
│ │ ├── dkplayer_ic_action_lock_open.png
│ │ ├── dkplayer_ic_action_pause.png
│ │ ├── dkplayer_ic_action_play_arrow.png
│ │ ├── dkplayer_ic_action_replay.png
│ │ ├── dkplayer_ic_action_volume_off.png
│ │ └── dkplayer_ic_action_volume_up.png
│ ├── drawable-xxxhdpi
│ │ ├── dkplayer_ic_action_arrow_back.png
│ │ ├── dkplayer_ic_action_autorenew.png
│ │ ├── dkplayer_ic_action_battery_10.png
│ │ ├── dkplayer_ic_action_battery_20.png
│ │ ├── dkplayer_ic_action_battery_30.png
│ │ ├── dkplayer_ic_action_battery_40.png
│ │ ├── dkplayer_ic_action_battery_50.png
│ │ ├── dkplayer_ic_action_battery_60.png
│ │ ├── dkplayer_ic_action_battery_70.png
│ │ ├── dkplayer_ic_action_battery_80.png
│ │ ├── dkplayer_ic_action_battery_90.png
│ │ ├── dkplayer_ic_action_battery.png
│ │ ├── dkplayer_ic_action_brightness.png
│ │ ├── dkplayer_ic_action_close.png
│ │ ├── dkplayer_ic_action_fast_forward.png
│ │ ├── dkplayer_ic_action_fast_rewind.png
│ │ ├── dkplayer_ic_action_fullscreen_exit.png
│ │ ├── dkplayer_ic_action_fullscreen.png
│ │ ├── dkplayer_ic_action_lock_close.png
│ │ ├── dkplayer_ic_action_lock_open.png
│ │ ├── dkplayer_ic_action_pause.png
│ │ ├── dkplayer_ic_action_play_arrow.png
│ │ ├── dkplayer_ic_action_replay.png
│ │ ├── dkplayer_ic_action_volume_off.png
│ │ └── dkplayer_ic_action_volume_up.png
│ ├── layout
│ │ ├── dkplayer_layout_complete_view.xml
│ │ ├── dkplayer_layout_error_view.xml
│ │ ├── dkplayer_layout_gesture_control_view.xml
│ │ ├── dkplayer_layout_live_control_view.xml
│ │ ├── dkplayer_layout_prepare_view.xml
│ │ ├── dkplayer_layout_standard_controller.xml
│ │ ├── dkplayer_layout_title_view.xml
│ │ └── dkplayer_layout_vod_control_view.xml
│ ├── values
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ └── strings.xml
│ └── values-en
│ └── strings.xml
├── dkplayer-videocache
│ ├── build.gradle
│ └── src
│ └── main
│ ├── AndroidManifest.xml
│ └── java
│ └── com
│ └── danikula
│ └── videocache
│ ├── ByteArrayCache.java
│ ├── ByteArraySource.java
│ ├── Cache.java
│ ├── CacheListener.java
│ ├── Config.java
│ ├── file
│ │ ├── DiskUsage.java
│ │ ├── FileCache.java
│ │ ├── FileNameGenerator.java
│ │ ├── Files.java
│ │ ├── LruDiskUsage.java
│ │ ├── Md5FileNameGenerator.java
│ │ ├── TotalCountLruDiskUsage.java
│ │ ├── TotalSizeLruDiskUsage.java
│ │ └── UnlimitedDiskUsage.java
│ ├── GetRequest.java
│ ├── headers
│ │ ├── EmptyHeadersInjector.java
│ │ └── HeaderInjector.java
│ ├── HttpProxyCache.java
│ ├── HttpProxyCacheServerClients.java
│ ├── HttpProxyCacheServer.java
│ ├── HttpUrlSource.java
│ ├── IgnoreHostProxySelector.java
│ ├── InterruptedProxyCacheException.java
│ ├── Logger.java
│ ├── Pinger.java
│ ├── Preconditions.java
│ ├── ProxyCacheException.java
│ ├── ProxyCache.java
│ ├── ProxyCacheUtils.java
│ ├── SourceInfo.java
│ ├── Source.java
│ ├── sourcestorage
│ │ ├── DatabaseSourceInfoStorage.java
│ │ ├── NoSourceInfoStorage.java
│ │ ├── SourceInfoStorageFactory.java
│ │ └── SourceInfoStorage.java
│ └── StorageUtils.java
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── LICENSE
├── other
│ ├── module-lite.sh
│ └── test.ffconcat
├── publish.gradle
├── README-en.md
├── README.md
└── settings.gradle
132 directories, 533 files
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论