├── .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 |
4 |
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 |
8 |
9 |
--------------------------------------------------------------------------------
/.idea/runConfigurations.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
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 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/VideoUi/src/main/res/layout/exo_styled_player_control_rewind_button.xml:
--------------------------------------------------------------------------------
1 |
2 |
16 |
17 |
18 |
24 |
25 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/VideoUi/src/main/res/layout/exo_styled_settings_list.xml:
--------------------------------------------------------------------------------
1 |
2 |
16 |
23 |
--------------------------------------------------------------------------------
/VideoUi/src/main/res/layout/exo_styled_sub_settings_list_item.xml:
--------------------------------------------------------------------------------
1 |
2 |
16 |
24 |
25 |
34 |
35 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/VideoUi/src/main/res/layout/exo_track_selection_dialog.xml:
--------------------------------------------------------------------------------
1 |
2 |
16 |
19 |
20 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/VideoUi/src/main/res/layout/simple_exo_playback_control_view.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
12 |
13 |
17 |
18 |
19 |
22 |
23 |
26 |
27 |
30 |
31 |
34 |
35 |
39 |
40 |
43 |
44 |
48 |
49 |
52 |
53 |
56 |
57 |
58 |
--------------------------------------------------------------------------------
/VideoUi/src/main/res/values-us/drawables.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | @drawable/exo_icon_play
4 | @drawable/exo_icon_pause
5 | @drawable/exo_icon_next
6 | @drawable/exo_icon_previous
7 | @drawable/exo_icon_fastforward
8 | @drawable/exo_icon_rewind
9 | @drawable/exo_icon_play
10 | @drawable/exo_icon_pause
11 | @drawable/exo_icon_next
12 | @drawable/exo_icon_previous
13 | @drawable/exo_icon_fastforward
14 | @drawable/exo_icon_rewind
15 | @drawable/exo_icon_stop
16 |
17 |
--------------------------------------------------------------------------------
/VideoUi/src/main/res/values/arrays.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 | - 25
20 | - 50
21 | - 75
22 | - 100
23 | - 125
24 | - 150
25 | - 200
26 |
27 |
28 |
29 | - 0.25x
30 | - 0.5x
31 | - 0.75x
32 | - @string/exo_controls_playback_speed_normal
33 | - 1.25x
34 | - 1.5x
35 | - 2x
36 |
37 |
38 |
--------------------------------------------------------------------------------
/VideoUi/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 | #ffffff
19 | #B3ffffff
20 | #B3000000
21 | #98000000
22 | #80808080
23 | #b0000000
24 |
25 |
--------------------------------------------------------------------------------
/VideoUi/src/main/res/values/constants.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | #FFF4F3F0
5 | #FF4081
6 | #005fff
7 | #33000000
8 | #3d3b3b
9 | #FF6E0B
10 | @android:color/white
11 | #FF7000
12 | #a5ffffff
13 | @color/simple_exo_color_switch_item
14 | #AA000000
15 | #000000
16 |
17 | 100
18 | 33
19 |
20 |
--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/app/libs/crashsdk-3.3.0.0-umeng.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/app/libs/crashsdk-3.3.0.0-umeng.jar
--------------------------------------------------------------------------------
/app/libs/efs-base-1.3.6.umeng.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/app/libs/efs-base-1.3.6.umeng.jar
--------------------------------------------------------------------------------
/app/libs/launchsdk-0.0.2.umeng.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/app/libs/launchsdk-0.0.2.umeng.jar
--------------------------------------------------------------------------------
/app/libs/memsdk-0.0.1.umeng.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/app/libs/memsdk-0.0.1.umeng.jar
--------------------------------------------------------------------------------
/app/libs/pasdk-2.1.154.umeng.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/app/libs/pasdk-2.1.154.umeng.jar
--------------------------------------------------------------------------------
/app/libs/umeng-apm-v1.4.2.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/app/libs/umeng-apm-v1.4.2.jar
--------------------------------------------------------------------------------
/app/libs/umeng-asms-v1.4.1.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/app/libs/umeng-asms-v1.4.1.jar
--------------------------------------------------------------------------------
/app/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
--------------------------------------------------------------------------------
/app/release/output-metadata.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": 2,
3 | "artifactType": {
4 | "type": "APK",
5 | "kind": "Directory"
6 | },
7 | "applicationId": "com.hd.tvpro",
8 | "variantName": "release",
9 | "elements": [
10 | {
11 | "type": "SINGLE",
12 | "filters": [],
13 | "versionCode": 38,
14 | "versionName": "3.0",
15 | "outputFile": "波澜投屏_V3.0_C38.apk"
16 | }
17 | ]
18 | }
--------------------------------------------------------------------------------
/app/release/波澜投屏_V3.0_C38.apk:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/app/release/波澜投屏_V3.0_C38.apk
--------------------------------------------------------------------------------
/app/src/main/assets/live/sub.js:
--------------------------------------------------------------------------------
1 | function loadSub(reload){
2 | $.get("/api/sub/get",function(data, status){
3 | $("#url").val(data || '');
4 | if(reload) {
5 | setTimeout(() => {
6 | loadSub(false);
7 | }, 1500);
8 | }
9 | });
10 | }
11 | window.loadSub = loadSub;
12 |
13 | function showInfo(text){
14 | $("#modal-info-content").text(text);
15 | $("#modal-info").modal('show');
16 | }
17 | $("#info-modal-btn").click(function(){
18 | $("#modal-info").modal('hide');
19 | });
20 |
21 | $("#save").click(function(){
22 | let u = $("#url").val();
23 | if(u == null || u == "" || u.indexOf("http") != 0){
24 | showInfo('地址有误');
25 | return;
26 | }
27 | $.ajax({
28 | type: "post",
29 | url: '/api/sub/set',
30 | async: false,
31 | data: JSON.stringify({url:u}),
32 | contentType: "application/json; charset=utf-8",
33 | dataType: "json",
34 | complete: function(data) {
35 | showInfo('订阅已保存');
36 | window.loadSub(false);
37 | }
38 | });
39 | });
40 |
41 | window.loadSub(false);
--------------------------------------------------------------------------------
/app/src/main/assets/update_records.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": 1,
3 | "records": [
4 | {
5 | "date": "2.8",
6 | "records": [
7 | "关注公众号新方圆小棉袄,你的支持就是我更新的动力!",
8 | "‘‘新增’’:支持多音轨切换、多字幕轨道切换!",
9 | "‘‘新增’’:支持ffmpeg音频解码器"
10 | ]
11 | },
12 | {
13 | "date": "2.8",
14 | "records": [
15 | "‘‘新增’’:播放器大升级,支持多音轨切换、多字幕轨道切换!",
16 | "‘‘新增’’:播放器内核增强,原来没声音的都能播放了!",
17 | "‘‘新增’’:支持HDR和杜比视界"
18 | ]
19 | },
20 | {
21 | "date": "2.8",
22 | "records": [
23 | "优化:修复直播报错,支持波澜助手直接保存直播频道列表",
24 | "优化:降低闪退崩溃概率",
25 | "优化:外挂字幕字体加上描边"
26 | ]
27 | },
28 | {
29 | "date": "2.5",
30 | "records": [
31 | "新增:增加线路自动排序功能,使用成功优先原则,越播越流畅!",
32 | "新增:增加开机自启动功能",
33 | "优化:增强防炸功能,避免远程直播源炸了无法播放"
34 | ]
35 | },
36 | {
37 | "date": "2.4",
38 | "records": [
39 | "新增:直播源支持m3u格式,支持分组显示",
40 | "新增:支持DLAN投屏携带header",
41 | "新增:支持触摸滑动修改进度、音量和亮度",
42 | "优化:直播源地址支持本地文件路径"
43 | ]
44 | },
45 | {
46 | "date": "2.1",
47 | "records": [
48 | "新增:支持左右按键直接切换线路",
49 | "新增:直播多线路支持记忆线路"
50 | ]
51 | },
52 | {
53 | "date": "2022/1/2",
54 | "records": [
55 | "新增:直接遥控器左右键快进快退",
56 | "新增:网页投屏支持自动下一集",
57 | "优化:修复详情界面快进快退卡顿问题",
58 | "优化:设置里面增加版本号展示"
59 | ]
60 | }
61 | ]
62 | }
63 |
--------------------------------------------------------------------------------
/app/src/main/ic_launcher-playstore.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/app/src/main/ic_launcher-playstore.png
--------------------------------------------------------------------------------
/app/src/main/java/com/hd/tvpro/DetailsActivity.kt:
--------------------------------------------------------------------------------
1 | package com.hd.tvpro
2 |
3 | import android.os.Bundle
4 | import androidx.fragment.app.FragmentActivity
5 |
6 | /**
7 | * Details activity class that loads [VideoDetailsFragment] class.
8 | */
9 | class DetailsActivity : FragmentActivity() {
10 |
11 | override fun onCreate(savedInstanceState: Bundle?) {
12 | super.onCreate(savedInstanceState)
13 | setContentView(R.layout.activity_details)
14 | if (savedInstanceState == null) {
15 | supportFragmentManager.beginTransaction()
16 | .replace(R.id.details_fragment, VideoDetailsFragment())
17 | .commitNow();
18 | }
19 | }
20 |
21 | companion object {
22 | const val SHARED_ELEMENT_NAME = "hero"
23 | const val MOVIE = "Movie"
24 | }
25 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/hd/tvpro/DetailsDescriptionPresenter.kt:
--------------------------------------------------------------------------------
1 | package com.hd.tvpro
2 |
3 | import androidx.leanback.widget.AbstractDetailsDescriptionPresenter
4 |
5 | class DetailsDescriptionPresenter : AbstractDetailsDescriptionPresenter() {
6 |
7 | override fun onBindDescription(
8 | viewHolder: AbstractDetailsDescriptionPresenter.ViewHolder,
9 | item: Any) {
10 | val movie = item as Movie
11 |
12 | viewHolder.title.text = movie.title
13 | viewHolder.subtitle.text = movie.studio
14 | viewHolder.body.text = movie.description
15 | }
16 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/hd/tvpro/ErrorFragment.kt:
--------------------------------------------------------------------------------
1 | package com.hd.tvpro
2 |
3 | import android.os.Bundle
4 | import android.view.View
5 |
6 | import androidx.core.content.ContextCompat
7 |
8 | /**
9 | * This class demonstrates how to extend [androidx.leanback.app.ErrorSupportFragment].
10 | */
11 | class ErrorFragment : androidx.leanback.app.ErrorSupportFragment() {
12 |
13 | override fun onCreate(savedInstanceState: Bundle?) {
14 | super.onCreate(savedInstanceState)
15 | title = resources.getString(R.string.app_name)
16 | }
17 |
18 | internal fun setErrorContent() {
19 | imageDrawable = ContextCompat.getDrawable(requireActivity(), R.drawable.lb_ic_sad_cloud)
20 | message = resources.getString(R.string.error_fragment_message)
21 | setDefaultBackground(TRANSLUCENT)
22 |
23 | buttonText = resources.getString(R.string.dismiss_error)
24 | buttonClickListener = View.OnClickListener {
25 | requireFragmentManager().beginTransaction().remove(this@ErrorFragment).commit()
26 | }
27 | }
28 |
29 | companion object {
30 | private val TRANSLUCENT = true
31 | }
32 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/hd/tvpro/Movie.kt:
--------------------------------------------------------------------------------
1 | package com.hd.tvpro
2 |
3 | import java.io.Serializable
4 |
5 | /**
6 | * Movie class represents video entity with title, description, image thumbs and video url.
7 | */
8 | data class Movie(
9 | var id: Long = 0,
10 | var title: String? = null,
11 | var description: String? = null,
12 | var backgroundImageUrl: String? = null,
13 | var cardImageUrl: String? = null,
14 | var videoUrl: String? = null,
15 | var studio: String? = null
16 | ) : Serializable {
17 |
18 | override fun toString(): String {
19 | return "Movie{" +
20 | "id=" + id +
21 | ", title='" + title + '\'' +
22 | ", videoUrl='" + videoUrl + '\'' +
23 | ", backgroundImageUrl='" + backgroundImageUrl + '\'' +
24 | ", cardImageUrl='" + cardImageUrl + '\'' +
25 | '}'
26 | }
27 |
28 | companion object {
29 | internal const val serialVersionUID = 727566175075960653L
30 | }
31 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/hd/tvpro/PlaybackActivity.kt:
--------------------------------------------------------------------------------
1 | package com.hd.tvpro
2 |
3 | import android.os.Bundle
4 | import androidx.fragment.app.FragmentActivity
5 | import androidx.leanback.app.PlaybackVideoFragment
6 |
7 | /** Loads [PlaybackVideoFragment]. */
8 | class PlaybackActivity : FragmentActivity() {
9 |
10 | override fun onCreate(savedInstanceState: Bundle?) {
11 | super.onCreate(savedInstanceState)
12 | if (savedInstanceState == null) {
13 | supportFragmentManager.beginTransaction()
14 | .replace(android.R.id.content, PlaybackVideoFragment())
15 | .commit()
16 | }
17 | }
18 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/hd/tvpro/activity/EmptyActivity.java:
--------------------------------------------------------------------------------
1 | package com.hd.tvpro.activity;
2 |
3 | import android.app.Activity;
4 | import android.content.Intent;
5 | import android.os.Bundle;
6 |
7 | import androidx.annotation.Nullable;
8 |
9 | /**
10 | * 作者:By hdy
11 | * 日期:On 2018/11/16
12 | * 时间:At 10:51
13 | */
14 |
15 | public class EmptyActivity extends Activity {
16 |
17 | @Override
18 | protected void onNewIntent(Intent intent) {
19 | finish();
20 | super.onNewIntent(intent);
21 | }
22 |
23 | @Override
24 | protected void onCreate(@Nullable Bundle savedInstanceState) {
25 | super.onCreate(savedInstanceState);
26 | finish();
27 | }
28 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/hd/tvpro/constants/AppConfig.kt:
--------------------------------------------------------------------------------
1 | package com.hd.tvpro.constants
2 |
3 | /**
4 | * 作者:By 15968
5 | * 日期:On 2021/10/26
6 | * 时间:At 15:13
7 | */
8 | object AppConfig {
9 | var settingHeight = 0
10 | var fontSize = 20
11 | var liveHeight = 0
12 | }
13 |
--------------------------------------------------------------------------------
/app/src/main/java/com/hd/tvpro/constants/TimeConstants.java:
--------------------------------------------------------------------------------
1 | package com.hd.tvpro.constants;
2 |
3 | import androidx.annotation.IntDef;
4 |
5 | import java.lang.annotation.Retention;
6 | import java.lang.annotation.RetentionPolicy;
7 |
8 | public class TimeConstants {
9 | public static final int MSEC = 1;
10 | public static final int SEC = 1000;
11 | public static final int MIN = 60000;
12 | public static final int HOUR = 3600000;
13 | public static final int DAY = 86400000;
14 | public static final long HTTP_TIMEOUT_MILLISECONDS = 10000;
15 |
16 | @IntDef({MSEC, SEC, MIN, HOUR, DAY})
17 | @Retention(RetentionPolicy.SOURCE)
18 | public @interface Unit {
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/app/src/main/java/com/hd/tvpro/event/PlayUrlChange.kt:
--------------------------------------------------------------------------------
1 | package com.hd.tvpro.event
2 |
3 | /**
4 | * 作者:By 15968
5 | * 日期:On 2022/1/14
6 | * 时间:At 22:54
7 | */
8 | class PlayUrlChange(var url: String?, var name: String?, var subtitle: String?)
--------------------------------------------------------------------------------
/app/src/main/java/com/hd/tvpro/event/SubChange.kt:
--------------------------------------------------------------------------------
1 | package com.hd.tvpro.event
2 |
3 | /**
4 | * 作者:By 15968
5 | * 日期:On 2022/1/14
6 | * 时间:At 22:54
7 | */
8 | class SubChange(var url: String)
--------------------------------------------------------------------------------
/app/src/main/java/com/hd/tvpro/event/SwitchUrlChange.kt:
--------------------------------------------------------------------------------
1 | package com.hd.tvpro.event
2 |
3 | /**
4 | * 作者:By 15968
5 | * 日期:On 2022/1/14
6 | * 时间:At 22:54
7 | */
8 | class SwitchUrlChange(var url: String)
--------------------------------------------------------------------------------
/app/src/main/java/com/hd/tvpro/receiver/SelfStartingReceiver.kt:
--------------------------------------------------------------------------------
1 | package com.hd.tvpro.receiver
2 |
3 | import android.content.BroadcastReceiver
4 | import android.content.Context
5 | import android.content.Intent
6 | import android.util.Log
7 | import com.hd.tvpro.MainActivity
8 | import com.hd.tvpro.util.PreferenceMgr
9 |
10 | /**
11 | * 作者:By 15968
12 | * 日期:On 2022/6/29
13 | * 时间:At 18:54
14 | */
15 | class SelfStartingReceiver : BroadcastReceiver() {
16 | override fun onReceive(context: Context, intent: Intent?) {
17 | val selfStart = PreferenceMgr.getBoolean(context, "selfStart", false)
18 | Log.d(Companion.TAG, "onReceive: ")
19 | if (selfStart) {
20 | val bootIntent = Intent(context, MainActivity::class.java)
21 | // 这里必须为FLAG_ACTIVITY_NEW_TASK
22 | bootIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
23 | context.startActivity(bootIntent)
24 | }
25 | }
26 |
27 | companion object {
28 | private const val TAG = "SelfStartingReceiver"
29 | }
30 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/hd/tvpro/service/model/LiveItem.kt:
--------------------------------------------------------------------------------
1 | package service.model
2 |
3 | data class LiveItem(
4 | var name: String,
5 | var urls: ArrayList,
6 | var children: ArrayList? = null
7 | )
--------------------------------------------------------------------------------
/app/src/main/java/com/hd/tvpro/setting/SettingOption.java:
--------------------------------------------------------------------------------
1 | package com.hd.tvpro.setting;
2 |
3 | import java.util.ArrayList;
4 |
5 | public class SettingOption {
6 | public String mLeftValue;
7 | public ArrayList mRightList;
8 |
9 | public SettingOption(String name) {
10 | mRightList = new ArrayList<>();
11 | mLeftValue = name;
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/app/src/main/java/com/hd/tvpro/util/ShareUtil.java:
--------------------------------------------------------------------------------
1 | package com.hd.tvpro.util;
2 |
3 | import android.content.Context;
4 | import android.content.Intent;
5 | import android.net.Uri;
6 |
7 | /**
8 | * 作者:By hdy
9 | * 日期:On 2017/10/24
10 | * 时间:At 19:44
11 | */
12 |
13 | public class ShareUtil {
14 |
15 | public static void shareText(Context context, String str) {
16 | Intent intent = new Intent();
17 | intent.setAction(Intent.ACTION_SEND);
18 | if (str != null) {
19 | intent.putExtra(Intent.EXTRA_TEXT, str);
20 | } else {
21 | intent.putExtra(Intent.EXTRA_TEXT, "");
22 | }
23 | intent.setType("text/plain");
24 | try {
25 | context.startActivity(Intent.createChooser(intent, "分享"));
26 | } catch (Exception e) {
27 | e.printStackTrace();
28 | ToastMgr.shortBottomCenter(context, "系统故障:" + e.getMessage());
29 | }
30 | }
31 |
32 | public static void startUrl(Context context, String url) {
33 | try {
34 | Uri uri = Uri.parse(url);
35 | Intent intent = new Intent(Intent.ACTION_VIEW, uri);
36 | context.startActivity(intent);
37 | } catch (Exception e) {
38 | ToastMgr.shortBottomCenter(context, "打开失败!");
39 | }
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/app/src/main/java/com/hd/tvpro/util/ToastMgr.java:
--------------------------------------------------------------------------------
1 | package com.hd.tvpro.util;
2 |
3 | /**
4 | * 作者:By hdy
5 | * 日期:On 2017/11/6
6 | * 时间:At 16:51
7 | */
8 |
9 | import android.content.Context;
10 | import android.view.Gravity;
11 | import android.widget.Toast;
12 |
13 | public class ToastMgr {
14 |
15 | public static void shortBottomCenter(Context context, String message) {
16 | if(context == null){
17 | return;
18 | }
19 | Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
20 | }
21 |
22 | public static void shortCenter(Context context, String message) {
23 | if(context == null){
24 | return;
25 | }
26 | Toast toast = Toast.makeText(context, message, Toast.LENGTH_SHORT);
27 | toast.setGravity(Gravity.CENTER, 0, 0);
28 | toast.show();
29 | }
30 |
31 | public static void longCenter(Context context, String message) {
32 | if(context == null){
33 | return;
34 | }
35 | Toast toast = Toast.makeText(context, message, Toast.LENGTH_LONG);
36 | toast.setGravity(Gravity.CENTER, 0, 0);
37 | toast.show();
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/app/src/main/java/com/hd/tvpro/util/WindowHelper.kt:
--------------------------------------------------------------------------------
1 | package com.hd.tvpro.util
2 |
3 | import android.app.ActivityManager
4 | import android.content.Context
5 |
6 | /**
7 | * 作者:By 15968
8 | * 日期:On 2021/11/4
9 | * 时间:At 13:23
10 | */
11 | object WindowHelper {
12 |
13 | private fun isRunningForeground(context: Context): Boolean {
14 | val activityManager = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
15 | val appProcessInfoList = activityManager.runningAppProcesses
16 | for (appProcessInfo in appProcessInfoList) {
17 | if (appProcessInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND
18 | && appProcessInfo.processName == context.applicationInfo.processName
19 | ) {
20 | return true
21 | }
22 | }
23 | return false
24 | }
25 |
26 | fun setTopApp(context: Context) {
27 | if (isRunningForeground(context)) {
28 | return
29 | }
30 | //获取ActivityManager
31 | val activityManager: ActivityManager =
32 | context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
33 | //获得当前运行的task(任务)
34 | val taskInfoList: List =
35 | activityManager.getRunningTasks(100)
36 | for (taskInfo in taskInfoList) {
37 | //找到本应用的 task,并将它切换到前台
38 | if (taskInfo.topActivity?.packageName.equals(context.packageName)) {
39 | //返回启动它的根任务(home 或者 MainActivity)
40 | activityManager.moveTaskToFront(
41 | taskInfo.id,
42 | ActivityManager.MOVE_TASK_NO_USER_ACTION
43 | )
44 | break
45 | }
46 | }
47 | }
48 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/hd/tvpro/util/async/ThreadTool.kt:
--------------------------------------------------------------------------------
1 | package com.hd.tvpro.util.async
2 |
3 | import kotlinx.coroutines.Dispatchers
4 | import kotlinx.coroutines.GlobalScope
5 | import kotlinx.coroutines.launch
6 |
7 | /**
8 | * 作者:By 15968
9 | * 日期:On 2021/10/24
10 | * 时间:At 20:29
11 | */
12 | object ThreadTool {
13 |
14 | fun executeNewTask(command: Runnable?) {
15 | GlobalScope.launch(Dispatchers.IO) {
16 | command?.run()
17 | }
18 | }
19 |
20 | fun runOnUI(command: () -> Unit) {
21 | GlobalScope.launch(Dispatchers.Main) {
22 | command()
23 | }
24 | }
25 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/hd/tvpro/util/http/CharsetStringCallback.java:
--------------------------------------------------------------------------------
1 | package com.hd.tvpro.util.http;
2 |
3 | import com.lzy.okgo.callback.AbsCallback;
4 |
5 | import okhttp3.Response;
6 |
7 | /**
8 | * 作者:By 15968
9 | * 日期:On 2019/10/4
10 | * 时间:At 10:31
11 | */
12 | public abstract class CharsetStringCallback extends AbsCallback {
13 |
14 | private CharsetStringConvert convert;
15 |
16 | public CharsetStringCallback(String charset) {
17 | convert = new CharsetStringConvert(charset);
18 | }
19 |
20 | @Override
21 | public String convertResponse(Response response) throws Throwable {
22 | String s = null;
23 | try {
24 | s = convert.convertResponse(response);
25 | } finally {
26 | response.close();
27 | }
28 | return s;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/app/src/main/java/com/hd/tvpro/util/http/CharsetStringConvert.java:
--------------------------------------------------------------------------------
1 | package com.hd.tvpro.util.http;
2 |
3 | import android.text.TextUtils;
4 |
5 | import com.lzy.okgo.convert.Converter;
6 |
7 | import java.io.IOException;
8 |
9 | import okhttp3.Response;
10 | import okhttp3.ResponseBody;
11 |
12 | /**
13 | * 作者:By 15968
14 | * 日期:On 2019/10/4
15 | * 时间:At 10:30
16 | */
17 | public class CharsetStringConvert implements Converter {
18 |
19 | private String charset;
20 |
21 | public CharsetStringConvert(String charset) {
22 | this.charset = charset;
23 | }
24 |
25 | @Override
26 | public String convertResponse(Response response) throws Throwable {
27 | try (ResponseBody body = response.body()) {
28 | if (TextUtils.isEmpty(charset)) {
29 | if (body != null) {
30 | try {
31 | return body.string();
32 | } catch (IOException e) {
33 | e.printStackTrace();
34 | //部分情况下会抛异常
35 | return "";
36 | }
37 | }
38 | return "";
39 | }
40 | byte[] b = new byte[0];
41 | if (body != null) {
42 | try {
43 | b = body.bytes();
44 | //自动识别charset
45 | // MediaType mediaType = body.contentType();
46 | // if (mediaType != null && mediaType.charset() != null) {
47 | // return new String(b, mediaType.charset());
48 | // }
49 | } catch (IOException e) {
50 | e.printStackTrace();
51 | //部分情况下获取byte会抛异常
52 | return "";
53 | }
54 | }
55 | return new String(b, charset);
56 | }
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/app/src/main/java/com/hd/tvpro/util/http/HttpListener.kt:
--------------------------------------------------------------------------------
1 | package com.hd.tvpro.util.http
2 |
3 | /**
4 | * 作者:By 15968
5 | * 日期:On 2021/10/24
6 | * 时间:At 20:45
7 | */
8 | interface HttpListener {
9 | fun success(body: String?)
10 |
11 | fun failed(msg: String?)
12 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/hd/tvpro/util/http/HttpUtils.kt:
--------------------------------------------------------------------------------
1 | package com.hd.tvpro.util.http
2 |
3 | import com.lzy.okgo.OkGo
4 | import com.lzy.okgo.model.Response
5 |
6 | /**
7 | * 作者:By 15968
8 | * 日期:On 2021/10/24
9 | * 时间:At 20:44
10 | */
11 | object HttpUtils {
12 | fun get(url:String, listener: HttpListener) {
13 | OkGo.get(url)
14 | .execute(object : CharsetStringCallback("UTF-8") {
15 | override fun onSuccess(response: Response) {
16 | listener.success(response.body())
17 | }
18 |
19 | override fun onError(response: Response) {
20 | listener.failed(response.body())
21 | super.onError(response)
22 | }
23 | })
24 | }
25 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/hd/tvpro/video/VideoDataHelper.kt:
--------------------------------------------------------------------------------
1 | package com.hd.tvpro.video
2 |
3 | /**
4 | * 作者:By 15968
5 | * 日期:On 2021/10/25
6 | * 时间:At 11:05
7 | */
8 | interface VideoDataHelper {
9 |
10 | fun next(autoEnd: Boolean)
11 |
12 | fun previous()
13 |
14 | fun fastForward()
15 |
16 | fun rewind()
17 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/hd/tvpro/video/model/TrackHolder.kt:
--------------------------------------------------------------------------------
1 | package com.hd.tvpro.video.model
2 |
3 | import com.google.android.exoplayer2.source.TrackGroupArray
4 | import com.google.android.exoplayer2.trackselection.MappingTrackSelector
5 | import com.google.android.exoplayer2.trackselection.TrackSelectionArray
6 |
7 | /**
8 | * 作者:By 15968
9 | * 日期:On 2022/10/1
10 | * 时间:At 15:07
11 | */
12 | data class TrackHolder(
13 | val trackGroups: TrackGroupArray?,
14 | val trackSelections: TrackSelectionArray?,
15 | val trackProvider: () -> MappingTrackSelector.MappedTrackInfo?,
16 | val subtitle: () -> String?
17 | )
18 |
--------------------------------------------------------------------------------
/app/src/main/java/com/hd/tvpro/view/ChannelListView.java:
--------------------------------------------------------------------------------
1 | package com.hd.tvpro.view;
2 |
3 | import android.content.Context;
4 | import android.graphics.Rect;
5 | import android.util.AttributeSet;
6 | import android.widget.ListView;
7 |
8 | public class ChannelListView extends ListView {
9 | public int pos = 0;
10 | private int y;
11 |
12 | public ChannelListView(Context context) {
13 | super(context);
14 | }
15 |
16 | public ChannelListView(Context context, AttributeSet attrs) {
17 | super(context, attrs);
18 | }
19 |
20 | public ChannelListView(Context context, AttributeSet attrs, int defStyleAttr) {
21 | super(context, attrs, defStyleAttr);
22 | }
23 |
24 | public void setSelect(int position, int y) {
25 | super.setSelection(position);
26 | pos = position;
27 | this.y = y;
28 | }
29 |
30 | @Override
31 | protected void onFocusChanged(boolean gainFocus, int direction,
32 | Rect previouslyFocusedRect) {
33 | super.onFocusChanged(gainFocus, direction, previouslyFocusedRect);
34 | if (gainFocus) {
35 | setSelectionFromTop(pos, y);
36 | }
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/app/src/main/java/com/hd/tvpro/view/SelectListView.java:
--------------------------------------------------------------------------------
1 | package com.hd.tvpro.view;
2 |
3 | import android.content.Context;
4 | import android.graphics.Rect;
5 | import android.util.AttributeSet;
6 | import android.widget.ListView;
7 |
8 | public class SelectListView extends ListView {
9 | private DataChangedListener dataChangedListener;
10 | public int pos = 0;
11 | private int y;
12 |
13 | public SelectListView(Context context) {
14 | super(context);
15 | }
16 |
17 | public SelectListView(Context context, AttributeSet attrs) {
18 | super(context, attrs);
19 | }
20 |
21 | public SelectListView(Context context, AttributeSet attrs, int defStyleAttr) {
22 | super(context, attrs, defStyleAttr);
23 | }
24 |
25 | public void setSelect(int position, int y) {
26 | super.setSelection(position);
27 | pos = position;
28 | this.y = y;
29 | }
30 |
31 | @Override
32 | protected void onFocusChanged(boolean gainFocus, int direction,
33 | Rect previouslyFocusedRect) {
34 | super.onFocusChanged(gainFocus, direction, previouslyFocusedRect);
35 | if (gainFocus) {
36 | setSelectionFromTop(pos, y);
37 | }
38 | }
39 |
40 |
41 | @Override
42 | protected void handleDataChanged() {
43 | super.handleDataChanged();
44 | if (dataChangedListener != null) dataChangedListener.onSuccess();
45 | }
46 |
47 | public void setDataChangedListener(DataChangedListener dataChangedListener) {
48 | this.dataChangedListener = dataChangedListener;
49 | }
50 |
51 | public interface DataChangedListener {
52 | public void onSuccess();
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/app/src/main/java/com/hd/tvpro/webserver/MyWebConfig.kt:
--------------------------------------------------------------------------------
1 | package com.hd.tvpro.webserver
2 |
3 | import android.content.Context
4 | import com.yanzhenjie.andserver.annotation.Config
5 | import com.yanzhenjie.andserver.framework.config.WebConfig
6 | import com.yanzhenjie.andserver.framework.website.AssetsWebsite
7 |
8 | /**
9 | * 作者:By 15968
10 | * 日期:On 2021/10/20
11 | * 时间:At 20:55
12 | */
13 | @Config
14 | class MyWebConfig : WebConfig {
15 | override fun onConfig(context: Context, delegate: WebConfig.Delegate) {
16 | // 增加一个静态网站
17 | delegate.addWebsite(AssetsWebsite(context, "/live", "sub.html"))
18 | }
19 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/hd/tvpro/webserver/WebServer.java:
--------------------------------------------------------------------------------
1 | package com.hd.tvpro.webserver;
2 |
3 | import com.hd.tvpro.app.App;
4 | import com.yanzhenjie.andserver.AndServer;
5 | import com.yanzhenjie.andserver.Server;
6 |
7 | import java.util.concurrent.TimeUnit;
8 |
9 | public class WebServer {
10 | public final static int port = 12345;
11 |
12 | public void start() {
13 | Server server = AndServer
14 | .webServer(App.INSTANCE.getApplicationContext())
15 | .port(port)
16 | // .inetAddress(new InetSocketAddress(50000).getAddress())
17 | .timeout(60, TimeUnit.SECONDS)
18 | .listener(new Server.ServerListener() {
19 | @Override
20 | public void onStarted() {
21 |
22 | }
23 |
24 | @Override
25 | public void onStopped() {
26 |
27 | }
28 |
29 | @Override
30 | public void onException(Exception e) {
31 |
32 | }
33 | }).build();
34 | server.startup();
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/app/src/main/java/com/pngcui/skyworth/dlna/center/DlnaMediaModel.java:
--------------------------------------------------------------------------------
1 | package com.pngcui.skyworth.dlna.center;
2 |
3 | public class DlnaMediaModel {
4 |
5 | private String uri = "";
6 | private String title = "";
7 | private String artist = "";
8 | private String album = "";
9 | private String albumiconuri = "";
10 | private String objectclass = "";
11 |
12 |
13 | public String getTitle() {
14 | return title;
15 | }
16 |
17 | public void setTitle(String title) {
18 | this.title = (title != null ? title : "");
19 | }
20 |
21 | public String getArtist() {
22 | return artist;
23 | }
24 |
25 | public void setArtist(String artist) {
26 | this.artist = (artist != null ? artist : "");
27 | }
28 |
29 | public void setAlbum(String album) {
30 | this.album = (album != null ? album : "");
31 | }
32 |
33 | public String getAlbum() {
34 | return album;
35 | }
36 |
37 | public void setObjectClass(String objectClass) {
38 | this.objectclass = (objectClass != null ? objectClass : "");
39 | }
40 |
41 | public String getObjectClass() {
42 | return objectclass;
43 | }
44 |
45 | public void setUrl(String uri) {
46 | this.uri = (uri != null ? uri : "");
47 | }
48 |
49 | public String getUrl() {
50 | return uri;
51 | }
52 |
53 | public String getAlbumUri() {
54 | return albumiconuri;
55 | }
56 |
57 | public void setAlbumUri(String albumiconuri) {
58 | this.albumiconuri = (albumiconuri != null ? albumiconuri : "");
59 | }
60 |
61 | }
62 |
--------------------------------------------------------------------------------
/app/src/main/java/com/pngcui/skyworth/dlna/center/IBaseEngine.java:
--------------------------------------------------------------------------------
1 | package com.pngcui.skyworth.dlna.center;
2 |
3 | public interface IBaseEngine {
4 |
5 | public boolean startEngine();
6 |
7 | public boolean stopEngine();
8 |
9 | public boolean restartEngine();
10 | }
11 |
--------------------------------------------------------------------------------
/app/src/main/java/com/pngcui/skyworth/dlna/center/IDMRAction.java:
--------------------------------------------------------------------------------
1 | package com.pngcui.skyworth.dlna.center;
2 |
3 |
4 | public interface IDMRAction {
5 | public void onRenderAvTransport(String value, String data);
6 |
7 | public void onRenderPlay(String value, String data);
8 |
9 | public void onRenderPause(String value, String data);
10 |
11 | public void onRenderStop(String value, String data);
12 |
13 | public void onRenderSeek(String value, String data);
14 |
15 | public void onRenderSetMute(String value, String data);
16 |
17 | public void onRenderSetVolume(String value, String data);
18 | }
19 |
20 |
--------------------------------------------------------------------------------
/app/src/main/java/com/pngcui/skyworth/dlna/center/MediaControlBrocastReceiver.java:
--------------------------------------------------------------------------------
1 | package com.pngcui.skyworth.dlna.center;
2 |
3 | import android.content.BroadcastReceiver;
4 | import android.content.Context;
5 | import android.content.Intent;
6 |
7 | import com.pngcui.skyworth.dlna.util.CommonLog;
8 | import com.pngcui.skyworth.dlna.util.LogFactory;
9 |
10 | public class MediaControlBrocastReceiver extends BroadcastReceiver {
11 |
12 | private static final CommonLog log = LogFactory.createLog();
13 | private MediaControlBrocastFactory.IMediaControlListener mMediaControlListener;
14 |
15 | @Override
16 | public void onReceive(Context context, Intent intent) {
17 | String action = intent.getAction();
18 | if (action != null && mMediaControlListener != null) {
19 | TransdelControlCommand(intent);
20 | }
21 | }
22 |
23 | public void setMediaControlListener(MediaControlBrocastFactory.IMediaControlListener listener) {
24 | mMediaControlListener = listener;
25 | }
26 |
27 | private void TransdelControlCommand(Intent intent) {
28 | int time = 0;
29 | String action = intent.getAction();
30 | if (action.equalsIgnoreCase(MediaControlBrocastFactory.MEDIA_RENDERER_CMD_PLAY)) {
31 | mMediaControlListener.onPlayCommand();
32 | } else if (action.equalsIgnoreCase(MediaControlBrocastFactory.MEDIA_RENDERER_CMD_PAUSE)) {
33 | mMediaControlListener.onPauseCommand();
34 | } else if (action.equalsIgnoreCase(MediaControlBrocastFactory.MEDIA_RENDERER_CMD_STOP)) {
35 | mMediaControlListener.onStopCommand();
36 | } else if (action.equalsIgnoreCase(MediaControlBrocastFactory.MEDIA_RENDERER_CMD_SEEKPS)) {
37 | time = intent.getIntExtra(MediaControlBrocastFactory.PARAM_CMD_SEEKPS, 0);
38 | mMediaControlListener.onSeekCommand(time);
39 | }
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/app/src/main/java/com/pngcui/skyworth/dlna/center/MediaRenderProxy.java:
--------------------------------------------------------------------------------
1 | package com.pngcui.skyworth.dlna.center;
2 |
3 | import android.content.Context;
4 | import android.content.Intent;
5 |
6 | import com.pngcui.skyworth.dlna.event.EngineCommand;
7 | import com.pngcui.skyworth.dlna.util.CommonLog;
8 | import com.hd.tvpro.app.App;
9 | import com.pngcui.skyworth.dlna.service.MediaRenderService;
10 | import com.pngcui.skyworth.dlna.util.LogFactory;
11 |
12 | import org.greenrobot.eventbus.EventBus;
13 |
14 |
15 | public class MediaRenderProxy implements IBaseEngine {
16 |
17 | private static final CommonLog log = LogFactory.createLog();
18 |
19 | private static MediaRenderProxy mInstance;
20 | private Context mContext;
21 |
22 | private MediaRenderProxy(Context context) {
23 | mContext = context;
24 | }
25 |
26 | public static synchronized MediaRenderProxy getInstance() {
27 | if (mInstance == null) {
28 | mInstance = new MediaRenderProxy(App.INSTANCE);
29 | }
30 | return mInstance;
31 | }
32 |
33 | @Override
34 | public boolean startEngine() {
35 | EventBus.getDefault().post(new EngineCommand(MediaRenderService.START_RENDER_ENGINE));
36 | return true;
37 | }
38 |
39 | @Override
40 | public boolean stopEngine() {
41 | mContext.stopService(new Intent(mContext, MediaRenderService.class));
42 | return true;
43 | }
44 |
45 | @Override
46 | public boolean restartEngine() {
47 | EventBus.getDefault().post(new EngineCommand(MediaRenderService.RESTART_RENDER_ENGINE));
48 | return true;
49 | }
50 |
51 | }
52 |
--------------------------------------------------------------------------------
/app/src/main/java/com/pngcui/skyworth/dlna/datastore/LocalConfigSharePreference.java:
--------------------------------------------------------------------------------
1 | package com.pngcui.skyworth.dlna.datastore;
2 |
3 | import android.content.Context;
4 | import android.content.SharedPreferences;
5 | import android.content.SharedPreferences.Editor;
6 |
7 | import com.hd.tvpro.R;
8 | import com.hd.tvpro.util.StringUtil;
9 |
10 | public class LocalConfigSharePreference {
11 |
12 | public static final String preference_name = "LocalConfigSharePreference";
13 | public static final String dev_name = "dev_name";
14 |
15 | public static boolean commintDevName(Context context, String devName) {
16 | SharedPreferences sharedPreferences = context.getSharedPreferences(preference_name, 0);
17 | Editor editor = sharedPreferences.edit();
18 | editor.putString(dev_name, devName);
19 | editor.commit();
20 | return true;
21 | }
22 |
23 | public static String getDevName(Context context) {
24 | SharedPreferences sharedPreferences = context.getSharedPreferences(preference_name, 0);
25 | String key = sharedPreferences.getString(dev_name, null);
26 | if (StringUtil.isEmpty(key) || !key.contains("2-")) {
27 | key = context.getResources().getString(R.string.app_name) + "2-" + StringUtil.genRandomPwd(6, true);
28 | commintDevName(context, key);
29 | }
30 | return key;
31 | }
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/app/src/main/java/com/pngcui/skyworth/dlna/device/DeviceInfo.java:
--------------------------------------------------------------------------------
1 | package com.pngcui.skyworth.dlna.device;
2 |
3 | public class DeviceInfo {
4 |
5 | public String dev_name;
6 | public String uuid;
7 | public boolean status;
8 |
9 | public DeviceInfo() {
10 | dev_name = "";
11 | uuid = "";
12 | status = false;
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/app/src/main/java/com/pngcui/skyworth/dlna/device/DeviceUpdateBrocastFactory.java:
--------------------------------------------------------------------------------
1 | package com.pngcui.skyworth.dlna.device;
2 |
3 | import android.content.Context;
4 | import android.content.Intent;
5 | import android.content.IntentFilter;
6 |
7 |
8 | public class DeviceUpdateBrocastFactory {
9 |
10 | public static final String PARAM_DEV_UPDATE = "com.geniusgithub.PARAM_DEV_UPDATE";
11 |
12 | public static interface IDevUpdateListener {
13 | public void onUpdate();
14 | }
15 |
16 |
17 | private DeviceUpdateBrocastReceiver mReceiver;
18 | private Context mContext;
19 |
20 | public DeviceUpdateBrocastFactory(Context context) {
21 | mContext = context;
22 | }
23 |
24 |
25 | public void register(IDevUpdateListener listener) {
26 | if (mReceiver == null) {
27 | mReceiver = new DeviceUpdateBrocastReceiver();
28 | mReceiver.setListener(listener);
29 | mContext.registerReceiver(mReceiver, new IntentFilter(PARAM_DEV_UPDATE));
30 | }
31 | }
32 |
33 | public void unregister() {
34 | if (mReceiver != null) {
35 | mContext.unregisterReceiver(mReceiver);
36 | mReceiver = null;
37 | }
38 | }
39 |
40 | public static void sendDevUpdateBrocast(Context context) {
41 | Intent intent = new Intent();
42 | intent.setAction(PARAM_DEV_UPDATE);
43 | context.sendBroadcast(intent);
44 | }
45 |
46 | }
47 |
--------------------------------------------------------------------------------
/app/src/main/java/com/pngcui/skyworth/dlna/device/DeviceUpdateBrocastReceiver.java:
--------------------------------------------------------------------------------
1 | package com.pngcui.skyworth.dlna.device;
2 |
3 | import android.content.BroadcastReceiver;
4 | import android.content.Context;
5 | import android.content.Intent;
6 |
7 | import com.pngcui.skyworth.dlna.util.CommonLog;
8 | import com.pngcui.skyworth.dlna.util.LogFactory;
9 |
10 | public class DeviceUpdateBrocastReceiver extends BroadcastReceiver {
11 |
12 | private static final CommonLog log = LogFactory.createLog();
13 | private DeviceUpdateBrocastFactory.IDevUpdateListener mListener;
14 |
15 | public void setListener(DeviceUpdateBrocastFactory.IDevUpdateListener listener) {
16 | mListener = listener;
17 | }
18 |
19 | @Override
20 | public void onReceive(Context context, Intent intent) {
21 | String action = intent.getAction();
22 | if (action == null) {
23 | return;
24 | }
25 |
26 | if (DeviceUpdateBrocastFactory.PARAM_DEV_UPDATE.equalsIgnoreCase(action)) {
27 | if (mListener != null) {
28 | mListener.onUpdate();
29 | }
30 | }
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/app/src/main/java/com/pngcui/skyworth/dlna/device/ItatisticsEvent.java:
--------------------------------------------------------------------------------
1 | package com.pngcui.skyworth.dlna.device;
2 |
3 | import java.util.HashMap;
4 |
5 | public interface ItatisticsEvent {
6 |
7 | public void onEvent(String eventID);
8 |
9 | public void onEvent(String eventID, HashMap map);
10 | }
11 |
--------------------------------------------------------------------------------
/app/src/main/java/com/pngcui/skyworth/dlna/event/EngineCommand.kt:
--------------------------------------------------------------------------------
1 | package com.pngcui.skyworth.dlna.event
2 |
3 | /**
4 | * 作者:By 15968
5 | * 日期:On 2021/10/27
6 | * 时间:At 22:20
7 | */
8 | class EngineCommand constructor(var command: String) {
9 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/pngcui/skyworth/dlna/jni/PlatinumJniProxy.java:
--------------------------------------------------------------------------------
1 | package com.pngcui.skyworth.dlna.jni;
2 |
3 | public class PlatinumJniProxy {
4 |
5 | static {
6 | System.loadLibrary("git-platinum");
7 | }
8 |
9 | public static native int startDlnaMediaRender(byte[] friendname, byte[] uuid);
10 |
11 | public static native void stopDlnaMediaRender();
12 |
13 | public static native boolean responseGenaEvent(int cmd, byte[] value, byte[] data);
14 |
15 | public static native boolean enableLogPrint(boolean flag);
16 |
17 |
18 | public static int startMediaRender(String friendname, String uuid) {
19 | int ret = -1;
20 | try {
21 | if (friendname == null) friendname = "";
22 | if (uuid == null) uuid = "";
23 | ret = startDlnaMediaRender(friendname.getBytes("utf-8"), uuid.getBytes("utf-8"));
24 | } catch (Throwable e) {
25 | e.printStackTrace();
26 | }
27 | return ret;
28 | }
29 |
30 | public static boolean responseGenaEvent(int cmd, String value, String data) {
31 | try {
32 | if (value == null) value = "";
33 | if (data == null) data = "";
34 | boolean ret = false;
35 | ret = responseGenaEvent(cmd, value.getBytes("utf-8"), data.getBytes("utf-8"));
36 | return ret;
37 | } catch (Exception e) {
38 | e.printStackTrace();
39 | }
40 | return false;
41 | }
42 |
43 |
44 | }
45 |
--------------------------------------------------------------------------------
/app/src/main/java/com/pngcui/skyworth/dlna/util/LogFactory.java:
--------------------------------------------------------------------------------
1 | package com.pngcui.skyworth.dlna.util;
2 |
3 |
4 | public class LogFactory {
5 | private static final String TAG = "MediaRender";
6 | private static CommonLog log = null;
7 |
8 | public static CommonLog createLog() {
9 | if (log == null) {
10 | log = new CommonLog();
11 | }
12 |
13 | log.setTag(TAG);
14 | return log;
15 | }
16 |
17 | public static CommonLog createLog(String tag) {
18 | if (log == null) {
19 | log = new CommonLog();
20 | }
21 |
22 | if (tag == null || tag.length() < 1) {
23 | log.setTag(TAG);
24 | } else {
25 | log.setTag(tag);
26 | }
27 | return log;
28 | }
29 | }
--------------------------------------------------------------------------------
/app/src/main/jniLibs/arm64-v8a/libcrashsdk.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/app/src/main/jniLibs/arm64-v8a/libcrashsdk.so
--------------------------------------------------------------------------------
/app/src/main/jniLibs/arm64-v8a/libumeng-spy.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/app/src/main/jniLibs/arm64-v8a/libumeng-spy.so
--------------------------------------------------------------------------------
/app/src/main/jniLibs/armeabi-v7a/libcrashsdk.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/app/src/main/jniLibs/armeabi-v7a/libcrashsdk.so
--------------------------------------------------------------------------------
/app/src/main/jniLibs/armeabi-v7a/libgit-platinum.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/app/src/main/jniLibs/armeabi-v7a/libgit-platinum.so
--------------------------------------------------------------------------------
/app/src/main/jniLibs/armeabi-v7a/libumeng-spy.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/app/src/main/jniLibs/armeabi-v7a/libumeng-spy.so
--------------------------------------------------------------------------------
/app/src/main/res/color/exit_button_text_color.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
9 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/color/item_text_selector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/color/item_text_selector_left.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_check_green.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/app/src/main/res/drawable-xxhdpi/ic_check_green.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/app_icon_your_company.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/app/src/main/res/drawable/app_icon_your_company.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/button_normal_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/default_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/item_bg_selector_setting_right.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/item_setting_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/live_list_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/menu_bg_n.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/menu_bg_selector.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
7 |
10 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/movie.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/app/src/main/res/drawable/movie.png
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_details.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_list_channel.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_list_left.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_list_setting_left.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_list_setting_right.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
16 |
17 |
26 |
27 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/layout_live.xml:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
21 |
22 |
26 |
27 |
36 |
37 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/layout_setting.xml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
24 |
25 |
30 |
31 |
40 |
41 |
51 |
52 |
53 |
54 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/values-1920x1080/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 | 64dp
9 | 20sp
10 | 20sp
11 | 2sp
12 |
13 | 20sp
14 | 15sp
15 |
16 | 15sp
17 |
18 | 120sp
19 | 650sp
20 |
21 |
22 |
--------------------------------------------------------------------------------
/app/src/main/res/values-2000x1200/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 | 64dp
9 | 30sp
10 | 30sp
11 | 4sp
12 |
13 | 30sp
14 | 20sp
15 |
16 | 17sp
17 |
18 | 180sp
19 | 850sp
20 |
21 |
--------------------------------------------------------------------------------
/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 | #000000
3 | #DDDDDD
4 | #0096a6
5 | #ffaa3f
6 | #ffaa3f
7 | #3d3d3d
8 | #ABB2E5
9 | #fff
10 | #8C8C8C
11 | #E6FFFFFF
12 |
--------------------------------------------------------------------------------
/app/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 16dp
4 | 16dp
5 | 12sp
6 | 12sp
7 | 12sp
8 | 23sp
9 | 12sp
10 | 1sp
11 | 120sp
12 | 500sp
13 | 39sp
14 | 25sp
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/app/src/main/res/values/ic_launcher_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #ACB3E7
4 |
--------------------------------------------------------------------------------
/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | 波澜投屏
3 | 波澜投屏
4 | Related Videos
5 | Grid View
6 | Error Fragment
7 | Personal Settings
8 | Watch trailer
9 | FREE
10 | Rent By Day
11 | From $1.99
12 | Buy and Own
13 | AT $9.99
14 | Movie
15 |
16 | 退出
17 | 设置
18 |
19 | An error occurred
20 | Dismiss
21 |
--------------------------------------------------------------------------------
/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/values/themes.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 |
10 |
14 |
15 |
22 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/network_security_config.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/build.gradle:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 | buildscript {
3 | apply from: 'versions.gradle'
4 | ext.kotlin_version = "1.5.31"
5 | repositories {
6 | google()
7 | mavenCentral()
8 | }
9 | dependencies {
10 | classpath "com.android.tools.build:gradle:4.2.2"
11 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
12 | classpath 'com.yanzhenjie.andserver:plugin:2.1.9'
13 |
14 | // NOTE: Do not place your application dependencies here; they belong
15 | // in the individual module build.gradle files
16 | }
17 | }
18 |
19 | allprojects {
20 | repositories {
21 | maven { url 'https://maven.google.com' }
22 | maven{url 'https://jitpack.io'}
23 | google()
24 | jcenter()
25 | maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
26 | maven { url 'https://dl.bintray.com/ycjiang/ycjiang' }
27 | maven { url 'https://dl.bintray.com/hpdx/maven/' }
28 | }
29 |
30 | project.ext {
31 | compileSdkVersion=29
32 | targetSdkVersion=26
33 | buildToolsVersion='29.0.0'
34 | minSdkVersion=17
35 | versionCode = 16
36 | versionName = "3.0"
37 | publish_version='2.1.91'
38 | }
39 | }
40 |
41 | task clean(type: Delete) {
42 | delete rootProject.buildDir
43 | }
--------------------------------------------------------------------------------
/ffmpeg/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/ffmpeg/build.gradle:
--------------------------------------------------------------------------------
1 | // Copyright (C) 2016 The Android Open Source Project
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | apply plugin: 'com.android.library'
15 |
16 | android {
17 | compileSdkVersion project.ext.compileSdkVersion
18 | buildToolsVersion project.ext.buildToolsVersion
19 |
20 | defaultConfig {
21 | minSdkVersion project.ext.minSdkVersion
22 | targetSdkVersion project.ext.targetSdkVersion
23 | consumerProguardFiles 'proguard-rules.txt'
24 | }
25 |
26 | // sourceSets.main {
27 | // jniLibs.srcDir 'src/main/jniLibs'
28 | // jni.srcDirs = [] // Disable the automatic ndk-build call by Android Studio.
29 | // }
30 | compileOptions {
31 | sourceCompatibility JavaVersion.VERSION_1_8
32 | targetCompatibility JavaVersion.VERSION_1_8
33 | }
34 | }
35 |
36 | dependencies {
37 | implementation project(':VideoPlayModule-Lite')
38 | implementation 'androidx.annotation:annotation:1.2.0'
39 | }
40 |
41 |
--------------------------------------------------------------------------------
/ffmpeg/proguard-rules.txt:
--------------------------------------------------------------------------------
1 | # Proguard rules specific to the FFmpeg extension.
2 |
3 | # This prevents the names of native methods from being obfuscated.
4 | -keepclasseswithmembernames class * {
5 | native ;
6 | }
7 |
--------------------------------------------------------------------------------
/ffmpeg/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoderException.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2016 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.ext.ffmpeg;
17 |
18 | import com.google.android.exoplayer2.decoder.DecoderException;
19 |
20 | /**
21 | * Thrown when an FFmpeg decoder error occurs.
22 | */
23 | public final class FfmpegDecoderException extends DecoderException {
24 |
25 | /* package */ FfmpegDecoderException(String message) {
26 | super(message);
27 | }
28 |
29 | /* package */ FfmpegDecoderException(String message, Throwable cause) {
30 | super(message, cause);
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/package-info.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2019 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 | @NonNullApi
17 | package com.google.android.exoplayer2.ext.ffmpeg;
18 |
19 | import com.google.android.exoplayer2.util.NonNullApi;
20 |
--------------------------------------------------------------------------------
/ffmpeg/src/main/jni/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | #
2 | # Copyright 2021 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 |
17 | cmake_minimum_required(VERSION 3.7.1 FATAL_ERROR)
18 |
19 | # Enable C++11 features.
20 | set(CMAKE_CXX_STANDARD 11)
21 |
22 | project(libffmpegJNI C CXX)
23 |
24 | set(ffmpeg_location "${CMAKE_CURRENT_SOURCE_DIR}/ffmpeg")
25 | set(ffmpeg_binaries "${ffmpeg_location}/android-libs/${ANDROID_ABI}")
26 |
27 | foreach(ffmpeg_lib avutil swresample avcodec)
28 | set(ffmpeg_lib_filename lib${ffmpeg_lib}.a)
29 | set(ffmpeg_lib_file_path ${ffmpeg_binaries}/${ffmpeg_lib_filename})
30 | add_library(
31 | ${ffmpeg_lib}
32 | STATIC
33 | IMPORTED)
34 | set_target_properties(
35 | ${ffmpeg_lib} PROPERTIES
36 | IMPORTED_LOCATION
37 | ${ffmpeg_lib_file_path})
38 | endforeach()
39 |
40 | include_directories(${ffmpeg_location})
41 | find_library(android_log_lib log)
42 |
43 | add_library(ffmpegJNI
44 | SHARED
45 | ffmpeg_jni.cc)
46 |
47 | target_link_libraries(ffmpegJNI
48 | PRIVATE android
49 | PRIVATE swresample
50 | PRIVATE avcodec
51 | PRIVATE avutil
52 | PRIVATE ${android_log_lib})
53 |
--------------------------------------------------------------------------------
/ffmpeg/src/main/jni/build_ffmpeg.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | #
3 | # Copyright (C) 2019 The Android Open Source Project
4 | #
5 | # Licensed under the Apache License, Version 2.0 (the "License");
6 | # you may not use this file except in compliance with the License.
7 | # You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing, software
12 | # distributed under the License is distributed on an "AS IS" BASIS,
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | # See the License for the specific language governing permissions and
15 | # limitations under the License.
16 | #
17 |
18 | FFMPEG_MODULE_PATH=$1
19 | NDK_PATH=$2
20 | HOST_PLATFORM=$3
21 | ENABLED_DECODERS=("${@:4}")
22 | JOBS=$(nproc 2> /dev/null || sysctl -n hw.ncpu 2> /dev/null || echo 4)
23 | echo "Using $JOBS jobs for make"
24 | COMMON_OPTIONS="
25 | --target-os=android
26 | --enable-static
27 | --disable-shared
28 | --disable-doc
29 | --disable-programs
30 | --disable-everything
31 | --disable-avdevice
32 | --disable-avformat
33 | --disable-swscale
34 | --disable-postproc
35 | --disable-avfilter
36 | --disable-symver
37 | --disable-avresample
38 | --enable-swresample
39 | --extra-ldexeflags=-pie
40 | "
41 | TOOLCHAIN_PREFIX="${NDK_PATH}/toolchains/llvm/prebuilt/${HOST_PLATFORM}/bin"
42 | for decoder in "${ENABLED_DECODERS[@]}"
43 | do
44 | COMMON_OPTIONS="${COMMON_OPTIONS} --enable-decoder=${decoder}"
45 | done
46 | ./configure \
47 | --libdir=android-libs/armeabi-v7a \
48 | --arch=arm \
49 | --cpu=armv7-a \
50 | --cross-prefix="${TOOLCHAIN_PREFIX}/armv7a-linux-androideabi16-" \
51 | --nm="${TOOLCHAIN_PREFIX}/arm-linux-androideabi-nm" \
52 | --ar="${TOOLCHAIN_PREFIX}/arm-linux-androideabi-ar" \
53 | --ranlib="${TOOLCHAIN_PREFIX}/arm-linux-androideabi-ranlib" \
54 | --strip="${TOOLCHAIN_PREFIX}/arm-linux-androideabi-strip" \
55 | --extra-cflags="-march=armv7-a -mfloat-abi=softfp" \
56 | --extra-ldflags="-Wl,--fix-cortex-a8" \
57 | ${COMMON_OPTIONS}
58 | make -j$JOBS
59 | make install-libs
60 | make clean
--------------------------------------------------------------------------------
/ffmpeg/src/main/jniLibs/arm64-v8a/libavresample.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/ffmpeg/src/main/jniLibs/arm64-v8a/libavresample.so
--------------------------------------------------------------------------------
/ffmpeg/src/main/jniLibs/arm64-v8a/libffmpeg.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/ffmpeg/src/main/jniLibs/arm64-v8a/libffmpeg.so
--------------------------------------------------------------------------------
/ffmpeg/src/main/jniLibs/armeabi-v7a/libavcodec.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/ffmpeg/src/main/jniLibs/armeabi-v7a/libavcodec.so
--------------------------------------------------------------------------------
/ffmpeg/src/main/jniLibs/armeabi-v7a/libavresample.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/ffmpeg/src/main/jniLibs/armeabi-v7a/libavresample.so
--------------------------------------------------------------------------------
/ffmpeg/src/main/jniLibs/armeabi-v7a/libavutil.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/ffmpeg/src/main/jniLibs/armeabi-v7a/libavutil.so
--------------------------------------------------------------------------------
/ffmpeg/src/main/jniLibs/armeabi-v7a/libffmpeg.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/ffmpeg/src/main/jniLibs/armeabi-v7a/libffmpeg.so
--------------------------------------------------------------------------------
/ffmpeg/src/main/jniLibs/armeabi-v7a/libswresample.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/ffmpeg/src/main/jniLibs/armeabi-v7a/libswresample.so
--------------------------------------------------------------------------------
/ffmpeg/src/main/jniLibs/armeabi/libavcodec.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/ffmpeg/src/main/jniLibs/armeabi/libavcodec.so
--------------------------------------------------------------------------------
/ffmpeg/src/main/jniLibs/armeabi/libavresample.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/ffmpeg/src/main/jniLibs/armeabi/libavresample.so
--------------------------------------------------------------------------------
/ffmpeg/src/main/jniLibs/armeabi/libavutil.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/ffmpeg/src/main/jniLibs/armeabi/libavutil.so
--------------------------------------------------------------------------------
/ffmpeg/src/main/jniLibs/armeabi/libffmpeg.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/ffmpeg/src/main/jniLibs/armeabi/libffmpeg.so
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | # Project-wide Gradle settings.
2 | # IDE (e.g. Android Studio) users:
3 | # Gradle settings configured through the IDE *will override*
4 | # any settings specified in this file.
5 | # For more details on how to configure your build environment visit
6 | # http://www.gradle.org/docs/current/userguide/build_environment.html
7 | # Specifies the JVM arguments used for the daemon process.
8 | # The setting is particularly useful for tweaking memory settings.
9 | org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
10 | # When configured, Gradle will run in incubating parallel mode.
11 | # This option should only be used with decoupled projects. More details, visit
12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
13 | # org.gradle.parallel=true
14 | # AndroidX package structure to make it clearer which packages are bundled with the
15 | # Android operating system, and which are packaged with your app"s APK
16 | # https://developer.android.com/topic/libraries/support-library/androidx-rn
17 | android.useAndroidX=true
18 | # Kotlin code style for this project: "official" or "obsolete":
19 | kotlin.code.style=official
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qiusunshine/bolan/d3b34ad0883a3c9796684698acc89045c6ba18da/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Sun Oct 24 17:08:37 CST 2021
2 | distributionBase=GRADLE_USER_HOME
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip
4 | distributionPath=wrapper/dists
5 | zipStorePath=wrapper/dists
6 | zipStoreBase=GRADLE_USER_HOME
7 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | rootProject.name = "波澜投屏"
2 | include ':app'
3 | include ':VideoPlayModule-Lite', ':VideoUi', ':VideoPlayModule', ':ffmpeg'
4 |
--------------------------------------------------------------------------------
/versions.gradle:
--------------------------------------------------------------------------------
1 | //App
2 | def app_version = [:]
3 | app_version.versionCode = 14 //androidx 14
4 | app_version.versionName = "1.0.8-androidx"
5 | ext.app_version = app_version
6 |
7 | //build version
8 | def build_versions = [:]
9 | build_versions.minSdk = 15
10 | build_versions.targetSdk = 28
11 | build_versions.compileSdk = 28
12 | build_versions.buildTools = "28.0.3"
13 | ext.build_versions = build_versions
14 |
15 | // App dependencies
16 | def versions = [:]
17 | //support
18 | versions.supportLibrary = "1.1.0"
19 | versions.constraintLayout = "1.1.3"
20 |
21 | //test
22 | versions.junit = "1.1.0"
23 | versions.test = "1.2.0"
24 | versions.runner = "1.2.0"
25 | versions.espresso = "3.2.0"
26 |
27 | versions.okhttp = "4.2.2"
28 |
29 | ext.versions = versions
30 |
31 | ext.deps = [:]
32 |
33 | //support
34 | def support = [:]
35 | support.appcompat = "androidx.appcompat:appcompat:$versions.supportLibrary"
36 | support.constraintlayout = "androidx.constraintlayout:constraintlayout:$versions.constraintLayout"
37 | deps.support = support
38 |
39 | //test
40 | def test = [:]
41 | test.junit = "androidx.test.ext:junit:$versions.junit"
42 | test.test = "androidx.test:core:$versions.test"
43 | test.runner = "androidx.test:runner:$versions.runner"
44 | test.espresso = "androidx.test.espresso:espresso-core:$versions.espresso"
45 | deps.test = test
46 |
47 | //okHttp
48 | deps.okhttp = "com.squareup.okhttp3:okhttp:$versions.okhttp"
49 |
50 | ext.deps = deps
51 |
52 | def addRepos(RepositoryHandler handler) {
53 | handler.google()
54 | handler.jcenter()
55 | }
56 | ext.addRepos = this.&addRepos
--------------------------------------------------------------------------------