├── .gitignore ├── Demo ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── assets │ ├── jzvd.html │ ├── local_video.mp4 │ └── tiktok_data │ ├── java │ └── com │ │ └── yc │ │ └── ycvideoplayer │ │ ├── BaseActivity.java │ │ ├── BaseApplication.java │ │ ├── BuriedPointEventImpl.java │ │ ├── ConstantVideo.java │ │ ├── ImageUtil.java │ │ ├── MainActivity.java │ │ ├── ScreenDensityUtils.java │ │ ├── demo │ │ ├── DemoActivity.java │ │ ├── ExoActivity.java │ │ ├── IjkActivity.java │ │ ├── MediaActivity.java │ │ └── MediaActivity2.java │ │ ├── m3u8 │ │ └── M3u8Activity.java │ │ ├── music │ │ ├── MusicPlayerActivity.java │ │ └── PlayMusicFragment.java │ │ ├── newPlayer │ │ ├── activity │ │ │ ├── DetailActivity.java │ │ │ ├── IntentKeys.java │ │ │ ├── MultipleActivity.java │ │ │ ├── NormalActivity.java │ │ │ └── TypeActivity.java │ │ ├── ad │ │ │ ├── AdActivity.java │ │ │ └── AdControlView.java │ │ ├── clarity │ │ │ ├── ClarityActivity.java │ │ │ └── DefinitionControlView.java │ │ ├── danmu │ │ │ ├── CenteredImageSpan.java │ │ │ ├── DanmuActivity.java │ │ │ └── MyDanmakuView.java │ │ ├── list │ │ │ ├── ContinuousVideoActivity.java │ │ │ ├── OnItemChildClickListener.java │ │ │ ├── OnItemClickListener.java │ │ │ ├── PlayerMonitor.java │ │ │ ├── RecyclerView2Fragment.java │ │ │ ├── RecyclerViewAutoPlayFragment.java │ │ │ ├── RecyclerViewFragment.java │ │ │ ├── SeamlessPlayFragment.java │ │ │ ├── TestListActivity.java │ │ │ └── VideoRecyclerViewAdapter.java │ │ ├── pip │ │ │ ├── PipActivity.java │ │ │ └── PipListActivity.java │ │ ├── surface │ │ │ ├── MySurfaceView.java │ │ │ └── TestSurfaceActivity.java │ │ ├── tiktok │ │ │ ├── TikTok1Activity.java │ │ │ ├── TikTok1ListAdapter.java │ │ │ ├── TikTok1ListFragment.java │ │ │ ├── TikTok2Activity.java │ │ │ ├── TikTokListAdapter.java │ │ │ ├── TikTokListFragment.java │ │ │ ├── TikTokRenderView.java │ │ │ ├── TikTokRenderViewFactory.java │ │ │ ├── TikTokView.java │ │ │ └── Tiktok2Adapter.java │ │ └── tiny │ │ │ ├── TestFullActivity.java │ │ │ └── TinyScreenActivity.java │ │ └── oldPlayer │ │ ├── FloatPlayerView.java │ │ ├── HomeKeyWatcher.java │ │ ├── OldActivity.java │ │ ├── TestClarityActivity.java │ │ ├── TestEightVideoActivity.java │ │ ├── TestFragment.java │ │ ├── TestFragmentActivity.java │ │ ├── TestFullActivity2.java │ │ ├── TestListFragment.java │ │ ├── TestNormalActivity.java │ │ ├── TestRecyclerActivity.java │ │ ├── TestSavePosActivity.java │ │ ├── TestTinyActivity.java │ │ ├── TestWindowActivity.java │ │ ├── Video.java │ │ └── VideoAdapter.java │ └── res │ ├── anim │ ├── fragment_slide_down.xml │ └── fragment_slide_up.xml │ ├── drawable-xhdpi │ └── ic_volume.png │ ├── drawable-xxhdpi │ ├── ic_play_bar_btn_next.png │ ├── ic_play_bar_btn_pause.png │ ├── ic_play_bar_btn_play.png │ ├── ic_play_bar_playlist.png │ ├── ic_play_btn_cmt.png │ ├── ic_play_btn_cmt_pre.png │ ├── ic_play_btn_delete.png │ ├── ic_play_btn_deleted.png │ ├── ic_play_btn_loop.png │ ├── ic_play_btn_loop_pressed.png │ ├── ic_play_btn_love.png │ ├── ic_play_btn_loved.png │ ├── ic_play_btn_next.png │ ├── ic_play_btn_next_pressed.png │ ├── ic_play_btn_one.png │ ├── ic_play_btn_one_pressed.png │ ├── ic_play_btn_pause.png │ ├── ic_play_btn_pause_pressed.png │ ├── ic_play_btn_play.png │ ├── ic_play_btn_play_pressed.png │ ├── ic_play_btn_prev.png │ ├── ic_play_btn_prev_pressed.png │ ├── ic_play_btn_shuffle.png │ ├── ic_play_btn_shuffle_pressed.png │ ├── ic_play_btn_src_prs.png │ ├── ic_seek_bar_progress_btn.png │ ├── ic_seek_bar_volume_btn.png │ ├── play_icn_more.png │ └── play_page_default_bg.jpg │ ├── drawable │ ├── btn_action_bg_selector.xml │ ├── image_default.jpg │ ├── play_bar_btn_play_pause_selector.xml │ ├── play_btn_loop_selector.xml │ ├── play_btn_next_selector.xml │ ├── play_btn_one_selector.xml │ ├── play_btn_play_pause_selector.xml │ ├── play_btn_play_selector.xml │ ├── play_btn_prev_selector.xml │ ├── play_btn_shuffle_selector.xml │ ├── play_mode_level_list.xml │ ├── seek_bar_progress_style.xml │ ├── seek_bar_volume_style.xml │ └── shape_ad_bg.xml │ ├── layout │ ├── activity_ad_video.xml │ ├── activity_danmu_player.xml │ ├── activity_demo_player.xml │ ├── activity_detail_video.xml │ ├── activity_exo_player.xml │ ├── activity_full_video1.xml │ ├── activity_full_video2.xml │ ├── activity_ijk_player.xml │ ├── activity_m3u8_view.xml │ ├── activity_main.xml │ ├── activity_media_player.xml │ ├── activity_media_player2.xml │ ├── activity_multiple_play.xml │ ├── activity_music_player.xml │ ├── activity_new.xml │ ├── activity_normal_video.xml │ ├── activity_old.xml │ ├── activity_pip_video.xml │ ├── activity_test.xml │ ├── activity_test_fragment.xml │ ├── activity_test_video2.xml │ ├── activity_test_video3.xml │ ├── activity_test_window.xml │ ├── activity_tiktok2.xml │ ├── activity_video.xml │ ├── base_recycler_view.xml │ ├── fragment_play_music.xml │ ├── include_play_bar.xml │ ├── include_play_page_controller.xml │ ├── item_my_video.xml │ ├── item_tik_tok.xml │ ├── item_tiktok_list.xml │ ├── item_video.xml │ ├── layout_ad_control_view.xml │ ├── layout_definition_control_view.xml │ ├── layout_rate_item.xml │ ├── layout_rate_pop.xml │ └── layout_tiktok_controller.xml │ ├── mipmap-hdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── mipmap-mdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── mipmap-xhdpi │ └── ic_launcher.png │ ├── mipmap-xxhdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── mipmap-xxxhdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── values │ ├── colors.xml │ ├── strings.xml │ └── styles.xml │ └── xml │ └── network_security_config.xml ├── LICENSE ├── MusicPlayer ├── .gitignore ├── build.gradle ├── consumer-rules.pro ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── yc │ │ └── music │ │ ├── config │ │ ├── MusicConstant.java │ │ ├── MusicPlayAction.java │ │ └── PlayModeEnum.java │ │ ├── inter │ │ ├── EventCallback.java │ │ └── OnPlayerEventListener.java │ │ ├── manager │ │ ├── AudioFocusManager.java │ │ ├── AudioSoundManager.java │ │ └── MediaSessionManager.java │ │ ├── model │ │ └── AudioBean.java │ │ ├── receiver │ │ ├── AudioBroadcastReceiver.java │ │ ├── AudioEarPhoneReceiver.java │ │ ├── EarphoneControlReceiver.java │ │ └── NotificationStatusBarReceiver.java │ │ ├── service │ │ └── PlayService.java │ │ ├── tool │ │ ├── BaseAppHelper.java │ │ └── QuitTimerHelper.java │ │ └── utils │ │ ├── MusicLogUtils.java │ │ ├── MusicSpUtils.java │ │ ├── NotificationHelper.java │ │ └── NotificationUtils.java │ └── res │ ├── drawable-xhdpi │ ├── default_cover.png │ ├── notify_btn_dark_next_normal.png │ ├── notify_btn_dark_pause2_normal.png │ ├── notify_btn_dark_pause_normal.png │ ├── notify_btn_dark_play_normal.png │ └── notify_btn_dark_prev_normal.png │ ├── layout │ └── notification_player.xml │ └── values │ ├── colors.xml │ ├── strings.xml │ └── styles.xml ├── README.md ├── VideoBarrage ├── .gitignore ├── build.gradle ├── consumer-rules.pro ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── yc │ └── videobarrage │ └── Test.java ├── VideoCache ├── .gitignore ├── build.gradle ├── consumer-rules.pro ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── yc │ └── videocache │ ├── ByteArrayCache.java │ ├── ByteArraySource.java │ ├── Cache.java │ ├── CacheListener.java │ ├── Config.java │ ├── GetRequest.java │ ├── HttpProxyCache.java │ ├── HttpProxyCacheServer.java │ ├── HttpProxyCacheServerClients.java │ ├── HttpUrlSource.java │ ├── IgnoreHostProxySelector.java │ ├── InterruptedProxyCacheException.java │ ├── Logger.java │ ├── Pinger.java │ ├── Preconditions.java │ ├── ProxyCache.java │ ├── ProxyCacheException.java │ ├── ProxyCacheUtils.java │ ├── Source.java │ ├── SourceInfo.java │ ├── StorageUtils.java │ ├── cache │ ├── PreloadManager.java │ ├── PreloadTask.java │ └── ProxyVideoCacheManager.java │ ├── file │ ├── DiskUsage.java │ ├── FileCache.java │ ├── FileNameGenerator.java │ ├── Files.java │ ├── LruDiskUsage.java │ ├── Md5FileNameGenerator.java │ ├── TotalCountLruDiskUsage.java │ ├── TotalSizeLruDiskUsage.java │ └── UnlimitedDiskUsage.java │ ├── headers │ ├── EmptyHeadersInjector.java │ └── HeaderInjector.java │ └── sourcestorage │ ├── DatabaseSourceInfoStorage.java │ ├── NoSourceInfoStorage.java │ ├── SourceInfoStorage.java │ └── SourceInfoStorageFactory.java ├── VideoGradle └── video.gradle ├── VideoKernel ├── .gitignore ├── build.gradle ├── consumer-rules.pro ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── yc │ └── kernel │ ├── factory │ └── PlayerFactory.java │ ├── impl │ ├── exo │ │ ├── ExoMediaPlayer.java │ │ ├── ExoMediaSourceHelper.java │ │ └── ExoPlayerFactory.java │ ├── ijk │ │ ├── IjkPlayerFactory.java │ │ ├── IjkVideoPlayer.java │ │ └── RawDataSourceProvider.java │ ├── media │ │ ├── AndroidMediaPlayer.java │ │ └── MediaPlayerFactory.java │ └── tx │ │ ├── TxMediaPlayer.java │ │ └── TxPlayerFactory.java │ ├── inter │ ├── AbstractVideoPlayer.java │ └── VideoPlayerListener.java │ └── utils │ ├── PlayerConstant.java │ ├── PlayerFactoryUtils.java │ └── VideoLogUtils.java ├── VideoM3u8 ├── .gitignore ├── build.gradle ├── libs │ └── commons-io-2.5.jar ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── yc │ │ └── m3u8 │ │ ├── bean │ │ ├── M3u8.java │ │ └── M3u8Ts.java │ │ ├── inter │ │ ├── BaseListener.java │ │ ├── DownLoadListener.java │ │ ├── M3U8Listener.java │ │ ├── OnDownloadListener.java │ │ └── OnM3u8InfoListener.java │ │ ├── manager │ │ ├── M3u8InfoManger.java │ │ ├── M3u8LiveManger.java │ │ └── M3u8Manger.java │ │ ├── task │ │ └── M3u8DownloadTask.java │ │ └── utils │ │ ├── M3u8FileUtils.java │ │ └── NetSpeedUtils.java │ └── res │ └── values │ └── strings.xml ├── VideoPlayer ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── yc │ │ └── video │ │ ├── bridge │ │ └── ControlWrapper.java │ │ ├── config │ │ ├── BuriedPointEvent.java │ │ ├── ConstantKeys.java │ │ ├── VideoInfoBean.java │ │ └── VideoPlayerConfig.java │ │ ├── controller │ │ ├── BaseVideoController.java │ │ ├── GestureVideoController.java │ │ ├── IGestureComponent.java │ │ ├── InterVideoController.java │ │ ├── InterViewController.java │ │ └── OrientationHelper.java │ │ ├── old │ │ ├── controller │ │ │ ├── AbsVideoPlayerController.java │ │ │ ├── IVideoController.java │ │ │ └── VideoPlayerController.java │ │ ├── dialog │ │ │ └── ChangeClarityDialog.java │ │ ├── listener │ │ │ ├── OnClarityChangedListener.java │ │ │ ├── OnPlayerStatesListener.java │ │ │ ├── OnPlayerTypeListener.java │ │ │ └── OnVideoControlListener.java │ │ ├── other │ │ │ ├── BatterReceiver.java │ │ │ ├── NetChangedReceiver.java │ │ │ └── VideoPlayerManager.java │ │ ├── player │ │ │ ├── IVideoPlayer.java │ │ │ ├── OldVideoPlayer.java │ │ │ └── VideoMediaPlayer.java │ │ └── surface │ │ │ ├── VideoSurfaceView.java │ │ │ └── VideoTextureView.java │ │ ├── player │ │ ├── AudioFocusHelper.java │ │ ├── InterVideoPlayer.java │ │ ├── OnVideoStateListener.java │ │ ├── ProgressManager.java │ │ ├── SimpleStateListener.java │ │ ├── VideoPlayer.java │ │ ├── VideoPlayerBuilder.java │ │ ├── VideoPlayerHelper.java │ │ └── VideoViewManager.java │ │ ├── surface │ │ ├── InterSurfaceView.java │ │ ├── MeasureHelper.java │ │ ├── RenderSurfaceView.java │ │ ├── RenderTextureView.java │ │ ├── SurfaceFactory.java │ │ ├── SurfaceViewFactory.java │ │ └── TextureViewFactory.java │ │ ├── tool │ │ ├── BaseToast.java │ │ ├── CountDownTimer.java │ │ ├── NetworkUtils.java │ │ ├── PlayerUtils.java │ │ ├── StatesCutoutUtils.java │ │ └── VideoException.java │ │ └── ui │ │ ├── more │ │ ├── CustomNetworkView.java │ │ └── CustomTrailersView.java │ │ ├── pip │ │ ├── CustomFloatController.java │ │ ├── CustomFloatView.java │ │ ├── FloatVideoManager.java │ │ └── FloatVideoView.java │ │ └── view │ │ ├── BasisVideoController.java │ │ ├── CustomBottomView.java │ │ ├── CustomCompleteView.java │ │ ├── CustomErrorView.java │ │ ├── CustomGestureView.java │ │ ├── CustomLiveControlView.java │ │ ├── CustomOncePlayView.java │ │ ├── CustomPrepareView.java │ │ ├── CustomTitleView.java │ │ └── InterControlView.java │ └── res │ ├── anim │ ├── anim_window_enter.xml │ └── anim_window_exit.xml │ ├── color │ └── select_change_clarity_color.xml │ ├── drawable-xhdpi │ ├── battery_10.png │ ├── battery_100.png │ ├── battery_20.png │ ├── battery_50.png │ ├── battery_80.png │ ├── battery_charging.png │ ├── battery_full.png │ ├── ic_back_close.png │ ├── ic_palyer_brightness.png │ ├── ic_palyer_share.png │ ├── ic_palyer_volume.png │ ├── ic_player_audio.png │ ├── ic_player_back.png │ ├── ic_player_center_start.png │ ├── ic_player_close.png │ ├── ic_player_dl.png │ ├── ic_player_fast_forward.png │ ├── ic_player_fast_rewind.png │ ├── ic_player_lock_close.png │ ├── ic_player_lock_open.png │ ├── ic_player_menu.png │ ├── ic_player_open.png │ ├── ic_player_pause.png │ ├── ic_player_replay.png │ ├── ic_player_share.png │ ├── ic_player_start.png │ ├── ic_player_tv.png │ ├── ic_player_volume_off.png │ ├── ic_player_volume_up.png │ ├── icon_action_refresh.png │ ├── icon_pause_center.png │ ├── icon_play_center.png │ ├── pb_loading_bg.png │ ├── player_mask_bottom.png │ └── player_mask_top.png │ ├── drawable-xxhdpi │ ├── ic_player_audio.png │ ├── ic_player_dl.png │ ├── ic_player_menu.png │ ├── ic_player_share.png │ └── ic_player_tv.png │ ├── drawable │ ├── bg_change_clarity_checked.xml │ ├── bg_change_clarity_normal.xml │ ├── bg_radius_4.xml │ ├── bg_retry.xml │ ├── pb_change.xml │ ├── pb_loading_ring.xml │ ├── progress_bar_style.xml │ ├── seek_progress.xml │ ├── seek_thumb.xml │ ├── seek_thumb_normal.xml │ ├── seek_thumb_pressed.xml │ ├── select_change_clarity.xml │ ├── selector_bot_play_button.xml │ ├── selector_full_screen_button.xml │ ├── selector_lock_button.xml │ ├── selector_play_button.xml │ ├── shape_back_bg.xml │ ├── shape_float_window_bg.xml │ ├── shape_lock_bg.xml │ ├── shape_play_bg.xml │ └── shape_status_view_bg.xml │ ├── layout │ ├── custom_toast_view.xml │ ├── custom_video_player_bottom.xml │ ├── custom_video_player_change_brightness.xml │ ├── custom_video_player_change_position.xml │ ├── custom_video_player_change_volume.xml │ ├── custom_video_player_completed.xml │ ├── custom_video_player_error.xml │ ├── custom_video_player_float.xml │ ├── custom_video_player_gesture.xml │ ├── custom_video_player_live.xml │ ├── custom_video_player_loading.xml │ ├── custom_video_player_once_live.xml │ ├── custom_video_player_prepare.xml │ ├── custom_video_player_standard.xml │ ├── custom_video_player_top.xml │ ├── custom_view_guide.xml │ ├── old_video_clarity.xml │ ├── old_video_player.xml │ ├── old_video_player_bottom.xml │ ├── old_video_player_completed.xml │ ├── old_video_player_error.xml │ ├── old_video_player_line.xml │ ├── old_video_player_top.xml │ └── old_view_window_dialog.xml │ └── values │ ├── attrs.xml │ ├── colors.xml │ ├── strings.xml │ └── styles.xml ├── VideoRecorder ├── .gitignore ├── build.gradle ├── consumer-rules.pro ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── yc │ └── videorecorder │ └── Test.java ├── VideoScreen ├── .gitignore ├── build.gradle ├── consumer-rules.pro ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── yc │ └── videoscreen │ └── Test.java ├── VideoSqlLite ├── .gitignore ├── build.gradle ├── consumer-rules.pro ├── proguard-rules.pro ├── read │ ├── 01.内存缓存之LruCache.md │ ├── 02.磁盘缓存之DiskLruCache.md │ ├── 03.内存磁盘二级缓存.md │ ├── 04.LruCache源码分析.md │ └── 05.DiskLruCache源码分析.md └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── yc │ └── videosqllite │ ├── TestDemo.java │ ├── cache │ ├── InterCache.java │ ├── SystemLruCache.java │ ├── VideoLruCache.java │ └── VideoMapCache.java │ ├── disk │ ├── DiskCacheWriteLocker.java │ ├── DiskFileUtils.java │ ├── DiskLruCache.java │ ├── DiskLruCacheFactory.java │ ├── DiskLruCacheWrapper.java │ ├── DiskUtils.java │ ├── ExternalDiskCacheFactory.java │ ├── InterDiskCache.java │ ├── InterDiskFactory.java │ ├── InternalDiskCacheFactory.java │ ├── SqlLiteCache.java │ ├── StrictLineReader.java │ └── Synthetic.java │ ├── manager │ ├── CacheConfig.java │ └── LocationManager.java │ ├── model │ ├── SafeKeyGenerator.java │ └── VideoLocation.java │ └── utils │ ├── CacheLogUtils.java │ └── VideoMd5Utils.java ├── VideoTool ├── .gitignore ├── build.gradle ├── consumer-rules.pro ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── yc │ │ └── videotool │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ └── java │ │ └── com │ │ └── yc │ │ └── videotool │ │ └── Tool.java │ └── test │ └── java │ └── com │ └── yc │ └── videotool │ └── ExampleUnitTest.java ├── VideoView ├── .gitignore ├── build.gradle ├── consumer-rules.pro ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── yc │ └── videoview │ ├── FloatLifecycle.java │ ├── FloatPhone.java │ ├── FloatToast.java │ ├── FloatView.java │ ├── FloatWindow.java │ ├── IFloatWindow.java │ ├── IFloatWindowImpl.java │ ├── LifecycleListener.java │ ├── MoveType.java │ ├── PermissionActivity.java │ ├── SmallWindowTouch.java │ ├── WindowScreen.java │ └── WindowUtil.java ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── image ├── 101602551518_.pic.jpg ├── 111602569651_.pic.jpg ├── 11602551140_.pic_hd.jpg ├── 121602569652_.pic.jpg ├── 131602569653_.pic.jpg ├── 141602569654_.pic.jpg ├── 151602569655_.pic.jpg ├── 161602569656_.pic.jpg ├── 21602551141_.pic_hd.jpg ├── 31602551142_.pic_hd.jpg ├── 41602551143_.pic_hd.jpg ├── 51602551144_.pic_hd.jpg ├── 61602551145_.pic_hd.jpg ├── 71602551146_.pic_hd.jpg ├── 81602551147_.pic_hd.jpg ├── 91602551148_.pic_hd.jpg ├── 播放器框架总图.jpg ├── 直播服务架构图.png ├── 视频播放器UI.png ├── 视频播放器内核.png ├── 视频播放器内核架构图.jpg ├── 视频播放器层级示例图.jpg ├── 视频播放器库整体介绍.png └── 视频直播流程图.png ├── read ├── 01.视频播放器介绍文档.md ├── 02.视频播放器整体结构.md ├── 03.视频播放器Api说明.md ├── 04.视频播放器封装思路.md ├── 05.播放器内核切换封装.md ├── 06.播放器UI抽取封装.md ├── 07.MediaPlayer详细介绍.md ├── 08.视频播放器优化处理.md ├── 09.视频深度优化处理.md ├── 10.视频全局悬浮窗播放.md ├── 11.视频播放器音频焦点抢占.md ├── 12.视频边播边缓存分析.md ├── 13.视频播放器如何选择.md ├── 14.视频播放器简单案例.md ├── 15.视频播放器流程分析.md ├── 16.视频播放器列表播放.md ├── 17.基础播放器问题记录.md ├── 18.Exo播放器问题记录.md ├── 19.Ijk播放器问题记录.md ├── 20.视频播放器版本更新文档.md ├── 21.视频播放器后期需求.md ├── 22.视频基础概念术语.md ├── 23.视频VideoView学习.md ├── 24.1SurfaceView深入学习.md ├── 24.2SurfaceView源码分析.md ├── 25.TextureView深入学习.md ├── 26.视频编码和解码学习.md ├── 27.视频加密和解密处理.md ├── 28.视频录制和编辑学习.md ├── 29.视频播放器埋点监听.md ├── 30.视频播放器使用设计模式.md ├── 31.音频播放器通用框架.md ├── 32.音频焦点抢占问题.md ├── 34.音频播放锁屏分析.md ├── 35.耳机控制音视频音量.md ├── 40.完整音频播放器分析.md ├── 42.音视频本地文件扫描.md ├── 43.音视频编解码操作.md ├── 43.音频基础知识点.md ├── 45.音视频加密和解密.md ├── 48.音视频问题考点.md ├── 49.参考项目和博客说明.md ├── 50.版本更新说明文档.md ├── 51.直播基础知识点介绍.md ├── 52.直播推流端分析.md └── 53.直播播放端分析.md └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/caches 5 | /.idea/libraries 6 | /.idea/modules.xml 7 | /.idea/workspace.xml 8 | /.idea/navEditor.xml 9 | /.idea/assetWizardSettings.xml 10 | .DS_Store 11 | /build 12 | /captures 13 | .externalNativeBuild 14 | .cxx 15 | 16 | 17 | 18 | 19 | # Built application files 20 | *.apk 21 | *.ap_ 22 | 23 | # Files for the ART/Dalvik VM 24 | *.dex 25 | 26 | # Java class files 27 | *.class 28 | 29 | # Generated files 30 | bin/ 31 | gen/ 32 | out/ 33 | 34 | # Gradle files 35 | .gradle/ 36 | build/ 37 | 38 | # Local configuration file (sdk path, etc) 39 | local.properties 40 | 41 | # Proguard folder generated by Eclipse 42 | proguard/ 43 | 44 | # Log Files 45 | *.log 46 | 47 | # Android Studio Navigation editor temp files 48 | .navigation/ 49 | 50 | # Android Studio captures folder 51 | captures/ 52 | 53 | # Intellij 54 | *.iml 55 | .idea/workspace.xml 56 | .idea/tasks.xml 57 | .idea/gradle.xml 58 | .idea/dictionaries 59 | .idea/libraries 60 | 61 | # Keystore files 62 | *.jks 63 | 64 | # External native build folder generated in Android Studio 2.2 and later 65 | .externalNativeBuild 66 | 67 | # Google Services (e.g. APIs or Firebase) 68 | google-services.json 69 | 70 | # Freeline 71 | freeline.py 72 | freeline/ 73 | freeline_project_description.json 74 | .idea/ 75 | 76 | 77 | -------------------------------------------------------------------------------- /Demo/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /Demo/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | 23 | 24 | #ijkplayer 25 | -keep class tv.danmaku.ijk.media.player.** {*;} 26 | -keep class tv.danmaku.ijk.media.player.IjkMediaPlayer{*;} 27 | -keep class tv.danmaku.ijk.media.player.ffmpeg.FFmpegApi{*;} 28 | 29 | 30 | # 视频播放器 31 | # 视频内核 32 | -keep class com.yc.kernel.**{*;} 33 | # 视频播放器 34 | -keep class com.yc.video.**{*;} 35 | # 视频缓存 36 | -keep class com.yc.videocache.**{*;} 37 | # 视频悬浮view 38 | -keep class com.yc.videoview.**{*;} 39 | # 视频位置记录 40 | -keep class com.yc.videosqllite.**{*;} 41 | # 视频m3u8分片下载和合成 42 | -keep class com.yc.m3u8.**{*;} 43 | 44 | -------------------------------------------------------------------------------- /Demo/src/main/assets/jzvd.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 |
6 |
7 |
8 |

