From 3963c76419b306542e73d21545189ede7e3d4874 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ti=CC=81n=20Tra=CC=82=CC=80n?= Date: Fri, 23 Sep 2022 14:00:44 +0700 Subject: [PATCH 1/2] fixed error non-null setDrmSessionManagerProvider, migrate gradle version to 7.3.0, kotlin version to 1.7.10, exoPlayerVersion to "2.18.1" --- android/build.gradle | 18 +-- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../jhomlala/better_player/BetterPlayer.kt | 115 ++++++++++++------ example/android/app/build.gradle | 6 +- example/android/build.gradle | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- lib/src/core/better_player_controller.dart | 3 +- lib/src/hls/hls_parser/drm_init_data.dart | 3 +- .../hls_parser/hls_track_metadata_entry.dart | 3 +- lib/src/hls/hls_parser/scheme_data.dart | 4 +- lib/src/hls/hls_parser/variant_info.dart | 4 +- pubspec.lock | 71 +++++------ pubspec.yaml | 8 +- 13 files changed, 136 insertions(+), 107 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index 40d3f6b57..5badd4da2 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -2,13 +2,13 @@ group 'com.jhomlala.better_player.better_player' version '1.0-SNAPSHOT' buildscript { - ext.exoPlayerVersion = "2.17.1" - ext.lifecycleVersion = "2.4.0-beta01" - ext.annotationVersion = "1.2.0" - ext.workVersion = "2.7.0" + ext.exoPlayerVersion = "2.18.1" + ext.lifecycleVersion = "2.6.0-alpha02" + ext.annotationVersion = "1.4.0" + ext.workVersion = "2.7.1" ext.coreVersion = "1.6.0" - ext.gradleVersion = "7.0.2" - ext.kotlinVersion = "1.5.31" + ext.gradleVersion = "7.3.0" + ext.kotlinVersion = "1.7.10" repositories { google() @@ -16,7 +16,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:4.1.0' + classpath 'com.android.tools.build:gradle:4.1.3' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion" } } @@ -32,7 +32,7 @@ apply plugin: 'com.android.library' apply plugin: 'kotlin-android' android { - compileSdkVersion 31 + compileSdkVersion 33 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 @@ -48,7 +48,7 @@ android { } defaultConfig { - minSdkVersion 16 + minSdkVersion 21 } dependencies { diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 29e413457..b1159fc54 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/android/src/main/kotlin/com/jhomlala/better_player/BetterPlayer.kt b/android/src/main/kotlin/com/jhomlala/better_player/BetterPlayer.kt index f5e494430..f1e98fd7a 100644 --- a/android/src/main/kotlin/com/jhomlala/better_player/BetterPlayer.kt +++ b/android/src/main/kotlin/com/jhomlala/better_player/BetterPlayer.kt @@ -58,7 +58,7 @@ import com.google.android.exoplayer2.audio.AudioAttributes import com.google.android.exoplayer2.drm.DrmSessionManagerProvider import com.google.android.exoplayer2.ext.mediasession.MediaSessionConnector import com.google.android.exoplayer2.trackselection.DefaultTrackSelector.SelectionOverride -import com.google.android.exoplayer2.trackselection.TrackSelectionOverrides +import com.google.android.exoplayer2.trackselection.TrackSelectionOverride import com.google.android.exoplayer2.upstream.DataSource import com.google.android.exoplayer2.upstream.DefaultDataSource import com.google.android.exoplayer2.util.Util @@ -387,13 +387,13 @@ internal class BetterPlayer( if (lastPathSegment == null) { lastPathSegment = "" } - type = Util.inferContentType(lastPathSegment) + type = Util.inferContentTypeForExtension(lastPathSegment) } else { type = when (formatHint) { - FORMAT_SS -> C.TYPE_SS - FORMAT_DASH -> C.TYPE_DASH - FORMAT_HLS -> C.TYPE_HLS - FORMAT_OTHER -> C.TYPE_OTHER + FORMAT_SS -> C.CONTENT_TYPE_SS + FORMAT_DASH -> C.CONTENT_TYPE_DASH + FORMAT_HLS -> C.CONTENT_TYPE_HLS + FORMAT_OTHER -> C.CONTENT_TYPE_OTHER else -> -1 } } @@ -407,28 +407,64 @@ internal class BetterPlayer( drmSessionManager?.let { drmSessionManager -> drmSessionManagerProvider = DrmSessionManagerProvider { drmSessionManager } } + return when (type) { - C.TYPE_SS -> SsMediaSource.Factory( - DefaultSsChunkSource.Factory(mediaDataSourceFactory), - DefaultDataSource.Factory(context, mediaDataSourceFactory) - ) - .setDrmSessionManagerProvider(drmSessionManagerProvider) - .createMediaSource(mediaItem) - C.TYPE_DASH -> DashMediaSource.Factory( - DefaultDashChunkSource.Factory(mediaDataSourceFactory), - DefaultDataSource.Factory(context, mediaDataSourceFactory) - ) - .setDrmSessionManagerProvider(drmSessionManagerProvider) - .createMediaSource(mediaItem) - C.TYPE_HLS -> HlsMediaSource.Factory(mediaDataSourceFactory) - .setDrmSessionManagerProvider(drmSessionManagerProvider) - .createMediaSource(mediaItem) - C.TYPE_OTHER -> ProgressiveMediaSource.Factory( - mediaDataSourceFactory, - DefaultExtractorsFactory() - ) - .setDrmSessionManagerProvider(drmSessionManagerProvider) - .createMediaSource(mediaItem) + C.CONTENT_TYPE_SS -> { + if (drmSessionManagerProvider == null) { + SsMediaSource.Factory( + DefaultSsChunkSource.Factory(mediaDataSourceFactory), + DefaultDataSource.Factory(context, mediaDataSourceFactory) + ) +// .setDrmSessionManagerProvider(drmSessionManagerProvider) + .createMediaSource(mediaItem) + } else { + SsMediaSource.Factory( + DefaultSsChunkSource.Factory(mediaDataSourceFactory), + DefaultDataSource.Factory(context, mediaDataSourceFactory) + ) + .setDrmSessionManagerProvider(drmSessionManagerProvider!!) + .createMediaSource(mediaItem) + } + } + C.CONTENT_TYPE_DASH -> if (drmSessionManagerProvider == null) { + DashMediaSource.Factory( + DefaultDashChunkSource.Factory(mediaDataSourceFactory), + DefaultDataSource.Factory(context, mediaDataSourceFactory) + ) +// .setDrmSessionManagerProvider(drmSessionManagerProvider) + .createMediaSource(mediaItem) + } else { + DashMediaSource.Factory( + DefaultDashChunkSource.Factory(mediaDataSourceFactory), + DefaultDataSource.Factory(context, mediaDataSourceFactory) + ) + .setDrmSessionManagerProvider(drmSessionManagerProvider!!) + .createMediaSource(mediaItem) + } + C.CONTENT_TYPE_HLS -> if (drmSessionManagerProvider == null) { + HlsMediaSource.Factory(mediaDataSourceFactory) +// .setDrmSessionManagerProvider(drmSessionManagerProvider) + .createMediaSource(mediaItem) + } else { + HlsMediaSource.Factory(mediaDataSourceFactory) + .setDrmSessionManagerProvider(drmSessionManagerProvider!!) + .createMediaSource(mediaItem) + } + C.CONTENT_TYPE_OTHER -> if (drmSessionManagerProvider == null) { + ProgressiveMediaSource.Factory( + mediaDataSourceFactory, + DefaultExtractorsFactory() + ) +// .setDrmSessionManagerProvider(drmSessionManagerProvider) + .createMediaSource(mediaItem) + } else { + ProgressiveMediaSource.Factory( + mediaDataSourceFactory, + DefaultExtractorsFactory() + ) + .setDrmSessionManagerProvider(drmSessionManagerProvider!!) + .createMediaSource(mediaItem) + } else -> { throw IllegalStateException("Unsupported type: $type") } @@ -508,12 +544,12 @@ internal class BetterPlayer( val audioComponent = exoPlayer?.audioComponent ?: return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { audioComponent.setAudioAttributes( - AudioAttributes.Builder().setContentType(C.CONTENT_TYPE_MOVIE).build(), + AudioAttributes.Builder().setContentType(C.AUDIO_CONTENT_TYPE_MOVIE).build(), !mixWithOthers ) } else { audioComponent.setAudioAttributes( - AudioAttributes.Builder().setContentType(C.CONTENT_TYPE_MUSIC).build(), + AudioAttributes.Builder().setContentType(C.AUDIO_CONTENT_TYPE_MUSIC).build(), !mixWithOthers ) } @@ -707,14 +743,19 @@ internal class BetterPlayer( if (mappedTrackInfo != null) { val builder = trackSelector.parameters.buildUpon() .setRendererDisabled(rendererIndex, false) - .setTrackSelectionOverrides( - TrackSelectionOverrides.Builder().addOverride( - TrackSelectionOverrides.TrackSelectionOverride( - mappedTrackInfo.getTrackGroups( - rendererIndex - ).get(groupIndex) - ) - ).build() + .addOverride( + TrackSelectionOverride( + mappedTrackInfo.getTrackGroups(rendererIndex).get(groupIndex), + mappedTrackInfo.getTrackGroups(rendererIndex) + .indexOf(mappedTrackInfo.getTrackGroups(rendererIndex).get(groupIndex)) + ) +// TrackSelectionOverrides.Builder().addOverride( +// TrackSelectionOverrides.TrackSelectionOverride( +// mappedTrackInfo.getTrackGroups( +// rendererIndex +// ).get(groupIndex) +// ) +// ).build() ) trackSelector.setParameters(builder) diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle index d243520f8..b68e3a692 100644 --- a/example/android/app/build.gradle +++ b/example/android/app/build.gradle @@ -26,7 +26,7 @@ apply plugin: 'kotlin-android' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 31 + compileSdkVersion 33 sourceSets { main.java.srcDirs += 'src/main/kotlin' @@ -38,8 +38,8 @@ android { defaultConfig { applicationId "com.jhomlala.better_player_example" - minSdkVersion 16 - targetSdkVersion 31 + minSdkVersion 21 + targetSdkVersion 33 versionCode flutterVersionCode.toInteger() versionName flutterVersionName multiDexEnabled true diff --git a/example/android/build.gradle b/example/android/build.gradle index 7c1aad732..dcb73723d 100644 --- a/example/android/build.gradle +++ b/example/android/build.gradle @@ -1,6 +1,6 @@ buildscript { - ext.kotlinVersion = "1.5.31" - ext.gradleVersion = "7.0.2" + ext.kotlinVersion = "1.7.10" + ext.gradleVersion = "7.3.0" ext.multidexVersion = "2.0.1" repositories { google() diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/example/android/gradle/wrapper/gradle-wrapper.properties index c3c8c1027..55be9291d 100644 --- a/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,5 +3,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip diff --git a/lib/src/core/better_player_controller.dart b/lib/src/core/better_player_controller.dart index d1a53bc31..cd01523c3 100644 --- a/lib/src/core/better_player_controller.dart +++ b/lib/src/core/better_player_controller.dart @@ -1,5 +1,6 @@ import 'dart:async'; import 'dart:io'; + import 'package:better_player/better_player.dart'; import 'package:better_player/src/configuration/better_player_controller_event.dart'; import 'package:better_player/src/core/better_player_utils.dart'; @@ -1260,7 +1261,7 @@ class BetterPlayerController { ///cache started for given [betterPlayerDataSource] then it will be ignored. Future stopPreCache( BetterPlayerDataSource betterPlayerDataSource) async { - return VideoPlayerController?.stopPreCache(betterPlayerDataSource.url, + return VideoPlayerController.stopPreCache(betterPlayerDataSource.url, betterPlayerDataSource.cacheConfiguration?.key); } diff --git a/lib/src/hls/hls_parser/drm_init_data.dart b/lib/src/hls/hls_parser/drm_init_data.dart index dbca2a269..53a031d71 100644 --- a/lib/src/hls/hls_parser/drm_init_data.dart +++ b/lib/src/hls/hls_parser/drm_init_data.dart @@ -1,5 +1,4 @@ import 'package:collection/collection.dart'; -import 'package:flutter/cupertino.dart'; import 'scheme_data.dart'; @@ -19,5 +18,5 @@ class DrmInitData { } @override - int get hashCode => hashValues(schemeType, schemeData); + int get hashCode => Object.hash(schemeType, schemeData); } diff --git a/lib/src/hls/hls_parser/hls_track_metadata_entry.dart b/lib/src/hls/hls_parser/hls_track_metadata_entry.dart index 9d7d215a6..a07d873eb 100644 --- a/lib/src/hls/hls_parser/hls_track_metadata_entry.dart +++ b/lib/src/hls/hls_parser/hls_track_metadata_entry.dart @@ -1,6 +1,5 @@ import 'package:better_player/src/hls/hls_parser/variant_info.dart'; import 'package:collection/collection.dart'; -import 'package:flutter/rendering.dart'; class HlsTrackMetadataEntry { HlsTrackMetadataEntry({this.groupId, this.name, this.variantInfos}); @@ -28,5 +27,5 @@ class HlsTrackMetadataEntry { } @override - int get hashCode => hashValues(groupId, name, variantInfos); + int get hashCode => Object.hash(groupId, name, variantInfos); } diff --git a/lib/src/hls/hls_parser/scheme_data.dart b/lib/src/hls/hls_parser/scheme_data.dart index 49557dde0..53dfe112c 100644 --- a/lib/src/hls/hls_parser/scheme_data.dart +++ b/lib/src/hls/hls_parser/scheme_data.dart @@ -1,7 +1,5 @@ import 'dart:typed_data'; -import 'package:flutter/material.dart'; - class SchemeData { SchemeData({ // @required this.uuid, @@ -49,7 +47,7 @@ class SchemeData { } @override - int get hashCode => hashValues( + int get hashCode => Object.hash( /*uuid, */ licenseServerUrl, mimeType, diff --git a/lib/src/hls/hls_parser/variant_info.dart b/lib/src/hls/hls_parser/variant_info.dart index 74c4ecb38..393ebb310 100644 --- a/lib/src/hls/hls_parser/variant_info.dart +++ b/lib/src/hls/hls_parser/variant_info.dart @@ -1,5 +1,3 @@ -import 'package:flutter/material.dart'; - class VariantInfo { VariantInfo({ this.bitrate, @@ -41,6 +39,6 @@ class VariantInfo { } @override - int get hashCode => hashValues( + int get hashCode => Object.hash( bitrate, videoGroupId, audioGroupId, subtitleGroupId, captionGroupId); } diff --git a/pubspec.lock b/pubspec.lock index 7d19ee3d7..c9d861443 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -7,7 +7,7 @@ packages: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.8.2" + version: "2.9.0" boolean_selector: dependency: transitive description: @@ -21,21 +21,14 @@ packages: name: characters url: "https://pub.dartlang.org" source: hosted - version: "1.2.0" - charcode: - dependency: transitive - description: - name: charcode - url: "https://pub.dartlang.org" - source: hosted - version: "1.3.1" + version: "1.2.1" clock: dependency: transitive description: name: clock url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.1.1" collection: dependency: "direct main" description: @@ -49,7 +42,7 @@ packages: name: csslib url: "https://pub.dartlang.org" source: hosted - version: "0.17.0" + version: "0.17.2" cupertino_icons: dependency: "direct main" description: @@ -63,21 +56,21 @@ packages: name: fake_async url: "https://pub.dartlang.org" source: hosted - version: "1.3.0" + version: "1.3.1" ffi: dependency: transitive description: name: ffi url: "https://pub.dartlang.org" source: hosted - version: "1.0.0" + version: "2.0.1" file: dependency: transitive description: name: file url: "https://pub.dartlang.org" source: hosted - version: "6.1.0" + version: "6.1.4" flutter: dependency: "direct main" description: flutter @@ -111,7 +104,7 @@ packages: name: fwfh_text_style url: "https://pub.dartlang.org" source: hosted - version: "2.7.2" + version: "2.22.08+1" html: dependency: transitive description: @@ -139,84 +132,84 @@ packages: name: lint url: "https://pub.dartlang.org" source: hosted - version: "1.8.2" + version: "1.10.0" matcher: dependency: transitive description: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.11" + version: "0.12.12" material_color_utilities: dependency: transitive description: name: material_color_utilities url: "https://pub.dartlang.org" source: hosted - version: "0.1.4" + version: "0.1.5" meta: dependency: "direct main" description: name: meta url: "https://pub.dartlang.org" source: hosted - version: "1.7.0" + version: "1.8.0" path: dependency: transitive description: name: path url: "https://pub.dartlang.org" source: hosted - version: "1.8.1" + version: "1.8.2" path_provider: dependency: "direct main" description: name: path_provider url: "https://pub.dartlang.org" source: hosted - version: "2.0.10" + version: "2.0.11" path_provider_android: dependency: transitive description: name: path_provider_android url: "https://pub.dartlang.org" source: hosted - version: "2.0.11" + version: "2.0.20" path_provider_ios: dependency: transitive description: name: path_provider_ios url: "https://pub.dartlang.org" source: hosted - version: "2.0.7" + version: "2.0.11" path_provider_linux: dependency: transitive description: name: path_provider_linux url: "https://pub.dartlang.org" source: hosted - version: "2.1.2" + version: "2.1.7" path_provider_macos: dependency: transitive description: name: path_provider_macos url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.0.6" path_provider_platform_interface: dependency: transitive description: name: path_provider_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.0.1" + version: "2.0.4" path_provider_windows: dependency: transitive description: name: path_provider_windows url: "https://pub.dartlang.org" source: hosted - version: "2.0.4" + version: "2.1.3" petitparser: dependency: transitive description: @@ -230,21 +223,21 @@ packages: name: platform url: "https://pub.dartlang.org" source: hosted - version: "3.0.0" + version: "3.1.0" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.1.3" process: dependency: transitive description: name: process url: "https://pub.dartlang.org" source: hosted - version: "4.1.0" + version: "4.2.4" sky_engine: dependency: transitive description: flutter @@ -256,7 +249,7 @@ packages: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.8.2" + version: "1.9.0" stack_trace: dependency: transitive description: @@ -277,21 +270,21 @@ packages: name: string_scanner url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.1.1" term_glyph: dependency: transitive description: name: term_glyph url: "https://pub.dartlang.org" source: hosted - version: "1.2.0" + version: "1.2.1" test_api: dependency: transitive description: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.4.9" + version: "0.4.12" vector_math: dependency: transitive description: @@ -312,7 +305,7 @@ packages: name: wakelock url: "https://pub.dartlang.org" source: hosted - version: "0.6.1+2" + version: "0.6.2" wakelock_macos: dependency: transitive description: @@ -340,21 +333,21 @@ packages: name: wakelock_windows url: "https://pub.dartlang.org" source: hosted - version: "0.2.0" + version: "0.2.1" win32: dependency: transitive description: name: win32 url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "3.0.0" xdg_directories: dependency: transitive description: name: xdg_directories url: "https://pub.dartlang.org" source: hosted - version: "0.2.0" + version: "0.2.0+2" xml: dependency: "direct main" description: @@ -364,4 +357,4 @@ packages: version: "6.1.0" sdks: dart: ">=2.17.0 <3.0.0" - flutter: ">=2.12.0" + flutter: ">=3.1.0-0" diff --git a/pubspec.yaml b/pubspec.yaml index ebfe24469..bf83280a0 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -15,16 +15,16 @@ dependencies: flutter: sdk: flutter cupertino_icons: ^1.0.5 - wakelock: ^0.6.1+2 - meta: ^1.7.0 + wakelock: ^0.6.2 + meta: ^1.8.0 flutter_widget_from_html_core: ^0.8.5+3 visibility_detector: ^0.3.3 - path_provider: ^2.0.10 + path_provider: ^2.0.11 collection: ^1.16.0 xml: ^6.1.0 dev_dependencies: - lint: ^1.8.2 + lint: ^1.10.0 flutter_test: sdk: flutter flutter_localizations: From 91a9625524cdff448e0a9deb5047bcf20cc8dcf1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ti=CC=81n=20Tra=CC=82=CC=80n?= Date: Fri, 23 Sep 2022 14:46:17 +0700 Subject: [PATCH 2/2] clear code --- .../jhomlala/better_player/BetterPlayer.kt | 102 ++++++------------ 1 file changed, 34 insertions(+), 68 deletions(-) diff --git a/android/src/main/kotlin/com/jhomlala/better_player/BetterPlayer.kt b/android/src/main/kotlin/com/jhomlala/better_player/BetterPlayer.kt index f1e98fd7a..edc7a6ad8 100644 --- a/android/src/main/kotlin/com/jhomlala/better_player/BetterPlayer.kt +++ b/android/src/main/kotlin/com/jhomlala/better_player/BetterPlayer.kt @@ -4,7 +4,6 @@ import android.annotation.SuppressLint import android.app.NotificationChannel import android.app.NotificationManager import android.app.PendingIntent -import android.content.ComponentName import android.content.Context import android.content.Intent import android.graphics.Bitmap @@ -32,7 +31,6 @@ import com.google.android.exoplayer2.drm.FrameworkMediaDrm import com.google.android.exoplayer2.drm.UnsupportedDrmException import com.google.android.exoplayer2.drm.DummyExoMediaDrm import com.google.android.exoplayer2.drm.LocalMediaDrmCallback -import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory import com.google.android.exoplayer2.source.MediaSource import com.google.android.exoplayer2.source.ClippingMediaSource import com.google.android.exoplayer2.ui.PlayerNotificationManager.MediaDescriptionAdapter @@ -42,6 +40,7 @@ import android.support.v4.media.session.PlaybackStateCompat import android.support.v4.media.MediaMetadataCompat import android.util.Log import android.view.Surface +import androidx.annotation.RequiresApi import androidx.lifecycle.Observer import com.google.android.exoplayer2.source.smoothstreaming.SsMediaSource import com.google.android.exoplayer2.source.smoothstreaming.DefaultSsChunkSource @@ -51,13 +50,11 @@ import com.google.android.exoplayer2.source.hls.HlsMediaSource import com.google.android.exoplayer2.source.ProgressiveMediaSource import com.google.android.exoplayer2.extractor.DefaultExtractorsFactory import io.flutter.plugin.common.EventChannel.EventSink -import androidx.media.session.MediaButtonReceiver import androidx.work.Data import com.google.android.exoplayer2.* import com.google.android.exoplayer2.audio.AudioAttributes import com.google.android.exoplayer2.drm.DrmSessionManagerProvider import com.google.android.exoplayer2.ext.mediasession.MediaSessionConnector -import com.google.android.exoplayer2.trackselection.DefaultTrackSelector.SelectionOverride import com.google.android.exoplayer2.trackselection.TrackSelectionOverride import com.google.android.exoplayer2.upstream.DataSource import com.google.android.exoplayer2.upstream.DefaultDataSource @@ -214,6 +211,7 @@ internal class BetterPlayer( return title } + @RequiresApi(Build.VERSION_CODES.M) @SuppressLint("UnspecifiedImmutableFlag") override fun createCurrentContentIntent(player: Player): PendingIntent? { val packageName = context.applicationContext.packageName @@ -409,62 +407,36 @@ internal class BetterPlayer( } return when (type) { - C.CONTENT_TYPE_SS -> { - if (drmSessionManagerProvider == null) { - SsMediaSource.Factory( - DefaultSsChunkSource.Factory(mediaDataSourceFactory), - DefaultDataSource.Factory(context, mediaDataSourceFactory) - ) -// .setDrmSessionManagerProvider(drmSessionManagerProvider) - .createMediaSource(mediaItem) - } else { - SsMediaSource.Factory( - DefaultSsChunkSource.Factory(mediaDataSourceFactory), - DefaultDataSource.Factory(context, mediaDataSourceFactory) - ) - .setDrmSessionManagerProvider(drmSessionManagerProvider!!) - .createMediaSource(mediaItem) + C.CONTENT_TYPE_SS -> SsMediaSource.Factory( + DefaultSsChunkSource.Factory(mediaDataSourceFactory), + DefaultDataSource.Factory(context, mediaDataSourceFactory) + ).apply { + if (drmSessionManagerProvider != null) { + setDrmSessionManagerProvider(drmSessionManagerProvider!!) } - } - C.CONTENT_TYPE_DASH -> if (drmSessionManagerProvider == null) { - DashMediaSource.Factory( - DefaultDashChunkSource.Factory(mediaDataSourceFactory), - DefaultDataSource.Factory(context, mediaDataSourceFactory) - ) -// .setDrmSessionManagerProvider(drmSessionManagerProvider) - .createMediaSource(mediaItem) - } else { - DashMediaSource.Factory( - DefaultDashChunkSource.Factory(mediaDataSourceFactory), - DefaultDataSource.Factory(context, mediaDataSourceFactory) - ) - .setDrmSessionManagerProvider(drmSessionManagerProvider!!) - .createMediaSource(mediaItem) - } - C.CONTENT_TYPE_HLS -> if (drmSessionManagerProvider == null) { - HlsMediaSource.Factory(mediaDataSourceFactory) -// .setDrmSessionManagerProvider(drmSessionManagerProvider) - .createMediaSource(mediaItem) - } else { - HlsMediaSource.Factory(mediaDataSourceFactory) - .setDrmSessionManagerProvider(drmSessionManagerProvider!!) - .createMediaSource(mediaItem) - } - C.CONTENT_TYPE_OTHER -> if (drmSessionManagerProvider == null) { - ProgressiveMediaSource.Factory( - mediaDataSourceFactory, - DefaultExtractorsFactory() - ) -// .setDrmSessionManagerProvider(drmSessionManagerProvider) - .createMediaSource(mediaItem) - } else { - ProgressiveMediaSource.Factory( - mediaDataSourceFactory, - DefaultExtractorsFactory() - ) - .setDrmSessionManagerProvider(drmSessionManagerProvider!!) - .createMediaSource(mediaItem) - } + }.createMediaSource(mediaItem) + C.CONTENT_TYPE_DASH -> DashMediaSource.Factory( + DefaultDashChunkSource.Factory(mediaDataSourceFactory), + DefaultDataSource.Factory(context, mediaDataSourceFactory) + ).apply { + if (drmSessionManagerProvider != null) { + setDrmSessionManagerProvider(drmSessionManagerProvider!!) + } + }.createMediaSource(mediaItem) + C.CONTENT_TYPE_HLS -> HlsMediaSource.Factory(mediaDataSourceFactory) + .apply { + if (drmSessionManagerProvider != null) { + setDrmSessionManagerProvider(drmSessionManagerProvider!!) + } + }.createMediaSource(mediaItem) + C.CONTENT_TYPE_OTHER -> ProgressiveMediaSource.Factory( + mediaDataSourceFactory, + DefaultExtractorsFactory() + ).apply { + if (drmSessionManagerProvider != null) { + setDrmSessionManagerProvider(drmSessionManagerProvider!!) + } + }.createMediaSource(mediaItem) else -> { throw IllegalStateException("Unsupported type: $type") } @@ -553,6 +525,7 @@ internal class BetterPlayer( !mixWithOthers ) } + } fun play() { @@ -749,13 +722,6 @@ internal class BetterPlayer( mappedTrackInfo.getTrackGroups(rendererIndex) .indexOf(mappedTrackInfo.getTrackGroups(rendererIndex).get(groupIndex)) ) -// TrackSelectionOverrides.Builder().addOverride( -// TrackSelectionOverrides.TrackSelectionOverride( -// mappedTrackInfo.getTrackGroups( -// rendererIndex -// ).get(groupIndex) -// ) -// ).build() ) trackSelector.setParameters(builder) @@ -812,8 +778,8 @@ internal class BetterPlayer( //Clear cache without accessing BetterPlayerCache. fun clearCache(context: Context?, result: MethodChannel.Result) { try { - context?.let { context -> - val file = File(context.cacheDir, "betterPlayerCache") + context?.let { + val file = File(it.cacheDir, "betterPlayerCache") deleteDirectory(file) } result.success(null)