├── .gitignore ├── .idea ├── .gitignore ├── .name ├── codeStyles │ ├── Project.xml │ └── codeStyleConfig.xml ├── compiler.xml ├── encodings.xml ├── gradle.xml ├── jarRepositories.xml ├── misc.xml ├── runConfigurations.xml └── vcs.xml ├── README.md ├── VideoPlayModule-Lite ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── chuangyuan │ │ │ └── ycj │ │ │ └── videolibrary │ │ │ ├── danmuku │ │ │ ├── BiliDanmukuParser.java │ │ │ ├── DanamakuAdapter.java │ │ │ ├── DanmuWebView.java │ │ │ └── JSONDanmukuParser.java │ │ │ ├── factory │ │ │ ├── DefaultCacheDataSourceFactory.java │ │ │ ├── HttpDefaultDataSourceFactory.java │ │ │ ├── JDefaultDataSourceFactory.java │ │ │ └── MyDefaultRenderersFactory.java │ │ │ ├── listener │ │ │ ├── DataSourceListener.java │ │ │ ├── ExoPlayerListener.java │ │ │ ├── ExoPlayerViewListener.java │ │ │ ├── ExoProgressListener.java │ │ │ ├── ItemVideo.java │ │ │ ├── LoadListener.java │ │ │ ├── LoadModelType.java │ │ │ ├── OnGestureBrightnessListener.java │ │ │ ├── OnGestureProgressListener.java │ │ │ ├── OnGestureVolumeListener.java │ │ │ ├── VideoInfoListener.java │ │ │ └── VideoWindowListener.java │ │ │ ├── upstream │ │ │ ├── DefaultDataSource.java │ │ │ ├── DefaultDataSourceFactory.java │ │ │ ├── DefaultHttpDataSource.java │ │ │ ├── DefaultHttpDataSourceFactory.java │ │ │ └── HttpsUtils.java │ │ │ ├── utils │ │ │ ├── ParamsCreator.java │ │ │ └── VideoPlayUtils.java │ │ │ ├── video │ │ │ ├── ExoDataBean.java │ │ │ ├── ExoUserPlayer.java │ │ │ ├── GestureVideoPlayer.java │ │ │ ├── ManualPlayer.java │ │ │ ├── MediaSourceBuilder.java │ │ │ └── VideoPlayerManager.java │ │ │ └── widget │ │ │ ├── ActionControlView.java │ │ │ ├── BaseView.java │ │ │ ├── BelowView.java │ │ │ ├── ExoDefaultTimeBar.java │ │ │ ├── ExoVideoAnim.java │ │ │ ├── GestureControlView.java │ │ │ ├── LockControlView.java │ │ │ ├── SwitchAdapter.java │ │ │ └── VideoPlayerView.java │ └── res │ │ ├── drawable │ │ └── shape_dialog_cardbg.xml │ │ ├── layout │ │ ├── exo_default_preview_layout.xml │ │ ├── simple_exo_belowview.xml │ │ ├── simple_exo_belowview_item.xml │ │ ├── simple_exo_play_btn_hint.xml │ │ ├── simple_exo_play_error.xml │ │ ├── simple_exo_play_load.xml │ │ ├── simple_exo_play_lock.xml │ │ ├── simple_exo_play_replay.xml │ │ ├── simple_exo_playback_list_view.xml │ │ ├── simple_exo_playback_top_view.xml │ │ ├── simple_exo_video_notice.xml │ │ ├── simple_exo_video_progress_dialog.xml │ │ ├── simple_exo_video_temp_fast_dialog.xml │ │ ├── simple_exo_video_temp_fast_dialog2.xml │ │ ├── simple_video_audio_brightness_dialog.xml │ │ └── start_download_dialog.xml │ │ └── values │ │ ├── attrs.xml │ │ └── strings.xml │ └── test │ └── java │ └── chuangyuan │ └── ycj │ └── videolibrary │ └── ExampleUnitTest.java ├── VideoPlayModule ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── chuangyuan │ │ └── ycj │ │ └── videolibrary │ │ └── whole │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ └── java │ │ └── chuangyuan │ │ └── ycj │ │ └── videolibrary │ │ └── whole │ │ ├── MyBundledHlsMediaChunkExtractor.java │ │ ├── MyDefaultExtractorsFactory.java │ │ ├── MyHlsExtractorFactory.java │ │ ├── MyHlsPlaylistTracker.java │ │ └── WholeMediaSource.java │ └── test │ └── java │ └── chuangyuan │ └── ycj │ └── videolibrary │ └── whole │ └── ExampleUnitTest.java ├── VideoUi ├── README.md ├── build.gradle └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── google │ │ └── android │ │ └── exoplayer2 │ │ └── ui │ │ ├── AnimUtils.java │ │ ├── AspectRatioFrameLayout.java │ │ ├── CanvasSubtitleOutput.java │ │ ├── CaptionStyleCompat.java │ │ ├── DefaultMediaDescriptionAdapter.java │ │ ├── DefaultTimeBar.java │ │ ├── DefaultTrackNameProvider.java │ │ ├── DownloadNotificationHelper.java │ │ ├── ExoPlayerControlView.java │ │ ├── ExoPlayerView.java │ │ ├── HtmlUtils.java │ │ ├── PlayerControlView.java │ │ ├── PlayerNotificationManager.java │ │ ├── PlayerView.java │ │ ├── SpannedToHtmlConverter.java │ │ ├── StyledPlayerControlView.java │ │ ├── StyledPlayerControlViewLayoutManager.java │ │ ├── StyledPlayerView.java │ │ ├── SubtitlePainter.java │ │ ├── SubtitleView.java │ │ ├── SubtitleViewUtils.java │ │ ├── TimeBar.java │ │ ├── TrackNameProvider.java │ │ ├── TrackSelectionDialogBuilder.java │ │ ├── TrackSelectionView.java │ │ └── WebViewSubtitleOutput.java │ └── res │ ├── color │ └── exo_exo_video_switch_selector.xml │ ├── drawable-anydpi-v21 │ ├── exo_controls_fastforward.xml │ ├── exo_controls_fullscreen_enter.xml │ ├── exo_controls_fullscreen_exit.xml │ ├── exo_controls_next.xml │ ├── exo_controls_pause.xml │ ├── exo_controls_play.xml │ ├── exo_controls_previous.xml │ ├── exo_controls_repeat_all.xml │ ├── exo_controls_repeat_off.xml │ ├── exo_controls_repeat_one.xml │ ├── exo_controls_rewind.xml │ ├── exo_controls_shuffle.xml │ ├── exo_icon_fastforward.xml │ ├── exo_icon_next.xml │ ├── exo_icon_pause.xml │ ├── exo_icon_play.xml │ ├── exo_icon_previous.xml │ ├── exo_icon_rewind.xml │ └── exo_icon_stop.xml │ ├── drawable-anydpi │ ├── ic_fullscreen_exit_white.xml │ └── ic_fullscreen_white.xml │ ├── drawable-hdpi │ ├── ic_fullscreen_exit_white.png │ └── ic_fullscreen_white.png │ ├── drawable-mdpi │ ├── ic_fullscreen_exit_white.png │ └── ic_fullscreen_white.png │ ├── drawable-xxhdpi │ ├── exo_controls_pause.png │ ├── exo_controls_play.png │ ├── exo_controls_repeat_all.png │ ├── exo_controls_repeat_off.png │ ├── exo_controls_repeat_one.png │ ├── exo_edit_mode_logo.png │ ├── exo_ic_audiotrack.png │ ├── exo_ic_check.png │ ├── exo_ic_chevron_left.png │ ├── exo_ic_chevron_right.png │ ├── exo_ic_default_album_image.png │ ├── exo_ic_forward.png │ ├── exo_ic_fullscreen_enter.png │ ├── exo_ic_fullscreen_exit.png │ ├── exo_ic_pause_circle_filled.png │ ├── exo_ic_play_circle_filled.png │ ├── exo_ic_rewind.png │ ├── exo_ic_settings.png │ ├── exo_ic_skip_next.png │ ├── exo_ic_skip_previous.png │ ├── exo_ic_speed.png │ ├── exo_ic_subtitle_off.png │ ├── exo_ic_subtitle_on.png │ ├── exo_icon_circular_play.png │ ├── exo_icon_fastforward.png │ ├── exo_icon_fullscreen_enter.png │ ├── exo_icon_fullscreen_exit.png │ ├── exo_icon_next.png │ ├── exo_icon_pause.png │ ├── exo_icon_play.png │ ├── exo_icon_previous.png │ ├── exo_icon_repeat_all.png │ ├── exo_icon_repeat_off.png │ ├── exo_icon_repeat_one.png │ ├── exo_icon_rewind.png │ ├── exo_icon_shuffle_off.png │ ├── exo_icon_shuffle_on.png │ ├── exo_icon_stop.png │ ├── exo_icon_vr.png │ ├── exo_notification_small_icon.png │ ├── ic_fullscreen_exit_white.png │ └── ic_fullscreen_white.png │ ├── drawable │ ├── btn_continue_drawable.xml │ ├── exo_bg_video_bottom.9.png │ ├── exo_bg_video_top.9.png │ ├── exo_edit_mode_logo.xml │ ├── exo_error_bg.xml │ ├── exo_rounded_rectangle.xml │ ├── ic_black.png │ ├── ic_brightness_6_white_48px.xml │ ├── ic_exo_back.xml │ ├── ic_exo_pause.xml │ ├── ic_exo_start.xml │ ├── ic_fullscreen_selector.xml │ ├── ic_lock_closed.xml │ ├── ic_lock_open.xml │ ├── ic_replay_.xml │ ├── ic_sentiment_very_dissatisfied_white_48px.xml │ ├── ic_volume_off_white_48px.xml │ ├── ic_volume_up_white_48px.xml │ ├── list_view_back.xml │ ├── seek_progress.xml │ ├── simple_video_dialog_progress.xml │ ├── simple_video_dialog_progress_bg.xml │ └── toggle_lock.xml │ ├── font │ └── roboto_medium_numbers.ttf │ ├── layout-v29 │ └── simple_exo_view.xml │ ├── layout │ ├── exo_list_divider.xml │ ├── exo_playback_control_view.xml │ ├── exo_player_control_view.xml │ ├── exo_styled_player_control_ffwd_button.xml │ ├── exo_styled_player_control_rewind_button.xml │ ├── exo_styled_player_control_view.xml │ ├── exo_styled_player_view.xml │ ├── exo_styled_settings_list.xml │ ├── exo_styled_settings_list_item.xml │ ├── exo_styled_sub_settings_list_item.xml │ ├── exo_track_selection_dialog.xml │ ├── simple_exo_playback_control_view.xml │ └── simple_exo_view.xml │ ├── values-us │ └── drawables.xml │ ├── values-zh-rCN │ └── strings.xml │ └── values │ ├── arrays.xml │ ├── attrs.xml │ ├── colors.xml │ ├── constants.xml │ ├── dimens.xml │ ├── drawables.xml │ ├── ids.xml │ ├── strings.xml │ └── styles.xml ├── app ├── .gitignore ├── build.gradle ├── libs │ ├── crashsdk-3.3.0.0-umeng.jar │ ├── efs-base-1.3.6.umeng.jar │ ├── launchsdk-0.0.2.umeng.jar │ ├── memsdk-0.0.1.umeng.jar │ ├── pasdk-2.1.154.umeng.jar │ ├── umeng-apm-v1.4.2.jar │ └── umeng-asms-v1.4.1.jar ├── proguard-rules.pro ├── release │ ├── output-metadata.json │ └── 波澜投屏_V3.0_C38.apk └── src │ └── main │ ├── AndroidManifest.xml │ ├── assets │ ├── live │ │ ├── bootstrap.min.js │ │ ├── jquery.min.js │ │ ├── sub.html │ │ └── sub.js │ └── update_records.json │ ├── ic_launcher-playstore.png │ ├── java │ ├── androidx │ │ └── leanback │ │ │ └── app │ │ │ └── PlaybackVideoFragment.kt │ └── com │ │ ├── hd │ │ └── tvpro │ │ │ ├── BrowseErrorActivity.kt │ │ │ ├── CardPresenter.kt │ │ │ ├── DetailsActivity.kt │ │ │ ├── DetailsDescriptionPresenter.kt │ │ │ ├── ErrorFragment.kt │ │ │ ├── MainActivity.kt │ │ │ ├── MainFragment.kt │ │ │ ├── Movie.kt │ │ │ ├── MovieList.kt │ │ │ ├── PlaybackActivity.kt │ │ │ ├── VideoDetailsFragment.kt │ │ │ ├── activity │ │ │ └── EmptyActivity.java │ │ │ ├── app │ │ │ └── App.kt │ │ │ ├── constants │ │ │ ├── AppConfig.kt │ │ │ └── TimeConstants.java │ │ │ ├── event │ │ │ ├── PlayUrlChange.kt │ │ │ ├── SubChange.kt │ │ │ └── SwitchUrlChange.kt │ │ │ ├── receiver │ │ │ └── SelfStartingReceiver.kt │ │ │ ├── service │ │ │ ├── LiveModel.kt │ │ │ └── model │ │ │ │ └── LiveItem.kt │ │ │ ├── setting │ │ │ ├── ListViewAdapterSettingLeft.java │ │ │ ├── ListViewAdapterSettingRight.java │ │ │ ├── LiveListHolder.kt │ │ │ ├── LiveListViewAdapter.java │ │ │ ├── LiveListViewChannelAdapter.java │ │ │ ├── SettingHolder.kt │ │ │ └── SettingOption.java │ │ │ ├── util │ │ │ ├── CrashHandler.java │ │ │ ├── FileUtil.kt │ │ │ ├── HttpParser.java │ │ │ ├── IPUtils.java │ │ │ ├── PreferenceMgr.java │ │ │ ├── QRCodeUtil.kt │ │ │ ├── ScanLiveTVUtils.java │ │ │ ├── ShareUtil.java │ │ │ ├── StringUtil.java │ │ │ ├── ToastMgr.java │ │ │ ├── UriUtils.java │ │ │ ├── WindowHelper.kt │ │ │ ├── async │ │ │ │ └── ThreadTool.kt │ │ │ └── http │ │ │ │ ├── CharsetStringCallback.java │ │ │ │ ├── CharsetStringConvert.java │ │ │ │ ├── HttpListener.kt │ │ │ │ ├── HttpUtils.kt │ │ │ │ └── LocalServerParser.java │ │ │ ├── video │ │ │ ├── MediaPlayerAdapter.kt │ │ │ ├── MyPlaybackTransportControlGlue.kt │ │ │ ├── VideoDataHelper.kt │ │ │ └── model │ │ │ │ ├── DlanUrlDTO.java │ │ │ │ └── TrackHolder.kt │ │ │ ├── view │ │ │ ├── ChannelListView.java │ │ │ └── SelectListView.java │ │ │ └── webserver │ │ │ ├── MyWebConfig.kt │ │ │ ├── WebController.kt │ │ │ └── WebServer.java │ │ └── pngcui │ │ └── skyworth │ │ └── dlna │ │ ├── center │ │ ├── DLNAGenaEventBrocastFactory.java │ │ ├── DLNAGenaEventBrocastReceiver.java │ │ ├── DMRCenter.java │ │ ├── DMRWorkThread.java │ │ ├── DlnaMediaModel.java │ │ ├── DlnaMediaModelFactory.java │ │ ├── IBaseEngine.java │ │ ├── IDMRAction.java │ │ ├── MediaControlBrocastFactory.java │ │ ├── MediaControlBrocastReceiver.java │ │ └── MediaRenderProxy.java │ │ ├── datastore │ │ └── LocalConfigSharePreference.java │ │ ├── device │ │ ├── DeviceInfo.java │ │ ├── DeviceUpdateBrocastFactory.java │ │ ├── DeviceUpdateBrocastReceiver.java │ │ └── ItatisticsEvent.java │ │ ├── event │ │ └── EngineCommand.kt │ │ ├── jni │ │ ├── PlatinumJniProxy.java │ │ └── PlatinumReflection.java │ │ ├── service │ │ └── MediaRenderService.java │ │ └── util │ │ ├── CommonLog.java │ │ ├── CommonUtil.java │ │ ├── DlnaUtils.java │ │ ├── FileHelper.java │ │ └── LogFactory.java │ ├── jniLibs │ ├── arm64-v8a │ │ ├── libcrashsdk.so │ │ └── libumeng-spy.so │ └── armeabi-v7a │ │ ├── libcrashsdk.so │ │ ├── libgit-platinum.so │ │ └── libumeng-spy.so │ └── res │ ├── color │ ├── exit_button_text_color.xml │ ├── item_text_selector.xml │ └── item_text_selector_left.xml │ ├── drawable-xxhdpi │ └── ic_check_green.png │ ├── drawable │ ├── app_icon_your_company.png │ ├── button_normal_bg.xml │ ├── default_background.xml │ ├── item_bg_selector_setting_right.xml │ ├── item_setting_bg.xml │ ├── live_list_bg.xml │ ├── menu_bg_n.xml │ ├── menu_bg_selector.xml │ └── movie.png │ ├── layout │ ├── activity_details.xml │ ├── activity_main.xml │ ├── item_list_channel.xml │ ├── item_list_left.xml │ ├── item_list_setting_left.xml │ ├── item_list_setting_right.xml │ ├── layout_exit_dialog.xml │ ├── layout_help_dialog.xml │ ├── layout_live.xml │ └── layout_setting.xml │ ├── mipmap-anydpi-v26 │ ├── ic_launcher.xml │ └── ic_launcher_round.xml │ ├── mipmap-hdpi │ ├── ic_launcher_foreground.png │ └── ic_launcher_round.png │ ├── mipmap-mdpi │ ├── ic_launcher_foreground.png │ └── ic_launcher_round.png │ ├── mipmap-xhdpi │ ├── ic_launcher_foreground.png │ └── ic_launcher_round.png │ ├── mipmap-xxhdpi │ ├── ic_launcher_foreground.png │ └── ic_launcher_round.png │ ├── mipmap-xxxhdpi │ ├── ic_launcher.png │ ├── ic_launcher_foreground.png │ └── ic_launcher_round.png │ ├── values-1920x1080 │ └── dimens.xml │ ├── values-2000x1200 │ └── dimens.xml │ ├── values │ ├── colors.xml │ ├── dimens.xml │ ├── ic_launcher_background.xml │ ├── strings.xml │ ├── styles.xml │ └── themes.xml │ └── xml │ └── network_security_config.xml ├── build.gradle ├── ffmpeg ├── .gitignore ├── README.md ├── build.gradle ├── proguard-rules.txt └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── google │ │ └── android │ │ └── exoplayer2 │ │ └── ext │ │ └── ffmpeg │ │ ├── FfmpegAudioDecoder.java │ │ ├── FfmpegAudioRenderer.java │ │ ├── FfmpegDecoder.java │ │ ├── FfmpegDecoderException.java │ │ ├── FfmpegLibrary.java │ │ └── package-info.java │ ├── jni │ ├── CMakeLists.txt │ ├── build_ffmpeg.sh │ ├── configure │ ├── ffbuild │ │ └── config.log │ └── ffmpeg_jni.cc │ └── jniLibs │ ├── arm64-v8a │ ├── libavresample.so │ └── libffmpeg.so │ ├── armeabi-v7a │ ├── libavcodec.so │ ├── libavresample.so │ ├── libavutil.so │ ├── libffmpeg.so │ └── libswresample.so │ └── armeabi │ ├── libavcodec.so │ ├── libavresample.so │ ├── libavutil.so │ └── libffmpeg.so ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── settings.gradle └── versions.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 | local.properties 16 | 17 | # Project exclude paths 18 | /VideoUi/build/ 19 | /VideoUi/build/intermediates/javac/debug/classes/ -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /.idea/.name: -------------------------------------------------------------------------------- 1 | 波澜投屏 -------------------------------------------------------------------------------- /.idea/codeStyles/codeStyleConfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 24 | 25 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # bolan 2 | 波澜投屏 3 | -------------------------------------------------------------------------------- /VideoPlayModule-Lite/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /VideoPlayModule-Lite/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.library' 2 | android { 3 | compileSdkVersion rootProject.ext.compileSdkVersion 4 | buildToolsVersion rootProject.ext.buildToolsVersion 5 | defaultConfig { 6 | minSdkVersion rootProject.ext.minSdkVersion 7 | targetSdkVersion rootProject.ext.targetSdkVersion 8 | versionCode project.ext.versionCode 9 | versionName project.ext.versionName 10 | testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' 11 | 12 | } 13 | 14 | buildTypes { 15 | release { 16 | minifyEnabled false 17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 18 | } 19 | debug { 20 | minifyEnabled false 21 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 22 | } 23 | } 24 | lintOptions { 25 | abortOnError false 26 | } 27 | 28 | 29 | } 30 | 31 | dependencies { 32 | implementation fileTree(include: ['*.jar'], dir: 'libs') 33 | testImplementation 'junit:junit:4.12' 34 | api project(':VideoUi') 35 | implementation 'androidx.annotation:annotation:1.2.0' 36 | implementation 'androidx.appcompat:appcompat:1.1.0-alpha04' 37 | implementation 'com.github.ctiao:DanmakuFlameMaster:0.9.25' 38 | implementation 'com.github.ctiao:ndkbitmap-armv5:0.9.21' 39 | } 40 | 41 | -------------------------------------------------------------------------------- /VideoPlayModule-Lite/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in D:\SDK/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | 19 | # Uncomment this to preserve the line number information for 20 | # debugging stack traces. 21 | #-keepattributes SourceFile,LineNumberTable 22 | 23 | # If you keep the line number information, uncomment this to 24 | # hide the original source file name. 25 | #-renamesourcefileattribute SourceFile 26 | -dontwarn java.lang.invoke.* -------------------------------------------------------------------------------- /VideoPlayModule-Lite/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /VideoPlayModule-Lite/src/main/java/chuangyuan/ycj/videolibrary/danmuku/DanmuWebView.java: -------------------------------------------------------------------------------- 1 | package chuangyuan.ycj.videolibrary.danmuku; 2 | 3 | import android.content.Context; 4 | import android.util.AttributeSet; 5 | import android.view.MotionEvent; 6 | import android.webkit.WebView; 7 | 8 | import androidx.annotation.NonNull; 9 | import androidx.annotation.Nullable; 10 | 11 | /** 12 | * 作者:By 15968 13 | * 日期:On 2021/11/15 14 | * 时间:At 21:37 15 | */ 16 | 17 | public class DanmuWebView extends WebView { 18 | public DanmuWebView(@NonNull Context context) { 19 | super(context); 20 | } 21 | 22 | public DanmuWebView(@NonNull Context context, @Nullable AttributeSet attrs) { 23 | super(context, attrs); 24 | } 25 | 26 | public DanmuWebView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { 27 | super(context, attrs, defStyleAttr); 28 | } 29 | 30 | @Override 31 | protected boolean dispatchGenericFocusedEvent(MotionEvent event) { 32 | return false; 33 | } 34 | 35 | @Override 36 | protected boolean dispatchGenericPointerEvent(MotionEvent event) { 37 | return false; 38 | } 39 | 40 | @Override 41 | public boolean dispatchGenericMotionEvent(MotionEvent event) { 42 | return false; 43 | } 44 | 45 | @Override 46 | public boolean dispatchTouchEvent(MotionEvent ev) { 47 | return false; 48 | } 49 | 50 | @Override 51 | public boolean onTouchEvent(MotionEvent event) { 52 | return false; 53 | } 54 | } -------------------------------------------------------------------------------- /VideoPlayModule-Lite/src/main/java/chuangyuan/ycj/videolibrary/factory/JDefaultDataSourceFactory.java: -------------------------------------------------------------------------------- 1 | package chuangyuan.ycj.videolibrary.factory; 2 | 3 | import android.content.Context; 4 | 5 | import com.google.android.exoplayer2.upstream.DataSource; 6 | import com.google.android.exoplayer2.upstream.DefaultDataSource; 7 | import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory; 8 | import com.google.android.exoplayer2.util.Util; 9 | 10 | 11 | /** 12 | * Created by yangc on 2017/11/13 13 | * date 2017/8/31 14 | * E-Mail:yangchaojiang@outlook.com 15 | * Deprecated: 默认提供数据源工厂类 16 | * 17 | * @author yangc 18 | */ 19 | public final class JDefaultDataSourceFactory implements DataSource.Factory { 20 | 21 | private final Context context; 22 | private final DataSource.Factory baseDataSourceFactory; 23 | 24 | /** 25 | * Instantiates a new J default data source factory. 26 | * 27 | * @param context A context. for {@link DefaultDataSource}. 28 | */ 29 | public JDefaultDataSourceFactory(Context context) { 30 | String userAgent = Util.getUserAgent(context, context.getPackageName()); 31 | this.context = context.getApplicationContext(); 32 | this.baseDataSourceFactory = new DefaultDataSourceFactory(context, userAgent); 33 | } 34 | 35 | @Override 36 | public DataSource createDataSource() { 37 | return baseDataSourceFactory.createDataSource(); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /VideoPlayModule-Lite/src/main/java/chuangyuan/ycj/videolibrary/factory/MyDefaultRenderersFactory.java: -------------------------------------------------------------------------------- 1 | package chuangyuan.ycj.videolibrary.factory; 2 | 3 | import android.content.Context; 4 | import android.os.Handler; 5 | 6 | import com.google.android.exoplayer2.DefaultRenderersFactory; 7 | import com.google.android.exoplayer2.Renderer; 8 | import com.google.android.exoplayer2.audio.AudioRendererEventListener; 9 | import com.google.android.exoplayer2.audio.AudioSink; 10 | import com.google.android.exoplayer2.mediacodec.MediaCodecSelector; 11 | 12 | import java.util.ArrayList; 13 | 14 | /** 15 | * 作者:By 15968 16 | * 日期:On 2022/6/16 17 | * 时间:At 18:41 18 | */ 19 | 20 | public class MyDefaultRenderersFactory extends DefaultRenderersFactory { 21 | 22 | public MyDefaultRenderersFactory(Context context) { 23 | super(context); 24 | } 25 | 26 | public MyDefaultRenderersFactory(Context context, @ExtensionRendererMode int extensionRendererMode){ 27 | super(context, extensionRendererMode); 28 | } 29 | 30 | @Override 31 | protected void buildAudioRenderers(Context context, int extensionRendererMode, MediaCodecSelector mediaCodecSelector, boolean enableDecoderFallback, AudioSink audioSink, Handler eventHandler, AudioRendererEventListener eventListener, ArrayList out) { 32 | super.buildAudioRenderers(context, extensionRendererMode, mediaCodecSelector, enableDecoderFallback, audioSink, eventHandler, eventListener, out); 33 | for (int i = 0; i < out.size(); i++) { 34 | if(out.get(i).getClass().getSimpleName().equals("FfmpegAudioRenderer")){ 35 | Renderer renderer = out.remove(i); 36 | out.add(0, renderer); 37 | break; 38 | } 39 | } 40 | } 41 | } -------------------------------------------------------------------------------- /VideoPlayModule-Lite/src/main/java/chuangyuan/ycj/videolibrary/listener/DataSourceListener.java: -------------------------------------------------------------------------------- 1 | package chuangyuan.ycj.videolibrary.listener; 2 | 3 | import com.google.android.exoplayer2.upstream.DataSource; 4 | 5 | /** 6 | * The interface Data source listener. 7 | * 8 | * @author yangc date 2017/8/26 E-Mail:yangchaojiang@outlook.com Deprecated: 数据源工厂接口 9 | */ 10 | public interface DataSourceListener { 11 | /*** 12 | * 自定义数据源工厂 13 | * @return DataSource.Factory data source factory 14 | */ 15 | DataSource.Factory getDataSourceFactory(); 16 | 17 | 18 | } 19 | -------------------------------------------------------------------------------- /VideoPlayModule-Lite/src/main/java/chuangyuan/ycj/videolibrary/listener/ExoPlayerListener.java: -------------------------------------------------------------------------------- 1 | package chuangyuan.ycj.videolibrary.listener; 2 | 3 | 4 | import android.view.View; 5 | 6 | import chuangyuan.ycj.videolibrary.video.ExoUserPlayer; 7 | 8 | /** 9 | * The interface Exo player listener. 10 | * 11 | * @author yangc date 2017/7/21 E-Mail:yangchaojiang@outlook.com Deprecated: view回调控制类接口 12 | */ 13 | public interface ExoPlayerListener { 14 | 15 | /*** 16 | * 播放控制类回调 17 | */ 18 | void onCreatePlayers(); 19 | 20 | /*** 21 | *释放控制类 22 | */ 23 | void replayPlayers(); 24 | 25 | /*** 26 | *选择多线路 27 | * @param position 索引 28 | */ 29 | void switchUri(int position); 30 | 31 | /*** 32 | *播放视频地址 33 | */ 34 | void playVideoUri(); 35 | 36 | /*** 37 | *播放视频地址 38 | */ 39 | void playVideoUriForce(); 40 | 41 | /*** 42 | *得到内核控制类 43 | * @return ExoUserPlayer play 44 | */ 45 | ExoUserPlayer getPlay(); 46 | 47 | /*** 48 | *播放视频 49 | */ 50 | void startPlayers(); 51 | /*** 52 | * 点击回调事件回调 53 | * **/ 54 | View.OnClickListener getClickListener(); 55 | 56 | void land(); 57 | } 58 | -------------------------------------------------------------------------------- /VideoPlayModule-Lite/src/main/java/chuangyuan/ycj/videolibrary/listener/ExoProgressListener.java: -------------------------------------------------------------------------------- 1 | package chuangyuan.ycj.videolibrary.listener; 2 | 3 | import com.google.android.exoplayer2.offline.Downloader; 4 | 5 | /** 6 | * author yangc 7 | * date 2018/6/3 8 | * E-Mail:yangchaojiang@outlook.com 9 | * Deprecated: 10 | */ 11 | public interface ExoProgressListener { 12 | 13 | void onDownloadProgress(Downloader listener,float downloadPercentage,long downloadedBytes); 14 | } 15 | -------------------------------------------------------------------------------- /VideoPlayModule-Lite/src/main/java/chuangyuan/ycj/videolibrary/listener/ItemVideo.java: -------------------------------------------------------------------------------- 1 | package chuangyuan.ycj.videolibrary.listener; 2 | 3 | 4 | /** 5 | * The interface Item video. 6 | * 7 | * @author yangc date 2017/7/21 E-Mail:yangchaojiang@outlook.com Deprecated: 自定义视频路径 接口,方便转换 8 | */ 9 | public interface ItemVideo { 10 | 11 | /** 12 | * 返回视频路径 13 | * 14 | * @return String video uri 15 | */ 16 | String getVideoUri(); 17 | } 18 | -------------------------------------------------------------------------------- /VideoPlayModule-Lite/src/main/java/chuangyuan/ycj/videolibrary/listener/LoadListener.java: -------------------------------------------------------------------------------- 1 | package chuangyuan.ycj.videolibrary.listener; 2 | 3 | /** 4 | * The interface Load listener. 5 | * 6 | * @author yangc date 2017/7/21 E-Mail:yangchaojiang@outlook.com Deprecated: 视频加载回调接口 7 | */ 8 | public interface LoadListener { 9 | /*** 10 | * 进度 11 | * @param pro 进度值 0-100 12 | */ 13 | void onProgress(long pro); 14 | } 15 | -------------------------------------------------------------------------------- /VideoPlayModule-Lite/src/main/java/chuangyuan/ycj/videolibrary/listener/LoadModelType.java: -------------------------------------------------------------------------------- 1 | package chuangyuan.ycj.videolibrary.listener; 2 | 3 | /** 4 | * The enum Load model type. 5 | * 6 | * @author yangc date 2017/10/14 E-Mail:yangchaojiang@outlook.com Deprecated: 加载类型提示枚举 7 | */ 8 | public enum LoadModelType { 9 | /*** 10 | * 下载速度显示 11 | */ 12 | SPEED, 13 | 14 | } 15 | -------------------------------------------------------------------------------- /VideoPlayModule-Lite/src/main/java/chuangyuan/ycj/videolibrary/listener/OnGestureBrightnessListener.java: -------------------------------------------------------------------------------- 1 | package chuangyuan.ycj.videolibrary.listener; 2 | 3 | 4 | /** 5 | * The interface On gesture brightness listener. 6 | * 7 | * @author yangc date 2017/11/3 Created by yangc E-Mail:yangchaojiang@outlook.com Deprecated: 手势操作信息回调接口 8 | */ 9 | public interface OnGestureBrightnessListener { 10 | 11 | /** 12 | * 改变亮度 13 | * 14 | * @param mMax 最大亮度 15 | * @param currIndex 当前亮度 16 | */ 17 | void setBrightnessPosition(int mMax, int currIndex); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /VideoPlayModule-Lite/src/main/java/chuangyuan/ycj/videolibrary/listener/OnGestureProgressListener.java: -------------------------------------------------------------------------------- 1 | package chuangyuan.ycj.videolibrary.listener; 2 | 3 | 4 | /** 5 | * The interface On gesture progress listener. 6 | * 7 | * @author yangc date 2017/11/3 Created by yangc E-Mail:yangchaojiang@outlook.com Deprecated: 手势操作信息回调接口 8 | */ 9 | public interface OnGestureProgressListener { 10 | /**** 11 | * 滑动进度 12 | * 13 | * @param seekTimePosition 滑动的时间 14 | * @param duration 视频总长 15 | * @param seekTime 滑动的时间 格式化00:00 16 | * @param totalTime 视频总长 格式化00:00 17 | */ 18 | void showProgressDialog(long seekTimePosition, long duration, String seekTime, String totalTime); 19 | 20 | /**** 21 | * 滑动进度结束 22 | * 23 | * @param newPosition 滑动的时间 24 | * */ 25 | void endGestureProgress(long newPosition); 26 | } 27 | -------------------------------------------------------------------------------- /VideoPlayModule-Lite/src/main/java/chuangyuan/ycj/videolibrary/listener/OnGestureVolumeListener.java: -------------------------------------------------------------------------------- 1 | package chuangyuan.ycj.videolibrary.listener; 2 | 3 | 4 | /** 5 | * The interface On gesture volume listener. 6 | * 7 | * @author yangc date 2017/11/3 Created by yangc E-Mail:yangchaojiang@outlook.com Deprecated: 手势操作信息回调接口 8 | */ 9 | public interface OnGestureVolumeListener { 10 | /** 11 | * 改变声音 12 | * 13 | * @param mMax d最大音量 14 | * @param currIndex 当前音量 15 | */ 16 | void setVolumePosition(int mMax, int currIndex); 17 | 18 | 19 | } 20 | -------------------------------------------------------------------------------- /VideoPlayModule-Lite/src/main/java/chuangyuan/ycj/videolibrary/listener/VideoInfoListener.java: -------------------------------------------------------------------------------- 1 | package chuangyuan.ycj.videolibrary.listener; 2 | 3 | import androidx.annotation.Nullable; 4 | 5 | import com.google.android.exoplayer2.ExoPlaybackException; 6 | 7 | /** 8 | * The interface Video info listener. 9 | * 10 | * @author yangc date 2017/2/25 E-Mail:1007181167@qq.com Description:视频视频信息回调 11 | */ 12 | public interface VideoInfoListener { 13 | 14 | /*** 15 | * 开始播放 16 | * @param currPosition currPosition 17 | */ 18 | void onPlayStart(long currPosition); 19 | 20 | /*** 21 | * 播放是否加载中 22 | */ 23 | void onLoadingChanged(); 24 | 25 | /*** 26 | * 播放失败 27 | * @param e 异常 28 | */ 29 | void onPlayerError(@Nullable ExoPlaybackException e); 30 | 31 | /*** 32 | * 播放结束 33 | */ 34 | void onPlayEnd(); 35 | 36 | /*** 37 | *暂停还是播放 38 | * @param playWhenReady 暂停还是播放 39 | */ 40 | void isPlaying(boolean playWhenReady); 41 | } 42 | -------------------------------------------------------------------------------- /VideoPlayModule-Lite/src/main/java/chuangyuan/ycj/videolibrary/listener/VideoWindowListener.java: -------------------------------------------------------------------------------- 1 | package chuangyuan.ycj.videolibrary.listener; 2 | 3 | /** 4 | * The interface Video window listener. 5 | * 6 | * @author yangc date 2017/2/25 E-Mail:1007181167@qq.com Description:多个视频接口 7 | */ 8 | public interface VideoWindowListener { 9 | 10 | 11 | /*** 12 | * 返回当前位置 13 | * @param currentIndex 当前视频窗口索引 14 | * @param windowCount 总数 15 | */ 16 | void onCurrentIndex(int currentIndex, int windowCount); 17 | 18 | } 19 | -------------------------------------------------------------------------------- /VideoPlayModule-Lite/src/main/java/chuangyuan/ycj/videolibrary/video/ExoDataBean.java: -------------------------------------------------------------------------------- 1 | package chuangyuan.ycj.videolibrary.video; 2 | 3 | import android.os.Parcel; 4 | import android.os.Parcelable; 5 | import android.view.View; 6 | 7 | import java.util.ArrayList; 8 | 9 | /** 10 | * author yangc 11 | * date 2018/4/17 12 | * E-Mail:yangchaojiang@outlook.com 13 | * Deprecated: 14 | */ 15 | public class ExoDataBean extends View.BaseSavedState { 16 | 17 | private boolean isLand; 18 | private int setSystemUiVisibility; 19 | private int switchIndex; 20 | private ArrayList nameSwitch; 21 | 22 | public ExoDataBean(Parcel source) { 23 | super(source); 24 | } 25 | 26 | 27 | 28 | public ExoDataBean(Parcelable superState) { 29 | super(superState); 30 | } 31 | 32 | public ArrayList getNameSwitch() { 33 | return nameSwitch; 34 | } 35 | 36 | public void setNameSwitch(ArrayList nameSwitch) { 37 | this.nameSwitch = nameSwitch; 38 | } 39 | 40 | public boolean isLand() { 41 | return isLand; 42 | } 43 | 44 | public void setLand(boolean land) { 45 | isLand = land; 46 | } 47 | 48 | public int getSetSystemUiVisibility() { 49 | return setSystemUiVisibility; 50 | } 51 | 52 | public void setSetSystemUiVisibility(int setSystemUiVisibility) { 53 | this.setSystemUiVisibility = setSystemUiVisibility; 54 | } 55 | 56 | public int getSwitchIndex() { 57 | return switchIndex; 58 | } 59 | 60 | public void setSwitchIndex(int switchIndex) { 61 | this.switchIndex = switchIndex; 62 | } 63 | 64 | } 65 | -------------------------------------------------------------------------------- /VideoPlayModule-Lite/src/main/java/chuangyuan/ycj/videolibrary/widget/ExoDefaultTimeBar.java: -------------------------------------------------------------------------------- 1 | package chuangyuan.ycj.videolibrary.widget; 2 | 3 | import android.content.Context; 4 | import android.util.AttributeSet; 5 | 6 | import androidx.annotation.NonNull; 7 | 8 | import com.google.android.exoplayer2.ui.DefaultTimeBar; 9 | 10 | /** 11 | * The type Exo default time bar. 12 | * 13 | * @author yangc date 2017/9/3 E-Mail:yangchaojiang@outlook.com Deprecated: 自定义进度条 14 | */ 15 | public class ExoDefaultTimeBar extends DefaultTimeBar { 16 | private boolean openSeek = true; 17 | 18 | /** 19 | * Instantiates a new Exo default time bar. 20 | * 21 | * @param context the context 22 | */ 23 | public ExoDefaultTimeBar(@NonNull Context context) { 24 | super(context, null); 25 | new DefaultTimeBar(context, null); 26 | } 27 | 28 | /** 29 | * Instantiates a new Exo default time bar. 30 | * 31 | * @param context the context 32 | * @param attrs the attrs 33 | */ 34 | public ExoDefaultTimeBar(@NonNull Context context, AttributeSet attrs) { 35 | super(context, attrs); 36 | new DefaultTimeBar(context, attrs); 37 | } 38 | 39 | /** 40 | * Sets open seek. 41 | * 42 | * @param openSeek the open seek 43 | */ 44 | public void setOpenSeek(boolean openSeek) { 45 | this.openSeek = openSeek; 46 | } 47 | 48 | } 49 | -------------------------------------------------------------------------------- /VideoPlayModule-Lite/src/main/res/drawable/shape_dialog_cardbg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /VideoPlayModule-Lite/src/main/res/layout/exo_default_preview_layout.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 11 | 12 | 16 | -------------------------------------------------------------------------------- /VideoPlayModule-Lite/src/main/res/layout/simple_exo_belowview.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 17 | -------------------------------------------------------------------------------- /VideoPlayModule-Lite/src/main/res/layout/simple_exo_belowview_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | -------------------------------------------------------------------------------- /VideoPlayModule-Lite/src/main/res/layout/simple_exo_play_btn_hint.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 19 | 20 | 31 | -------------------------------------------------------------------------------- /VideoPlayModule-Lite/src/main/res/layout/simple_exo_play_error.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 21 | -------------------------------------------------------------------------------- /VideoPlayModule-Lite/src/main/res/layout/simple_exo_play_load.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 12 | 18 | 19 | 20 | 27 | 28 | -------------------------------------------------------------------------------- /VideoPlayModule-Lite/src/main/res/layout/simple_exo_play_lock.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 17 | 18 | 33 | 34 | -------------------------------------------------------------------------------- /VideoPlayModule-Lite/src/main/res/layout/simple_exo_play_replay.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 22 | -------------------------------------------------------------------------------- /VideoPlayModule-Lite/src/main/res/layout/simple_exo_playback_list_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /VideoPlayModule-Lite/src/main/res/layout/simple_exo_video_notice.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /VideoPlayModule-Lite/src/main/res/layout/simple_exo_video_progress_dialog.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 17 | 18 | 25 | 26 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /VideoPlayModule-Lite/src/main/res/layout/simple_exo_video_temp_fast_dialog.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 17 | 18 | 24 | 25 | 34 | 35 | 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /VideoPlayModule-Lite/src/main/res/layout/simple_exo_video_temp_fast_dialog2.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 17 | 18 | 24 | 25 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /VideoPlayModule-Lite/src/main/res/layout/simple_video_audio_brightness_dialog.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 20 | 21 | 28 | 29 | 38 | 39 | -------------------------------------------------------------------------------- /VideoPlayModule-Lite/src/main/res/layout/start_download_dialog.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 20 | -------------------------------------------------------------------------------- /VideoPlayModule-Lite/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | yjPlay 3 | 4 | 5 | -------------------------------------------------------------------------------- /VideoPlayModule-Lite/src/test/java/chuangyuan/ycj/videolibrary/ExampleUnitTest.java: -------------------------------------------------------------------------------- 1 | package chuangyuan.ycj.videolibrary; 2 | 3 | import org.junit.Test; 4 | 5 | import static org.junit.Assert.assertEquals; 6 | 7 | /** 8 | * Example local unit test, which will execute on the development machine (host). 9 | * 10 | * @see Testing documentation 11 | */ 12 | public class ExampleUnitTest { 13 | /** 14 | * Addition is correct. 15 | * 16 | * @throws Exception the exception 17 | */ 18 | @Test 19 | public void addition_isCorrect() throws Exception { 20 | assertEquals(4, 2 + 2); 21 | } 22 | } -------------------------------------------------------------------------------- /VideoPlayModule/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /VideoPlayModule/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in E:\SDK/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | 19 | # Uncomment this to preserve the line number information for 20 | # debugging stack traces. 21 | #-keepattributes SourceFile,LineNumberTable 22 | 23 | # If you keep the line number information, uncomment this to 24 | # hide the original source file name. 25 | #-renamesourcefileattribute SourceFile 26 | -------------------------------------------------------------------------------- /VideoPlayModule/src/androidTest/java/chuangyuan/ycj/videolibrary/whole/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package chuangyuan.ycj.videolibrary.whole; 2 | 3 | import android.content.Context; 4 | import androidx.test.platform.app.InstrumentationRegistry; 5 | import android.support.test.runner.AndroidJUnit4; 6 | 7 | import org.junit.Test; 8 | import org.junit.runner.RunWith; 9 | 10 | import static org.junit.Assert.*; 11 | 12 | /** 13 | * Instrumentation test, which will execute on an Android device. 14 | * 15 | * @see Testing documentation 16 | */ 17 | @RunWith(AndroidJUnit4.class) 18 | public class ExampleInstrumentedTest { 19 | @Test 20 | public void useAppContext() throws Exception { 21 | // Context of the app under test. 22 | Context appContext = InstrumentationRegistry.getTargetContext(); 23 | 24 | assertEquals("chuangyuan.ycj.videolibrary.whole.test", appContext.getPackageName()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /VideoPlayModule/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 4 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /VideoPlayModule/src/test/java/chuangyuan/ycj/videolibrary/whole/ExampleUnitTest.java: -------------------------------------------------------------------------------- 1 | package chuangyuan.ycj.videolibrary.whole; 2 | 3 | import org.junit.Test; 4 | 5 | import static org.junit.Assert.*; 6 | 7 | /** 8 | * Example local unit test, which will execute on the development machine (host). 9 | * 10 | * @see Testing documentation 11 | */ 12 | public class ExampleUnitTest { 13 | @Test 14 | public void addition_isCorrect() throws Exception { 15 | assertEquals(4, 2 + 2); 16 | } 17 | } -------------------------------------------------------------------------------- /VideoUi/README.md: -------------------------------------------------------------------------------- 1 | # ExoPlayer UI library module # 2 | 3 | Provides UI components and resources for use with ExoPlayer. 4 | 5 | ## Links ## 6 | 7 | * [Javadoc][]: Classes matching `com.google.android.exoplayer2.ui.*` 8 | belong to this module. 9 | 10 | [Javadoc]: https://google.github.io/ExoPlayer/doc/reference/index.html 11 | -------------------------------------------------------------------------------- /VideoUi/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.library' 2 | android { 3 | compileSdkVersion project.ext.compileSdkVersion 4 | buildToolsVersion project.ext.buildToolsVersion 5 | 6 | defaultConfig { 7 | minSdkVersion project.ext.minSdkVersion 8 | targetSdkVersion project.ext.targetSdkVersion 9 | versionCode project.ext.versionCode 10 | versionName project.ext.versionName 11 | } 12 | buildTypes { 13 | release { 14 | minifyEnabled false 15 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 16 | } 17 | debug { 18 | minifyEnabled false 19 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 20 | } 21 | } 22 | lintOptions { 23 | abortOnError false 24 | } 25 | compileOptions { 26 | sourceCompatibility JavaVersion.VERSION_1_8 27 | targetCompatibility JavaVersion.VERSION_1_8 28 | } 29 | } 30 | 31 | dependencies { 32 | implementation fileTree(include: ['*.jar'], dir: 'libs') 33 | implementation 'androidx.appcompat:appcompat:1.2.0' 34 | api('com.google.android.exoplayer:exoplayer-core:2.15.1', { 35 | exclude group: 'com.android.support', module: 'support-annotations' 36 | exclude group: 'com.android.support', module: 'support-compat' 37 | exclude group: 'com.android.support', module: 'support-core-utils' 38 | }) 39 | implementation 'androidx.media:media:1.4.3@aar' 40 | implementation 'androidx.annotation:annotation:1.2.0' 41 | implementation 'androidx.recyclerview:recyclerview:1.2.1' 42 | } 43 | -------------------------------------------------------------------------------- /VideoUi/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /VideoUi/src/main/java/com/google/android/exoplayer2/ui/AnimUtils.java: -------------------------------------------------------------------------------- 1 | package com.google.android.exoplayer2.ui; 2 | 3 | import android.view.View; 4 | 5 | import androidx.core.view.ViewCompat; 6 | import androidx.core.view.ViewPropertyAnimatorCompat; 7 | 8 | /** 9 | * author yangc 10 | * date 2017/11/26 11 | * E-Mail:yangchaojiang@outlook.com 12 | * Deprecated: 动画帮助类 13 | */ 14 | 15 | public class AnimUtils { 16 | 17 | public static ViewPropertyAnimatorCompat setOutAnim(View view, boolean ab) { 18 | return ViewCompat.animate(view).translationY(ab ? view.getHeight() : -view.getHeight()) 19 | .setDuration(500) 20 | .alpha(0.1f); 21 | } 22 | 23 | public static ViewPropertyAnimatorCompat setOutAnimX(View view, boolean ab) { 24 | return ViewCompat.animate(view).translationX(ab ? view.getWidth() : -view.getWidth()) 25 | .setDuration(500) 26 | .alpha(0.1f); 27 | } 28 | 29 | public static ViewPropertyAnimatorCompat setOutAnimX(View view, int offset, boolean ab) { 30 | return ViewCompat.animate(view).translationX(ab ? view.getWidth() + offset : -view.getWidth() - offset) 31 | .setDuration(500) 32 | .alpha(0.1f); 33 | } 34 | 35 | public static ViewPropertyAnimatorCompat setInAnimX(View view) { 36 | return ViewCompat.animate(view).translationX(0) 37 | .setDuration(500) 38 | .alpha(1f); 39 | } 40 | 41 | public static ViewPropertyAnimatorCompat setInAnim(View view) { 42 | return ViewCompat.animate(view).translationY(0) 43 | .alpha(1) 44 | .setDuration(500); 45 | } 46 | 47 | /** 48 | * 动画回调接口 49 | ***/ 50 | public interface AnimatorListener { 51 | void show(boolean isIn); 52 | } 53 | 54 | /** 55 | * 进度更新回调接口 56 | ***/ 57 | public interface UpdateProgressListener { 58 | void updateProgress(long position, long bufferedPosition, long duration); 59 | } 60 | 61 | } 62 | -------------------------------------------------------------------------------- /VideoUi/src/main/java/com/google/android/exoplayer2/ui/HtmlUtils.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 The Android Open Source Project 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.google.android.exoplayer2.ui; 17 | 18 | import android.graphics.Color; 19 | import androidx.annotation.ColorInt; 20 | import com.google.android.exoplayer2.util.Util; 21 | 22 | /** 23 | * Utility methods for generating HTML and CSS for use with {@link WebViewSubtitleOutput} and {@link 24 | * SpannedToHtmlConverter}. 25 | */ 26 | /* package */ final class HtmlUtils { 27 | 28 | private HtmlUtils() {} 29 | 30 | public static String toCssRgba(@ColorInt int color) { 31 | return Util.formatInvariant( 32 | "rgba(%d,%d,%d,%.3f)", 33 | Color.red(color), Color.green(color), Color.blue(color), Color.alpha(color) / 255.0); 34 | } 35 | 36 | /** 37 | * Returns a CSS selector that selects all elements with {@code class=className} and all their 38 | * descendants. 39 | */ 40 | public static String cssAllClassDescendantsSelector(String className) { 41 | return "." + className + ",." + className + " *"; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /VideoUi/src/main/java/com/google/android/exoplayer2/ui/TrackNameProvider.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2018 The Android Open Source Project 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.google.android.exoplayer2.ui; 17 | 18 | import com.google.android.exoplayer2.Format; 19 | 20 | /** Converts {@link Format}s to user readable track names. */ 21 | public interface TrackNameProvider { 22 | 23 | /** Returns a user readable track name for the given {@link Format}. */ 24 | String getTrackName(Format format); 25 | } 26 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/color/exo_exo_video_switch_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-anydpi-v21/exo_controls_fastforward.xml: -------------------------------------------------------------------------------- 1 | 15 | 20 | 21 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-anydpi-v21/exo_controls_fullscreen_enter.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-anydpi-v21/exo_controls_fullscreen_exit.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-anydpi-v21/exo_controls_next.xml: -------------------------------------------------------------------------------- 1 | 15 | 20 | 21 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-anydpi-v21/exo_controls_pause.xml: -------------------------------------------------------------------------------- 1 | 15 | 20 | 21 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-anydpi-v21/exo_controls_play.xml: -------------------------------------------------------------------------------- 1 | 15 | 20 | 21 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-anydpi-v21/exo_controls_previous.xml: -------------------------------------------------------------------------------- 1 | 15 | 20 | 21 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-anydpi-v21/exo_controls_repeat_all.xml: -------------------------------------------------------------------------------- 1 | 15 | 20 | 23 | 24 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-anydpi-v21/exo_controls_repeat_off.xml: -------------------------------------------------------------------------------- 1 | 15 | 20 | 23 | 24 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-anydpi-v21/exo_controls_repeat_one.xml: -------------------------------------------------------------------------------- 1 | 15 | 20 | 23 | 24 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-anydpi-v21/exo_controls_rewind.xml: -------------------------------------------------------------------------------- 1 | 15 | 20 | 21 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-anydpi-v21/exo_controls_shuffle.xml: -------------------------------------------------------------------------------- 1 | 15 | 20 | 21 | 26 | 27 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-anydpi-v21/exo_icon_fastforward.xml: -------------------------------------------------------------------------------- 1 | 15 | 20 | 21 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-anydpi-v21/exo_icon_next.xml: -------------------------------------------------------------------------------- 1 | 15 | 20 | 21 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-anydpi-v21/exo_icon_pause.xml: -------------------------------------------------------------------------------- 1 | 15 | 20 | 21 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-anydpi-v21/exo_icon_play.xml: -------------------------------------------------------------------------------- 1 | 15 | 20 | 21 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-anydpi-v21/exo_icon_previous.xml: -------------------------------------------------------------------------------- 1 | 15 | 20 | 21 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-anydpi-v21/exo_icon_rewind.xml: -------------------------------------------------------------------------------- 1 | 15 | 20 | 21 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-anydpi-v21/exo_icon_stop.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 10 | 13 | 14 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-anydpi/ic_fullscreen_exit_white.xml: -------------------------------------------------------------------------------- 1 | 8 | 12 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-anydpi/ic_fullscreen_white.xml: -------------------------------------------------------------------------------- 1 | 8 | 12 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-hdpi/ic_fullscreen_exit_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-hdpi/ic_fullscreen_exit_white.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-hdpi/ic_fullscreen_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-hdpi/ic_fullscreen_white.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-mdpi/ic_fullscreen_exit_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-mdpi/ic_fullscreen_exit_white.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-mdpi/ic_fullscreen_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-mdpi/ic_fullscreen_white.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_controls_pause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_controls_pause.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_controls_play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_controls_play.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_controls_repeat_all.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_controls_repeat_all.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_controls_repeat_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_controls_repeat_off.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_controls_repeat_one.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_controls_repeat_one.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_edit_mode_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_edit_mode_logo.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_ic_audiotrack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_ic_audiotrack.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_ic_check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_ic_check.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_ic_chevron_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_ic_chevron_left.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_ic_chevron_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_ic_chevron_right.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_ic_default_album_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_ic_default_album_image.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_ic_forward.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_ic_forward.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_ic_fullscreen_enter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_ic_fullscreen_enter.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_ic_fullscreen_exit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_ic_fullscreen_exit.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_ic_pause_circle_filled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_ic_pause_circle_filled.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_ic_play_circle_filled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_ic_play_circle_filled.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_ic_rewind.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_ic_rewind.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_ic_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_ic_settings.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_ic_skip_next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_ic_skip_next.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_ic_skip_previous.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_ic_skip_previous.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_ic_speed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_ic_speed.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_ic_subtitle_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_ic_subtitle_off.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_ic_subtitle_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_ic_subtitle_on.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_icon_circular_play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_icon_circular_play.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_icon_fastforward.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_icon_fastforward.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_icon_fullscreen_enter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_icon_fullscreen_enter.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_icon_fullscreen_exit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_icon_fullscreen_exit.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_icon_next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_icon_next.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_icon_pause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_icon_pause.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_icon_play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_icon_play.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_icon_previous.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_icon_previous.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_icon_repeat_all.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_icon_repeat_all.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_icon_repeat_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_icon_repeat_off.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_icon_repeat_one.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_icon_repeat_one.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_icon_rewind.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_icon_rewind.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_icon_shuffle_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_icon_shuffle_off.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_icon_shuffle_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_icon_shuffle_on.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_icon_stop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_icon_stop.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_icon_vr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_icon_vr.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/exo_notification_small_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/exo_notification_small_icon.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/ic_fullscreen_exit_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/ic_fullscreen_exit_white.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable-xxhdpi/ic_fullscreen_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable-xxhdpi/ic_fullscreen_white.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable/btn_continue_drawable.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable/exo_bg_video_bottom.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable/exo_bg_video_bottom.9.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable/exo_bg_video_top.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable/exo_bg_video_top.9.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable/exo_error_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable/exo_rounded_rectangle.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable/ic_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/drawable/ic_black.png -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable/ic_brightness_6_white_48px.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable/ic_exo_back.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable/ic_exo_pause.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable/ic_exo_start.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 15 | 16 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable/ic_fullscreen_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable/ic_lock_closed.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable/ic_lock_open.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable/ic_replay_.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable/ic_sentiment_very_dissatisfied_white_48px.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable/ic_volume_off_white_48px.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable/ic_volume_up_white_48px.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable/list_view_back.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable/seek_progress.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 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable/simple_video_dialog_progress.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable/simple_video_dialog_progress_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/drawable/toggle_lock.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/font/roboto_medium_numbers.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/VideoUi/src/main/res/font/roboto_medium_numbers.ttf -------------------------------------------------------------------------------- /VideoUi/src/main/res/layout/exo_list_divider.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 20 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/layout/exo_player_control_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /VideoUi/src/main/res/layout/exo_styled_player_control_ffwd_button.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 24 | 25 |