This is webview

9 |
10 |
11 |
12 |
13 | 22 | 23 | -------------------------------------------------------------------------------- /Demo/src/main/assets/local_video.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangchong211/YCVideoPlayer/9d59f95353f81dae9912f0141c00f7944fad944c/Demo/src/main/assets/local_video.mp4 -------------------------------------------------------------------------------- /Demo/src/main/java/com/yc/ycvideoplayer/demo/IjkActivity.java: -------------------------------------------------------------------------------- 1 | package com.yc.ycvideoplayer.demo; 2 | 3 | import android.os.Bundle; 4 | 5 | import androidx.annotation.Nullable; 6 | import androidx.appcompat.app.AppCompatActivity; 7 | 8 | import org.yc.ycvideoplayer.R; 9 | 10 | public class IjkActivity extends AppCompatActivity { 11 | 12 | @Override 13 | protected void onCreate(@Nullable Bundle savedInstanceState) { 14 | super.onCreate(savedInstanceState); 15 | setContentView(R.layout.activity_ijk_player); 16 | } 17 | 18 | 19 | } 20 | -------------------------------------------------------------------------------- /Demo/src/main/java/com/yc/ycvideoplayer/newPlayer/activity/IntentKeys.java: -------------------------------------------------------------------------------- 1 | package com.yc.ycvideoplayer.newPlayer.activity; 2 | 3 | public class IntentKeys { 4 | 5 | public static final String URL = "url"; 6 | public static final String SEAMLESS_PLAY = "seamless_play"; 7 | public static final String TITLE = "title"; 8 | public static final String IS_LIVE = "isLive"; 9 | } 10 | -------------------------------------------------------------------------------- /Demo/src/main/java/com/yc/ycvideoplayer/newPlayer/danmu/CenteredImageSpan.java: -------------------------------------------------------------------------------- 1 | package com.yc.ycvideoplayer.newPlayer.danmu; 2 | 3 | import android.graphics.Canvas; 4 | import android.graphics.Paint; 5 | import android.graphics.Rect; 6 | import android.graphics.drawable.Drawable; 7 | import android.text.style.ImageSpan; 8 | 9 | /** 10 | * 图文混排使图片文字基于中线对齐 11 | */ 12 | public class CenteredImageSpan extends ImageSpan { 13 | 14 | public CenteredImageSpan(final Drawable drawable) { 15 | super(drawable); 16 | } 17 | 18 | @Override 19 | public int getSize(Paint paint, CharSequence text, int start, int end, 20 | Paint.FontMetricsInt fm) { 21 | Drawable d = getDrawable(); 22 | Rect rect = d.getBounds(); 23 | if (fm != null) { 24 | Paint.FontMetricsInt fmPaint = paint.getFontMetricsInt(); 25 | int fontHeight = fmPaint.bottom - fmPaint.top; 26 | int drHeight = rect.bottom - rect.top; 27 | 28 | int top = drHeight / 2 - fontHeight / 4; 29 | int bottom = drHeight / 2 + fontHeight / 4; 30 | 31 | fm.ascent = -bottom; 32 | fm.top = -bottom; 33 | fm.bottom = top; 34 | fm.descent = top; 35 | } 36 | return rect.right; 37 | } 38 | 39 | @Override 40 | public void draw(Canvas canvas, CharSequence text, int start, int end, 41 | float x, int top, int y, int bottom, Paint paint) { 42 | Drawable b = getDrawable(); 43 | canvas.save(); 44 | int transY; 45 | transY = ((bottom - top) - b.getBounds().bottom) / 2 + top; 46 | canvas.translate(x, transY); 47 | b.draw(canvas); 48 | canvas.restore(); 49 | } 50 | } 51 | 52 | -------------------------------------------------------------------------------- /Demo/src/main/java/com/yc/ycvideoplayer/newPlayer/list/OnItemChildClickListener.java: -------------------------------------------------------------------------------- 1 | package com.yc.ycvideoplayer.newPlayer.list; 2 | 3 | public interface OnItemChildClickListener { 4 | void onItemChildClick(int position); 5 | } 6 | -------------------------------------------------------------------------------- /Demo/src/main/java/com/yc/ycvideoplayer/newPlayer/list/OnItemClickListener.java: -------------------------------------------------------------------------------- 1 | package com.yc.ycvideoplayer.newPlayer.list; 2 | 3 | public interface OnItemClickListener { 4 | void onItemClick(int position); 5 | } -------------------------------------------------------------------------------- /Demo/src/main/java/com/yc/ycvideoplayer/newPlayer/surface/TestSurfaceActivity.java: -------------------------------------------------------------------------------- 1 | package com.yc.ycvideoplayer.newPlayer.surface; 2 | 3 | import android.os.Bundle; 4 | import android.view.SurfaceHolder; 5 | import android.widget.FrameLayout; 6 | import android.widget.RelativeLayout; 7 | 8 | import androidx.annotation.Nullable; 9 | import androidx.appcompat.app.AppCompatActivity; 10 | 11 | import org.yc.ycvideoplayer.R; 12 | 13 | public class TestSurfaceActivity extends AppCompatActivity { 14 | 15 | private MySurfaceView mSurfaceView; 16 | 17 | @Override 18 | protected void onCreate(@Nullable Bundle savedInstanceState) { 19 | super.onCreate(savedInstanceState); 20 | setContentView(R.layout.activity_test); 21 | 22 | FrameLayout fl = (FrameLayout) findViewById(R.id.fl); 23 | 24 | 25 | mSurfaceView = new MySurfaceView(this); 26 | RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams( 27 | RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT); 28 | fl.addView(mSurfaceView, params); 29 | 30 | SurfaceHolder holder = mSurfaceView.getHolder(); 31 | //增加surfaceView的监听 32 | holder.addCallback(new SurfaceHolder.Callback() { 33 | @Override 34 | public void surfaceCreated(SurfaceHolder surfaceHolder) { 35 | 36 | } 37 | 38 | @Override 39 | public void surfaceChanged(SurfaceHolder surfaceHolder, int format, int width, int height) { 40 | 41 | } 42 | 43 | @Override 44 | public void surfaceDestroyed(SurfaceHolder surfaceHolder) { 45 | } 46 | }); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /Demo/src/main/java/com/yc/ycvideoplayer/newPlayer/tiktok/TikTokRenderViewFactory.java: -------------------------------------------------------------------------------- 1 | package com.yc.ycvideoplayer.newPlayer.tiktok; 2 | 3 | import android.content.Context; 4 | 5 | import com.yc.video.surface.InterSurfaceView; 6 | import com.yc.video.surface.SurfaceFactory; 7 | import com.yc.video.surface.RenderTextureView; 8 | 9 | 10 | public class TikTokRenderViewFactory extends SurfaceFactory { 11 | 12 | public static TikTokRenderViewFactory create() { 13 | return new TikTokRenderViewFactory(); 14 | } 15 | 16 | @Override 17 | public InterSurfaceView createRenderView(Context context) { 18 | return new TikTokRenderView(new RenderTextureView(context)); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Demo/src/main/java/com/yc/ycvideoplayer/oldPlayer/TestFragmentActivity.java: -------------------------------------------------------------------------------- 1 | package com.yc.ycvideoplayer.oldPlayer; 2 | 3 | import com.yc.ycvideoplayer.BaseActivity; 4 | 5 | import org.yc.ycvideoplayer.R; 6 | import com.yc.video.old.other.VideoPlayerManager; 7 | 8 | 9 | /** 10 | * @author yc 11 | */ 12 | public class TestFragmentActivity extends BaseActivity { 13 | 14 | @Override 15 | protected void onStop() { 16 | super.onStop(); 17 | VideoPlayerManager.instance().releaseVideoPlayer(); 18 | } 19 | 20 | @Override 21 | public void onBackPressed() { 22 | if (VideoPlayerManager.instance().onBackPressed()) { 23 | return; 24 | } 25 | super.onBackPressed(); 26 | } 27 | 28 | 29 | @Override 30 | public int getContentView() { 31 | return R.layout.activity_test_fragment; 32 | } 33 | 34 | @Override 35 | public void initView() { 36 | getSupportFragmentManager() 37 | .beginTransaction() 38 | .add(R.id.container, new TestFragment()) 39 | .commit(); 40 | } 41 | 42 | @Override 43 | public void initListener() { 44 | 45 | } 46 | 47 | @Override 48 | public void initData() { 49 | 50 | } 51 | 52 | } 53 | -------------------------------------------------------------------------------- /Demo/src/main/java/com/yc/ycvideoplayer/oldPlayer/Video.java: -------------------------------------------------------------------------------- 1 | package com.yc.ycvideoplayer.oldPlayer; 2 | 3 | public class Video { 4 | 5 | private String title; 6 | private String url; 7 | 8 | public Video(String title, String url) { 9 | this.title = title; 10 | this.url = url; 11 | } 12 | 13 | public String getTitle() { 14 | return title; 15 | } 16 | 17 | public void setTitle(String title) { 18 | this.title = title; 19 | } 20 | 21 | public String getUrl() { 22 | return url; 23 | } 24 | 25 | public void setUrl(String url) { 26 | this.url = url; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Demo/src/main/res/anim/fragment_slide_down.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | -------------------------------------------------------------------------------- /Demo/src/main/res/anim/fragment_slide_up.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | -------------------------------------------------------------------------------- /Demo/src/main/res/drawable-xhdpi/ic_volume.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangchong211/YCVideoPlayer/9d59f95353f81dae9912f0141c00f7944fad944c/Demo/src/main/res/drawable-xhdpi/ic_volume.png -------------------------------------------------------------------------------- /Demo/src/main/res/drawable-xxhdpi/ic_play_bar_btn_next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangchong211/YCVideoPlayer/9d59f95353f81dae9912f0141c00f7944fad944c/Demo/src/main/res/drawable-xxhdpi/ic_play_bar_btn_next.png -------------------------------------------------------------------------------- /Demo/src/main/res/drawable-xxhdpi/ic_play_bar_btn_pause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangchong211/YCVideoPlayer/9d59f95353f81dae9912f0141c00f7944fad944c/Demo/src/main/res/drawable-xxhdpi/ic_play_bar_btn_pause.png -------------------------------------------------------------------------------- /Demo/src/main/res/drawable-xxhdpi/ic_play_bar_btn_play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangchong211/YCVideoPlayer/9d59f95353f81dae9912f0141c00f7944fad944c/Demo/src/main/res/drawable-xxhdpi/ic_play_bar_btn_play.png -------------------------------------------------------------------------------- /Demo/src/main/res/drawable-xxhdpi/ic_play_bar_playlist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangchong211/YCVideoPlayer/9d59f95353f81dae9912f0141c00f7944fad944c/Demo/src/main/res/drawable-xxhdpi/ic_play_bar_playlist.png -------------------------------------------------------------------------------- /Demo/src/main/res/drawable-xxhdpi/ic_play_btn_cmt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangchong211/YCVideoPlayer/9d59f95353f81dae9912f0141c00f7944fad944c/Demo/src/main/res/drawable-xxhdpi/ic_play_btn_cmt.png -------------------------------------------------------------------------------- /Demo/src/main/res/drawable-xxhdpi/ic_play_btn_cmt_pre.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangchong211/YCVideoPlayer/9d59f95353f81dae9912f0141c00f7944fad944c/Demo/src/main/res/drawable-xxhdpi/ic_play_btn_cmt_pre.png -------------------------------------------------------------------------------- /Demo/src/main/res/drawable-xxhdpi/ic_play_btn_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangchong211/YCVideoPlayer/9d59f95353f81dae9912f0141c00f7944fad944c/Demo/src/main/res/drawable-xxhdpi/ic_play_btn_delete.png -------------------------------------------------------------------------------- /Demo/src/main/res/drawable-xxhdpi/ic_play_btn_deleted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangchong211/YCVideoPlayer/9d59f95353f81dae9912f0141c00f7944fad944c/Demo/src/main/res/drawable-xxhdpi/ic_play_btn_deleted.png -------------------------------------------------------------------------------- /Demo/src/main/res/drawable-xxhdpi/ic_play_btn_loop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangchong211/YCVideoPlayer/9d59f95353f81dae9912f0141c00f7944fad944c/Demo/src/main/res/drawable-xxhdpi/ic_play_btn_loop.png -------------------------------------------------------------------------------- /Demo/src/main/res/drawable-xxhdpi/ic_play_btn_loop_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangchong211/YCVideoPlayer/9d59f95353f81dae9912f0141c00f7944fad944c/Demo/src/main/res/drawable-xxhdpi/ic_play_btn_loop_pressed.png -------------------------------------------------------------------------------- /Demo/src/main/res/drawable-xxhdpi/ic_play_btn_love.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangchong211/YCVideoPlayer/9d59f95353f81dae9912f0141c00f7944fad944c/Demo/src/main/res/drawable-xxhdpi/ic_play_btn_love.png -------------------------------------------------------------------------------- /Demo/src/main/res/drawable-xxhdpi/ic_play_btn_loved.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangchong211/YCVideoPlayer/9d59f95353f81dae9912f0141c00f7944fad944c/Demo/src/main/res/drawable-xxhdpi/ic_play_btn_loved.png -------------------------------------------------------------------------------- /Demo/src/main/res/drawable-xxhdpi/ic_play_btn_next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangchong211/YCVideoPlayer/9d59f95353f81dae9912f0141c00f7944fad944c/Demo/src/main/res/drawable-xxhdpi/ic_play_btn_next.png -------------------------------------------------------------------------------- /Demo/src/main/res/drawable-xxhdpi/ic_play_btn_next_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangchong211/YCVideoPlayer/9d59f95353f81dae9912f0141c00f7944fad944c/Demo/src/main/res/drawable-xxhdpi/ic_play_btn_next_pressed.png -------------------------------------------------------------------------------- /Demo/src/main/res/drawable-xxhdpi/ic_play_btn_one.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangchong211/YCVideoPlayer/9d59f95353f81dae9912f0141c00f7944fad944c/Demo/src/main/res/drawable-xxhdpi/ic_play_btn_one.png -------------------------------------------------------------------------------- /Demo/src/main/res/drawable-xxhdpi/ic_play_btn_one_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangchong211/YCVideoPlayer/9d59f95353f81dae9912f0141c00f7944fad944c/Demo/src/main/res/drawable-xxhdpi/ic_play_btn_one_pressed.png -------------------------------------------------------------------------------- /Demo/src/main/res/drawable-xxhdpi/ic_play_btn_pause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangchong211/YCVideoPlayer/9d59f95353f81dae9912f0141c00f7944fad944c/Demo/src/main/res/drawable-xxhdpi/ic_play_btn_pause.png -------------------------------------------------------------------------------- /Demo/src/main/res/drawable-xxhdpi/ic_play_btn_pause_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangchong211/YCVideoPlayer/9d59f95353f81dae9912f0141c00f7944fad944c/Demo/src/main/res/drawable-xxhdpi/ic_play_btn_pause_pressed.png -------------------------------------------------------------------------------- /Demo/src/main/res/drawable-xxhdpi/ic_play_btn_play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangchong211/YCVideoPlayer/9d59f95353f81dae9912f0141c00f7944fad944c/Demo/src/main/res/drawable-xxhdpi/ic_play_btn_play.png -------------------------------------------------------------------------------- /Demo/src/main/res/drawable-xxhdpi/ic_play_btn_play_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangchong211/YCVideoPlayer/9d59f95353f81dae9912f0141c00f7944fad944c/Demo/src/main/res/drawable-xxhdpi/ic_play_btn_play_pressed.png -------------------------------------------------------------------------------- /Demo/src/main/res/drawable-xxhdpi/ic_play_btn_prev.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangchong211/YCVideoPlayer/9d59f95353f81dae9912f0141c00f7944fad944c/Demo/src/main/res/drawable-xxhdpi/ic_play_btn_prev.png -------------------------------------------------------------------------------- /Demo/src/main/res/drawable-xxhdpi/ic_play_btn_prev_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangchong211/YCVideoPlayer/9d59f95353f81dae9912f0141c00f7944fad944c/Demo/src/main/res/drawable-xxhdpi/ic_play_btn_prev_pressed.png -------------------------------------------------------------------------------- /Demo/src/main/res/drawable-xxhdpi/ic_play_btn_shuffle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangchong211/YCVideoPlayer/9d59f95353f81dae9912f0141c00f7944fad944c/Demo/src/main/res/drawable-xxhdpi/ic_play_btn_shuffle.png -------------------------------------------------------------------------------- /Demo/src/main/res/drawable-xxhdpi/ic_play_btn_shuffle_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangchong211/YCVideoPlayer/9d59f95353f81dae9912f0141c00f7944fad944c/Demo/src/main/res/drawable-xxhdpi/ic_play_btn_shuffle_pressed.png -------------------------------------------------------------------------------- /Demo/src/main/res/drawable-xxhdpi/ic_play_btn_src_prs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangchong211/YCVideoPlayer/9d59f95353f81dae9912f0141c00f7944fad944c/Demo/src/main/res/drawable-xxhdpi/ic_play_btn_src_prs.png -------------------------------------------------------------------------------- /Demo/src/main/res/drawable-xxhdpi/ic_seek_bar_progress_btn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangchong211/YCVideoPlayer/9d59f95353f81dae9912f0141c00f7944fad944c/Demo/src/main/res/drawable-xxhdpi/ic_seek_bar_progress_btn.png -------------------------------------------------------------------------------- /Demo/src/main/res/drawable-xxhdpi/ic_seek_bar_volume_btn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangchong211/YCVideoPlayer/9d59f95353f81dae9912f0141c00f7944fad944c/Demo/src/main/res/drawable-xxhdpi/ic_seek_bar_volume_btn.png -------------------------------------------------------------------------------- /Demo/src/main/res/drawable-xxhdpi/play_icn_more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangchong211/YCVideoPlayer/9d59f95353f81dae9912f0141c00f7944fad944c/Demo/src/main/res/drawable-xxhdpi/play_icn_more.png -------------------------------------------------------------------------------- /Demo/src/main/res/drawable-xxhdpi/play_page_default_bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangchong211/YCVideoPlayer/9d59f95353f81dae9912f0141c00f7944fad944c/Demo/src/main/res/drawable-xxhdpi/play_page_default_bg.jpg -------------------------------------------------------------------------------- /Demo/src/main/res/drawable/btn_action_bg_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /Demo/src/main/res/drawable/image_default.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangchong211/YCVideoPlayer/9d59f95353f81dae9912f0141c00f7944fad944c/Demo/src/main/res/drawable/image_default.jpg -------------------------------------------------------------------------------- /Demo/src/main/res/drawable/play_bar_btn_play_pause_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /Demo/src/main/res/drawable/play_btn_loop_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /Demo/src/main/res/drawable/play_btn_next_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /Demo/src/main/res/drawable/play_btn_one_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /Demo/src/main/res/drawable/play_btn_play_pause_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /Demo/src/main/res/drawable/play_btn_play_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /Demo/src/main/res/drawable/play_btn_prev_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /Demo/src/main/res/drawable/play_btn_shuffle_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /Demo/src/main/res/drawable/play_mode_level_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | 12 | -------------------------------------------------------------------------------- /Demo/src/main/res/drawable/seek_bar_progress_style.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /Demo/src/main/res/drawable/seek_bar_volume_style.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /Demo/src/main/res/drawable/shape_ad_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /Demo/src/main/res/layout/activity_detail_video.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 15 | 16 | -------------------------------------------------------------------------------- /Demo/src/main/res/layout/activity_exo_player.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /Demo/src/main/res/layout/activity_full_video1.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 15 | 16 | 17 |