bitmovin-player-react-native 0.31.0 → 0.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/RNBitmovinPlayer.podspec +1 -1
- package/android/build.gradle +2 -2
- package/android/src/main/java/com/bitmovin/player/reactnative/DebugModule.kt +23 -0
- package/android/src/main/java/com/bitmovin/player/reactnative/NetworkModule.kt +12 -4
- package/android/src/main/java/com/bitmovin/player/reactnative/RNPlayerViewManager.kt +1 -1
- package/android/src/main/java/com/bitmovin/player/reactnative/RNPlayerViewPackage.kt +1 -0
- package/android/src/main/java/com/bitmovin/player/reactnative/converter/JsonConverter.kt +17 -0
- package/android/src/main/java/com/bitmovin/player/reactnative/services/MediaSessionPlaybackService.kt +2 -1
- package/ios/DebugModule.m +7 -0
- package/ios/DebugModule.swift +33 -0
- package/ios/FullscreenHandlerModule.swift +3 -0
- package/ios/RNPlayerViewManager.swift +1 -0
- package/lib/index.d.mts +84 -1
- package/lib/index.d.ts +84 -1
- package/lib/index.js +64 -0
- package/lib/index.mjs +62 -0
- package/package.json +1 -1
- package/src/debug.ts +56 -0
- package/src/index.ts +1 -0
- package/src/tweaksConfig.ts +39 -0
package/RNBitmovinPlayer.podspec
CHANGED
|
@@ -20,7 +20,7 @@ Pod::Spec.new do |s|
|
|
|
20
20
|
|
|
21
21
|
s.swift_version = "5.10"
|
|
22
22
|
s.dependency "React-Core"
|
|
23
|
-
s.dependency "BitmovinPlayer", "3.
|
|
23
|
+
s.dependency "BitmovinPlayer", "3.78.0"
|
|
24
24
|
s.ios.dependency "GoogleAds-IMA-iOS-SDK", "3.23.0"
|
|
25
25
|
s.tvos.dependency "GoogleAds-IMA-tvOS-SDK", "4.13.0"
|
|
26
26
|
end
|
package/android/build.gradle
CHANGED
|
@@ -105,6 +105,6 @@ dependencies {
|
|
|
105
105
|
// Bitmovin
|
|
106
106
|
implementation 'com.google.ads.interactivemedia.v3:interactivemedia:3.33.0'
|
|
107
107
|
implementation 'com.google.android.gms:play-services-ads-identifier:18.0.1'
|
|
108
|
-
implementation 'com.bitmovin.player:player:3.
|
|
109
|
-
implementation 'com.bitmovin.player:player-media-session:3.
|
|
108
|
+
implementation 'com.bitmovin.player:player:3.94.0+jason'
|
|
109
|
+
implementation 'com.bitmovin.player:player-media-session:3.94.0+jason'
|
|
110
110
|
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
package com.bitmovin.player.reactnative
|
|
2
|
+
|
|
3
|
+
import com.bitmovin.player.api.DebugConfig
|
|
4
|
+
import com.facebook.react.bridge.*
|
|
5
|
+
import com.facebook.react.module.annotations.ReactModule
|
|
6
|
+
|
|
7
|
+
private const val MODULE_NAME = "DebugModule"
|
|
8
|
+
|
|
9
|
+
@ReactModule(name = MODULE_NAME)
|
|
10
|
+
class DebugModule(context: ReactApplicationContext) : BitmovinBaseModule(context) {
|
|
11
|
+
override fun getName() = MODULE_NAME
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Enable/disable verbose logging for the console logger.
|
|
15
|
+
* @param enabled Whether to set verbose logging as enabled or disabled.
|
|
16
|
+
*/
|
|
17
|
+
@ReactMethod
|
|
18
|
+
fun setDebugLoggingEnabled(enabled: Boolean, promise: Promise) {
|
|
19
|
+
promise.unit.resolveOnUiThread {
|
|
20
|
+
DebugConfig.isLoggingEnabled = enabled
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
package com.bitmovin.player.reactnative
|
|
2
2
|
|
|
3
|
+
import android.util.Log
|
|
3
4
|
import androidx.concurrent.futures.CallbackToFutureAdapter
|
|
4
5
|
import androidx.concurrent.futures.CallbackToFutureAdapter.Completer
|
|
5
6
|
import com.bitmovin.player.api.network.HttpRequest
|
|
@@ -14,6 +15,7 @@ import com.bitmovin.player.reactnative.converter.toJson
|
|
|
14
15
|
import com.bitmovin.player.reactnative.converter.toNetworkConfig
|
|
15
16
|
import com.facebook.react.bridge.*
|
|
16
17
|
import com.facebook.react.module.annotations.ReactModule
|
|
18
|
+
import java.util.concurrent.ConcurrentHashMap
|
|
17
19
|
import java.util.concurrent.Future
|
|
18
20
|
|
|
19
21
|
private const val MODULE_NAME = "NetworkModule"
|
|
@@ -25,8 +27,9 @@ class NetworkModule(context: ReactApplicationContext) : BitmovinBaseModule(conte
|
|
|
25
27
|
* In-memory mapping from `nativeId`s to `NetworkConfig` instances.
|
|
26
28
|
*/
|
|
27
29
|
private val networkConfigs: Registry<NetworkConfig> = mutableMapOf()
|
|
28
|
-
private val preprocessHttpRequestCompleters
|
|
29
|
-
private val preprocessHttpResponseCompleters
|
|
30
|
+
private val preprocessHttpRequestCompleters = ConcurrentHashMap<String, Completer<HttpRequest>>()
|
|
31
|
+
private val preprocessHttpResponseCompleters = ConcurrentHashMap<String, Completer<HttpResponse>>()
|
|
32
|
+
|
|
30
33
|
override fun getName() = MODULE_NAME
|
|
31
34
|
|
|
32
35
|
fun getConfig(nativeId: NativeId?): NetworkConfig? = nativeId?.let { networkConfigs[it] }
|
|
@@ -94,9 +97,14 @@ class NetworkModule(context: ReactApplicationContext) : BitmovinBaseModule(conte
|
|
|
94
97
|
|
|
95
98
|
@ReactMethod
|
|
96
99
|
fun setPreprocessedHttpRequest(requestId: String, request: ReadableMap) {
|
|
97
|
-
preprocessHttpRequestCompleters
|
|
98
|
-
|
|
100
|
+
val completer = preprocessHttpRequestCompleters.remove(requestId)
|
|
101
|
+
if (completer == null) {
|
|
102
|
+
Log.e(MODULE_NAME, "Completer is null for requestId: $requestId, this can cause stuck network requests")
|
|
103
|
+
return
|
|
104
|
+
}
|
|
105
|
+
completer.set(request.toHttpRequest())
|
|
99
106
|
}
|
|
107
|
+
|
|
100
108
|
private fun preprocessHttpResponseFromJS(
|
|
101
109
|
nativeId: NativeId,
|
|
102
110
|
type: HttpRequestType,
|
|
@@ -248,7 +248,7 @@ class RNPlayerViewManager(private val context: ReactApplicationContext) : Simple
|
|
|
248
248
|
val playbackConfig = playerConfig?.getMap("playbackConfig")
|
|
249
249
|
val isPictureInPictureEnabled = view.config?.pictureInPictureConfig?.isEnabled == true ||
|
|
250
250
|
playbackConfig?.getBooleanOrNull("isPictureInPictureEnabled") == true
|
|
251
|
-
view.enableBackgroundPlayback = playbackConfig?.
|
|
251
|
+
view.enableBackgroundPlayback = playbackConfig?.getBooleanOrNull("isBackgroundPlaybackEnabled") == true
|
|
252
252
|
|
|
253
253
|
val rnStyleConfigWrapper = playerConfig?.toRNStyleConfigWrapperFromPlayerConfig()
|
|
254
254
|
val configuredPlayerViewConfig = view.config?.playerViewConfig ?: PlayerViewConfig()
|
|
@@ -6,6 +6,7 @@ import com.bitmovin.analytics.api.CustomData
|
|
|
6
6
|
import com.bitmovin.analytics.api.DefaultMetadata
|
|
7
7
|
import com.bitmovin.analytics.api.SourceMetadata
|
|
8
8
|
import com.bitmovin.player.api.DeviceDescription.DeviceName
|
|
9
|
+
import com.bitmovin.player.api.ForceReuseVideoCodecReason
|
|
9
10
|
import com.bitmovin.player.api.PlaybackConfig
|
|
10
11
|
import com.bitmovin.player.api.PlayerConfig
|
|
11
12
|
import com.bitmovin.player.api.TweaksConfig
|
|
@@ -167,6 +168,16 @@ fun ReadableMap.toStyleConfig(): StyleConfig = StyleConfig().apply {
|
|
|
167
168
|
withString("scalingMode") { scalingMode = ScalingMode.valueOf(it) }
|
|
168
169
|
}
|
|
169
170
|
|
|
171
|
+
/**
|
|
172
|
+
* Converts any JS string into an `ForceReuseVideoCodecReason` enum value.
|
|
173
|
+
*/
|
|
174
|
+
private fun String.toForceReuseVideoCodecReason(): ForceReuseVideoCodecReason? = when (this) {
|
|
175
|
+
"ColorInfoMismatch" -> ForceReuseVideoCodecReason.ColorInfoMismatch
|
|
176
|
+
"MaxInputSizeExceeded" -> ForceReuseVideoCodecReason.MaxInputSizeExceeded
|
|
177
|
+
"MaxResolutionExceeded" -> ForceReuseVideoCodecReason.MaxResolutionExceeded
|
|
178
|
+
else -> null
|
|
179
|
+
}
|
|
180
|
+
|
|
170
181
|
/**
|
|
171
182
|
* Converts any JS object into a `TweaksConfig` object.
|
|
172
183
|
*/
|
|
@@ -189,6 +200,12 @@ fun ReadableMap.toTweaksConfig(): TweaksConfig = TweaksConfig().apply {
|
|
|
189
200
|
withBoolean("useDrmSessionForClearSources") { useDrmSessionForClearSources = it }
|
|
190
201
|
withBoolean("useFiletypeExtractorFallbackForHls") { useFiletypeExtractorFallbackForHls = it }
|
|
191
202
|
withBoolean("preferSoftwareDecodingForAds") { preferSoftwareDecodingForAds = it }
|
|
203
|
+
withStringArray("forceReuseVideoCodecReasons") {
|
|
204
|
+
forceReuseVideoCodecReasons = it
|
|
205
|
+
.filterNotNull()
|
|
206
|
+
.mapNotNull(String::toForceReuseVideoCodecReason)
|
|
207
|
+
.toSet()
|
|
208
|
+
}
|
|
192
209
|
}
|
|
193
210
|
|
|
194
211
|
/**
|
|
@@ -4,6 +4,7 @@ import android.content.Intent
|
|
|
4
4
|
import android.os.Binder
|
|
5
5
|
import android.os.IBinder
|
|
6
6
|
import com.bitmovin.player.api.Player
|
|
7
|
+
import com.bitmovin.player.api.media.session.ControllerInfo
|
|
7
8
|
import com.bitmovin.player.api.media.session.MediaSession
|
|
8
9
|
import com.bitmovin.player.api.media.session.MediaSessionService
|
|
9
10
|
|
|
@@ -29,7 +30,7 @@ class MediaSessionPlaybackService : MediaSessionService() {
|
|
|
29
30
|
private val binder = ServiceBinder()
|
|
30
31
|
private var mediaSession: MediaSession? = null
|
|
31
32
|
|
|
32
|
-
override fun onGetSession(
|
|
33
|
+
override fun onGetSession(controllerInfo: ControllerInfo) = null
|
|
33
34
|
|
|
34
35
|
override fun onDestroy() {
|
|
35
36
|
disconnectSession()
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import BitmovinPlayer
|
|
2
|
+
|
|
3
|
+
@objc(DebugModule)
|
|
4
|
+
public class DebugModule: NSObject, RCTBridgeModule {
|
|
5
|
+
// swiftlint:disable:next implicitly_unwrapped_optional
|
|
6
|
+
@objc public var bridge: RCTBridge!
|
|
7
|
+
|
|
8
|
+
// swiftlint:disable:next implicitly_unwrapped_optional
|
|
9
|
+
public static func moduleName() -> String! {
|
|
10
|
+
"DebugModule"
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/// Module requires main thread initialization.
|
|
14
|
+
public static func requiresMainQueueSetup() -> Bool {
|
|
15
|
+
true
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// swiftlint:disable:next implicitly_unwrapped_optional
|
|
19
|
+
public var methodQueue: DispatchQueue! {
|
|
20
|
+
bridge.uiManager.methodQueue
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
extension DebugModule {
|
|
25
|
+
/// Enable/disable verbose logging for the console logger.
|
|
26
|
+
/// - Parameter enabled: Whether to set verbose logging as enabled or disabled.
|
|
27
|
+
@objc(setDebugLoggingEnabled:)
|
|
28
|
+
func setDebugLoggingEnabled(enabled: Bool) {
|
|
29
|
+
bridge.uiManager.addUIBlock { [weak self] _, _ in
|
|
30
|
+
DebugConfig.logging.logger?.level = enabled ? .verbose : .warning
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -44,6 +44,7 @@ public class FullscreenHandlerModule: NSObject, RCTBridgeModule {
|
|
|
44
44
|
fullscreenHandlers.removeValue(forKey: nativeId)
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
+
@MainActor
|
|
47
48
|
@objc(onFullscreenChanged:isFullscreenEnabled:)
|
|
48
49
|
func onFullscreenChanged(_ nativeId: NativeId, isFullscreenEnabled: Bool) -> Any? {
|
|
49
50
|
fullscreenHandlers[nativeId]?.isFullscreen = isFullscreenEnabled
|
|
@@ -51,12 +52,14 @@ public class FullscreenHandlerModule: NSObject, RCTBridgeModule {
|
|
|
51
52
|
return nil
|
|
52
53
|
}
|
|
53
54
|
|
|
55
|
+
@MainActor
|
|
54
56
|
@objc(registerHandler:)
|
|
55
57
|
func registerHandler(_ nativeId: NativeId) {
|
|
56
58
|
guard fullscreenHandlers[nativeId] == nil else { return }
|
|
57
59
|
fullscreenHandlers[nativeId] = FullscreenHandlerBridge(nativeId, bridge: bridge)
|
|
58
60
|
}
|
|
59
61
|
|
|
62
|
+
@MainActor
|
|
60
63
|
@objc(setIsFullscreenActive:isFullscreen:)
|
|
61
64
|
func setIsFullscreenActive(_ nativeId: NativeId, isFullscreen: Bool) {
|
|
62
65
|
fullscreenHandlers[nativeId]?.isFullscreen = isFullscreen
|
|
@@ -200,6 +200,7 @@ public class RNPlayerViewManager: RCTViewManager {
|
|
|
200
200
|
bridge.module(for: FullscreenHandlerModule.self) as? FullscreenHandlerModule
|
|
201
201
|
}
|
|
202
202
|
|
|
203
|
+
@MainActor
|
|
203
204
|
private func maybeEmitPictureInPictureAvailabilityEvent(for view: RNPlayerView, previousState: Bool) {
|
|
204
205
|
guard let playerView = view.playerView,
|
|
205
206
|
playerView.isPictureInPictureAvailable != previousState else {
|
package/lib/index.d.mts
CHANGED
|
@@ -2778,6 +2778,29 @@ declare enum UserInterfaceType {
|
|
|
2778
2778
|
Subtitle = "Subtitle"
|
|
2779
2779
|
}
|
|
2780
2780
|
|
|
2781
|
+
/**
|
|
2782
|
+
* When switching the video quality, the video decoder's configuration might change
|
|
2783
|
+
* as the player can't always know if the codec supports such configuration change, it destroys and recreates it.
|
|
2784
|
+
* This behaviour can cause brief black screens when switching between video qualities as codec recreation can be slow.
|
|
2785
|
+
*
|
|
2786
|
+
* If a codec is know to support a given configuration change without issues,
|
|
2787
|
+
* the configuration can be added to the `TweaksConfig.forceReuseVideoCodecReasons`
|
|
2788
|
+
* to always reuse the video codec and avoid the black screen.
|
|
2789
|
+
*/
|
|
2790
|
+
declare enum ForceReuseVideoCodecReason {
|
|
2791
|
+
/**
|
|
2792
|
+
* The new video quality color information is not compatible.
|
|
2793
|
+
*/
|
|
2794
|
+
ColorInfoMismatch = "ColorInfoMismatch",
|
|
2795
|
+
/**
|
|
2796
|
+
* The new video quality exceed the decoder's configured maximum sample size.
|
|
2797
|
+
*/
|
|
2798
|
+
MaxInputSizeExceeded = "MaxInputSizeExceeded",
|
|
2799
|
+
/**
|
|
2800
|
+
* The new video quality exceed the decoder's configured maximum resolution.
|
|
2801
|
+
*/
|
|
2802
|
+
MaxResolutionExceeded = "MaxResolutionExceeded"
|
|
2803
|
+
}
|
|
2781
2804
|
/**
|
|
2782
2805
|
* This configuration is used as an incubator for experimental features. Tweaks are not officially
|
|
2783
2806
|
* supported and are not guaranteed to be stable, i.e. their naming, functionality and API can
|
|
@@ -2950,6 +2973,20 @@ interface TweaksConfig {
|
|
|
2950
2973
|
* @platform iOS
|
|
2951
2974
|
*/
|
|
2952
2975
|
updatesNowPlayingInfoCenter?: boolean;
|
|
2976
|
+
/**
|
|
2977
|
+
* When switching between video formats (eg: adapting between video qualities)
|
|
2978
|
+
* the codec might be recreated due to several reasons.
|
|
2979
|
+
* This behaviour can cause brief black screens when switching between video qualities as codec recreation can be
|
|
2980
|
+
* slow.
|
|
2981
|
+
*
|
|
2982
|
+
* If a device is know to support video format changes and keep the current decoder without issues,
|
|
2983
|
+
* this set can be filled with multiple `ForceReuseVideoCodecReason` and avoid the black screen.
|
|
2984
|
+
*
|
|
2985
|
+
* Default is `null` i.e not set
|
|
2986
|
+
*
|
|
2987
|
+
* @platform Android
|
|
2988
|
+
*/
|
|
2989
|
+
forceReuseVideoCodecReasons?: Array<ForceReuseVideoCodecReason>;
|
|
2953
2990
|
}
|
|
2954
2991
|
|
|
2955
2992
|
/**
|
|
@@ -3996,4 +4033,50 @@ declare class Network extends NativeInstance<NetworkConfig> {
|
|
|
3996
4033
|
onPreprocessHttpResponse: (responseId: string, type: HttpRequestType, response: HttpResponse) => void;
|
|
3997
4034
|
}
|
|
3998
4035
|
|
|
3999
|
-
|
|
4036
|
+
/**
|
|
4037
|
+
* Global debug configuration for all Bitmovin components.
|
|
4038
|
+
*/
|
|
4039
|
+
declare class DebugConfig {
|
|
4040
|
+
private static _isDebugEnabled;
|
|
4041
|
+
/**
|
|
4042
|
+
* Retrieves the current debug logging state.
|
|
4043
|
+
*
|
|
4044
|
+
* @returns `true` if debug logging is enabled, otherwise `false`.
|
|
4045
|
+
*/
|
|
4046
|
+
static get isDebugLoggingEnabled(): boolean;
|
|
4047
|
+
/**
|
|
4048
|
+
* Enables or disables global debug logging for all Bitmovin components.
|
|
4049
|
+
*
|
|
4050
|
+
* Debug logging provides detailed information primarily for debugging purposes,
|
|
4051
|
+
* helping to diagnose problems and trace the flow of execution within the Player.
|
|
4052
|
+
*
|
|
4053
|
+
* ### Warning:
|
|
4054
|
+
* This option **should not be enabled in production** as it may log sensitive or confidential
|
|
4055
|
+
* information to the console.
|
|
4056
|
+
*
|
|
4057
|
+
* ## Platform-Specific Logging Behavior
|
|
4058
|
+
* ---
|
|
4059
|
+
* - **iOS:** logs are printed using `NSLog` at the verbose log level.
|
|
4060
|
+
* - **Android:** logs are printed using `android.util.Log` with the following tags:
|
|
4061
|
+
* - `BitmovinPlayer`
|
|
4062
|
+
* - `BitmovinPlayerView`
|
|
4063
|
+
* - `BitmovinOffline`
|
|
4064
|
+
* - `BitmovinSource`
|
|
4065
|
+
* - `BitmovinExoPlayer`
|
|
4066
|
+
*
|
|
4067
|
+
* ## Limitations
|
|
4068
|
+
* ---
|
|
4069
|
+
* **Android**
|
|
4070
|
+
* - This flag **must** be set **before** creating any Bitmovin component to take effect.
|
|
4071
|
+
*
|
|
4072
|
+
* ## Usage Notes
|
|
4073
|
+
* ---
|
|
4074
|
+
* - We recommend setting this flag during your app's initialization phase, such as in the
|
|
4075
|
+
* application's entry point (e.g. `App.tsx`).
|
|
4076
|
+
*
|
|
4077
|
+
* @defaultValue `false`
|
|
4078
|
+
*/
|
|
4079
|
+
static setDebugLoggingEnabled(value: boolean): Promise<void>;
|
|
4080
|
+
}
|
|
4081
|
+
|
|
4082
|
+
export { Ad, AdBreak, AdBreakFinishedEvent, AdBreakStartedEvent, AdClickedEvent, AdConfig, AdData, AdErrorEvent, AdFinishedEvent, AdItem, AdManifestLoadEvent, AdManifestLoadedEvent, AdQuartile, AdQuartileEvent, AdScheduledEvent, AdSkippedEvent, AdSource, AdSourceType, AdStartedEvent, AdaptationConfig, AdvertisingConfig, AnalyticsApi, AnalyticsConfig, AudioAddedEvent, AudioChangedEvent, AudioRemovedEvent, AudioSession, AudioSessionCategory, AudioTrack, BasePlayerViewProps, BitmovinCastManager, BitmovinCastManagerOptions, BitmovinNativeOfflineEventData, BufferApi, BufferConfig, BufferLevel, BufferLevels, BufferMediaTypeConfig, BufferType, CastAvailableEvent, CastPausedEvent, CastPayload, CastPlaybackFinishedEvent, CastPlayingEvent, CastStartEvent, CastStartedEvent, CastStoppedEvent, CastTimeUpdatedEvent, CastWaitingForDeviceEvent, CueEnterEvent, CueExitEvent, CustomDataConfig, CustomMessageHandler, CustomMessageHandlerProps, CustomUi, DebugConfig, DefaultMetadata, DestroyEvent, DownloadFinishedEvent, Drm, DrmConfig, ErrorEvent, Event, EventSource, FairplayConfig, ForceReuseVideoCodecReason, FullscreenDisabledEvent, FullscreenEnabledEvent, FullscreenEnterEvent, FullscreenExitEvent, FullscreenHandler, HttpRequest, HttpRequestType, HttpResponse, LiveConfig, LoadingState, MediaControlConfig, MediaType, MutedEvent, Network, NetworkConfig, OfflineContentConfig, OfflineContentManager, OfflineContentManagerListener, OfflineContentOptionEntry, OfflineContentOptions, OfflineDownloadRequest, OfflineEvent, OfflineEventType, OfflineSourceOptions, OfflineState, OnCanceledEvent, OnCompletedEvent, OnDrmLicenseExpiredEvent, OnDrmLicenseUpdatedEvent, OnErrorEvent, OnOptionsAvailableEvent, OnProgressEvent, OnResumedEvent, OnSuspendedEvent, PausedEvent, PictureInPictureAvailabilityChangedEvent, PictureInPictureConfig, PictureInPictureEnterEvent, PictureInPictureEnteredEvent, PictureInPictureExitEvent, PictureInPictureExitedEvent, PlayEvent, PlaybackConfig, PlaybackFinishedEvent, PlaybackSpeedChangedEvent, Player, PlayerActiveEvent, PlayerConfig, PlayerErrorEvent, PlayerView, PlayerViewConfig, PlayerViewProps, PlayerWarningEvent, PlayingEvent, ReadyEvent, RemoteControlConfig, ScalingMode, SeekEvent, SeekPosition, SeekedEvent, SideLoadedSubtitleTrack, SmallScreenUi, Source, SourceConfig, SourceErrorEvent, SourceLoadEvent, SourceLoadedEvent, SourceMetadata, SourceOptions, SourceRemoteControlConfig, SourceType, SourceUnloadedEvent, SourceWarningEvent, StallEndedEvent, StallStartedEvent, StyleConfig, SubtitleAddedEvent, SubtitleChangedEvent, SubtitleFormat, SubtitleRemovedEvent, SubtitleTrack, Thumbnail, TimeChangedEvent, TimeShiftEvent, TimeShiftedEvent, TimelineReferencePoint, TvUi, TweaksConfig, UiConfig, UnmutedEvent, UserInterfaceType, Variant, VideoDownloadQualityChangedEvent, VideoPlaybackQualityChangedEvent, VideoQuality, WebUiConfig, WidevineConfig, usePlayer };
|
package/lib/index.d.ts
CHANGED
|
@@ -2778,6 +2778,29 @@ declare enum UserInterfaceType {
|
|
|
2778
2778
|
Subtitle = "Subtitle"
|
|
2779
2779
|
}
|
|
2780
2780
|
|
|
2781
|
+
/**
|
|
2782
|
+
* When switching the video quality, the video decoder's configuration might change
|
|
2783
|
+
* as the player can't always know if the codec supports such configuration change, it destroys and recreates it.
|
|
2784
|
+
* This behaviour can cause brief black screens when switching between video qualities as codec recreation can be slow.
|
|
2785
|
+
*
|
|
2786
|
+
* If a codec is know to support a given configuration change without issues,
|
|
2787
|
+
* the configuration can be added to the `TweaksConfig.forceReuseVideoCodecReasons`
|
|
2788
|
+
* to always reuse the video codec and avoid the black screen.
|
|
2789
|
+
*/
|
|
2790
|
+
declare enum ForceReuseVideoCodecReason {
|
|
2791
|
+
/**
|
|
2792
|
+
* The new video quality color information is not compatible.
|
|
2793
|
+
*/
|
|
2794
|
+
ColorInfoMismatch = "ColorInfoMismatch",
|
|
2795
|
+
/**
|
|
2796
|
+
* The new video quality exceed the decoder's configured maximum sample size.
|
|
2797
|
+
*/
|
|
2798
|
+
MaxInputSizeExceeded = "MaxInputSizeExceeded",
|
|
2799
|
+
/**
|
|
2800
|
+
* The new video quality exceed the decoder's configured maximum resolution.
|
|
2801
|
+
*/
|
|
2802
|
+
MaxResolutionExceeded = "MaxResolutionExceeded"
|
|
2803
|
+
}
|
|
2781
2804
|
/**
|
|
2782
2805
|
* This configuration is used as an incubator for experimental features. Tweaks are not officially
|
|
2783
2806
|
* supported and are not guaranteed to be stable, i.e. their naming, functionality and API can
|
|
@@ -2950,6 +2973,20 @@ interface TweaksConfig {
|
|
|
2950
2973
|
* @platform iOS
|
|
2951
2974
|
*/
|
|
2952
2975
|
updatesNowPlayingInfoCenter?: boolean;
|
|
2976
|
+
/**
|
|
2977
|
+
* When switching between video formats (eg: adapting between video qualities)
|
|
2978
|
+
* the codec might be recreated due to several reasons.
|
|
2979
|
+
* This behaviour can cause brief black screens when switching between video qualities as codec recreation can be
|
|
2980
|
+
* slow.
|
|
2981
|
+
*
|
|
2982
|
+
* If a device is know to support video format changes and keep the current decoder without issues,
|
|
2983
|
+
* this set can be filled with multiple `ForceReuseVideoCodecReason` and avoid the black screen.
|
|
2984
|
+
*
|
|
2985
|
+
* Default is `null` i.e not set
|
|
2986
|
+
*
|
|
2987
|
+
* @platform Android
|
|
2988
|
+
*/
|
|
2989
|
+
forceReuseVideoCodecReasons?: Array<ForceReuseVideoCodecReason>;
|
|
2953
2990
|
}
|
|
2954
2991
|
|
|
2955
2992
|
/**
|
|
@@ -3996,4 +4033,50 @@ declare class Network extends NativeInstance<NetworkConfig> {
|
|
|
3996
4033
|
onPreprocessHttpResponse: (responseId: string, type: HttpRequestType, response: HttpResponse) => void;
|
|
3997
4034
|
}
|
|
3998
4035
|
|
|
3999
|
-
|
|
4036
|
+
/**
|
|
4037
|
+
* Global debug configuration for all Bitmovin components.
|
|
4038
|
+
*/
|
|
4039
|
+
declare class DebugConfig {
|
|
4040
|
+
private static _isDebugEnabled;
|
|
4041
|
+
/**
|
|
4042
|
+
* Retrieves the current debug logging state.
|
|
4043
|
+
*
|
|
4044
|
+
* @returns `true` if debug logging is enabled, otherwise `false`.
|
|
4045
|
+
*/
|
|
4046
|
+
static get isDebugLoggingEnabled(): boolean;
|
|
4047
|
+
/**
|
|
4048
|
+
* Enables or disables global debug logging for all Bitmovin components.
|
|
4049
|
+
*
|
|
4050
|
+
* Debug logging provides detailed information primarily for debugging purposes,
|
|
4051
|
+
* helping to diagnose problems and trace the flow of execution within the Player.
|
|
4052
|
+
*
|
|
4053
|
+
* ### Warning:
|
|
4054
|
+
* This option **should not be enabled in production** as it may log sensitive or confidential
|
|
4055
|
+
* information to the console.
|
|
4056
|
+
*
|
|
4057
|
+
* ## Platform-Specific Logging Behavior
|
|
4058
|
+
* ---
|
|
4059
|
+
* - **iOS:** logs are printed using `NSLog` at the verbose log level.
|
|
4060
|
+
* - **Android:** logs are printed using `android.util.Log` with the following tags:
|
|
4061
|
+
* - `BitmovinPlayer`
|
|
4062
|
+
* - `BitmovinPlayerView`
|
|
4063
|
+
* - `BitmovinOffline`
|
|
4064
|
+
* - `BitmovinSource`
|
|
4065
|
+
* - `BitmovinExoPlayer`
|
|
4066
|
+
*
|
|
4067
|
+
* ## Limitations
|
|
4068
|
+
* ---
|
|
4069
|
+
* **Android**
|
|
4070
|
+
* - This flag **must** be set **before** creating any Bitmovin component to take effect.
|
|
4071
|
+
*
|
|
4072
|
+
* ## Usage Notes
|
|
4073
|
+
* ---
|
|
4074
|
+
* - We recommend setting this flag during your app's initialization phase, such as in the
|
|
4075
|
+
* application's entry point (e.g. `App.tsx`).
|
|
4076
|
+
*
|
|
4077
|
+
* @defaultValue `false`
|
|
4078
|
+
*/
|
|
4079
|
+
static setDebugLoggingEnabled(value: boolean): Promise<void>;
|
|
4080
|
+
}
|
|
4081
|
+
|
|
4082
|
+
export { Ad, AdBreak, AdBreakFinishedEvent, AdBreakStartedEvent, AdClickedEvent, AdConfig, AdData, AdErrorEvent, AdFinishedEvent, AdItem, AdManifestLoadEvent, AdManifestLoadedEvent, AdQuartile, AdQuartileEvent, AdScheduledEvent, AdSkippedEvent, AdSource, AdSourceType, AdStartedEvent, AdaptationConfig, AdvertisingConfig, AnalyticsApi, AnalyticsConfig, AudioAddedEvent, AudioChangedEvent, AudioRemovedEvent, AudioSession, AudioSessionCategory, AudioTrack, BasePlayerViewProps, BitmovinCastManager, BitmovinCastManagerOptions, BitmovinNativeOfflineEventData, BufferApi, BufferConfig, BufferLevel, BufferLevels, BufferMediaTypeConfig, BufferType, CastAvailableEvent, CastPausedEvent, CastPayload, CastPlaybackFinishedEvent, CastPlayingEvent, CastStartEvent, CastStartedEvent, CastStoppedEvent, CastTimeUpdatedEvent, CastWaitingForDeviceEvent, CueEnterEvent, CueExitEvent, CustomDataConfig, CustomMessageHandler, CustomMessageHandlerProps, CustomUi, DebugConfig, DefaultMetadata, DestroyEvent, DownloadFinishedEvent, Drm, DrmConfig, ErrorEvent, Event, EventSource, FairplayConfig, ForceReuseVideoCodecReason, FullscreenDisabledEvent, FullscreenEnabledEvent, FullscreenEnterEvent, FullscreenExitEvent, FullscreenHandler, HttpRequest, HttpRequestType, HttpResponse, LiveConfig, LoadingState, MediaControlConfig, MediaType, MutedEvent, Network, NetworkConfig, OfflineContentConfig, OfflineContentManager, OfflineContentManagerListener, OfflineContentOptionEntry, OfflineContentOptions, OfflineDownloadRequest, OfflineEvent, OfflineEventType, OfflineSourceOptions, OfflineState, OnCanceledEvent, OnCompletedEvent, OnDrmLicenseExpiredEvent, OnDrmLicenseUpdatedEvent, OnErrorEvent, OnOptionsAvailableEvent, OnProgressEvent, OnResumedEvent, OnSuspendedEvent, PausedEvent, PictureInPictureAvailabilityChangedEvent, PictureInPictureConfig, PictureInPictureEnterEvent, PictureInPictureEnteredEvent, PictureInPictureExitEvent, PictureInPictureExitedEvent, PlayEvent, PlaybackConfig, PlaybackFinishedEvent, PlaybackSpeedChangedEvent, Player, PlayerActiveEvent, PlayerConfig, PlayerErrorEvent, PlayerView, PlayerViewConfig, PlayerViewProps, PlayerWarningEvent, PlayingEvent, ReadyEvent, RemoteControlConfig, ScalingMode, SeekEvent, SeekPosition, SeekedEvent, SideLoadedSubtitleTrack, SmallScreenUi, Source, SourceConfig, SourceErrorEvent, SourceLoadEvent, SourceLoadedEvent, SourceMetadata, SourceOptions, SourceRemoteControlConfig, SourceType, SourceUnloadedEvent, SourceWarningEvent, StallEndedEvent, StallStartedEvent, StyleConfig, SubtitleAddedEvent, SubtitleChangedEvent, SubtitleFormat, SubtitleRemovedEvent, SubtitleTrack, Thumbnail, TimeChangedEvent, TimeShiftEvent, TimeShiftedEvent, TimelineReferencePoint, TvUi, TweaksConfig, UiConfig, UnmutedEvent, UserInterfaceType, Variant, VideoDownloadQualityChangedEvent, VideoPlaybackQualityChangedEvent, VideoQuality, WebUiConfig, WidevineConfig, usePlayer };
|
package/lib/index.js
CHANGED
|
@@ -44,7 +44,9 @@ __export(src_exports, {
|
|
|
44
44
|
BufferType: () => BufferType,
|
|
45
45
|
CustomMessageHandler: () => CustomMessageHandler,
|
|
46
46
|
CustomUi: () => CustomUi,
|
|
47
|
+
DebugConfig: () => DebugConfig,
|
|
47
48
|
Drm: () => Drm,
|
|
49
|
+
ForceReuseVideoCodecReason: () => ForceReuseVideoCodecReason,
|
|
48
50
|
HttpRequestType: () => HttpRequestType,
|
|
49
51
|
LoadingState: () => LoadingState,
|
|
50
52
|
MediaType: () => MediaType,
|
|
@@ -1713,6 +1715,66 @@ var BitmovinCastManager = {
|
|
|
1713
1715
|
return BitmovinCastManagerModule.sendMessage(message, messageNamespace);
|
|
1714
1716
|
}
|
|
1715
1717
|
};
|
|
1718
|
+
|
|
1719
|
+
// src/tweaksConfig.ts
|
|
1720
|
+
var ForceReuseVideoCodecReason = /* @__PURE__ */ ((ForceReuseVideoCodecReason2) => {
|
|
1721
|
+
ForceReuseVideoCodecReason2["ColorInfoMismatch"] = "ColorInfoMismatch";
|
|
1722
|
+
ForceReuseVideoCodecReason2["MaxInputSizeExceeded"] = "MaxInputSizeExceeded";
|
|
1723
|
+
ForceReuseVideoCodecReason2["MaxResolutionExceeded"] = "MaxResolutionExceeded";
|
|
1724
|
+
return ForceReuseVideoCodecReason2;
|
|
1725
|
+
})(ForceReuseVideoCodecReason || {});
|
|
1726
|
+
|
|
1727
|
+
// src/debug.ts
|
|
1728
|
+
var import_react_native16 = require("react-native");
|
|
1729
|
+
var DebugModule = import_react_native16.NativeModules.DebugModule;
|
|
1730
|
+
var _DebugConfig = class _DebugConfig {
|
|
1731
|
+
/**
|
|
1732
|
+
* Retrieves the current debug logging state.
|
|
1733
|
+
*
|
|
1734
|
+
* @returns `true` if debug logging is enabled, otherwise `false`.
|
|
1735
|
+
*/
|
|
1736
|
+
static get isDebugLoggingEnabled() {
|
|
1737
|
+
return _DebugConfig._isDebugEnabled;
|
|
1738
|
+
}
|
|
1739
|
+
/**
|
|
1740
|
+
* Enables or disables global debug logging for all Bitmovin components.
|
|
1741
|
+
*
|
|
1742
|
+
* Debug logging provides detailed information primarily for debugging purposes,
|
|
1743
|
+
* helping to diagnose problems and trace the flow of execution within the Player.
|
|
1744
|
+
*
|
|
1745
|
+
* ### Warning:
|
|
1746
|
+
* This option **should not be enabled in production** as it may log sensitive or confidential
|
|
1747
|
+
* information to the console.
|
|
1748
|
+
*
|
|
1749
|
+
* ## Platform-Specific Logging Behavior
|
|
1750
|
+
* ---
|
|
1751
|
+
* - **iOS:** logs are printed using `NSLog` at the verbose log level.
|
|
1752
|
+
* - **Android:** logs are printed using `android.util.Log` with the following tags:
|
|
1753
|
+
* - `BitmovinPlayer`
|
|
1754
|
+
* - `BitmovinPlayerView`
|
|
1755
|
+
* - `BitmovinOffline`
|
|
1756
|
+
* - `BitmovinSource`
|
|
1757
|
+
* - `BitmovinExoPlayer`
|
|
1758
|
+
*
|
|
1759
|
+
* ## Limitations
|
|
1760
|
+
* ---
|
|
1761
|
+
* **Android**
|
|
1762
|
+
* - This flag **must** be set **before** creating any Bitmovin component to take effect.
|
|
1763
|
+
*
|
|
1764
|
+
* ## Usage Notes
|
|
1765
|
+
* ---
|
|
1766
|
+
* - We recommend setting this flag during your app's initialization phase, such as in the
|
|
1767
|
+
* application's entry point (e.g. `App.tsx`).
|
|
1768
|
+
*
|
|
1769
|
+
* @defaultValue `false`
|
|
1770
|
+
*/
|
|
1771
|
+
static async setDebugLoggingEnabled(value) {
|
|
1772
|
+
_DebugConfig._isDebugEnabled = value;
|
|
1773
|
+
await DebugModule.setDebugLoggingEnabled(value);
|
|
1774
|
+
}
|
|
1775
|
+
};
|
|
1776
|
+
__publicField(_DebugConfig, "_isDebugEnabled", false);
|
|
1777
|
+
var DebugConfig = _DebugConfig;
|
|
1716
1778
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1717
1779
|
0 && (module.exports = {
|
|
1718
1780
|
AdQuartile,
|
|
@@ -1724,7 +1786,9 @@ var BitmovinCastManager = {
|
|
|
1724
1786
|
BufferType,
|
|
1725
1787
|
CustomMessageHandler,
|
|
1726
1788
|
CustomUi,
|
|
1789
|
+
DebugConfig,
|
|
1727
1790
|
Drm,
|
|
1791
|
+
ForceReuseVideoCodecReason,
|
|
1728
1792
|
HttpRequestType,
|
|
1729
1793
|
LoadingState,
|
|
1730
1794
|
MediaType,
|
package/lib/index.mjs
CHANGED
|
@@ -1659,6 +1659,66 @@ var BitmovinCastManager = {
|
|
|
1659
1659
|
return BitmovinCastManagerModule.sendMessage(message, messageNamespace);
|
|
1660
1660
|
}
|
|
1661
1661
|
};
|
|
1662
|
+
|
|
1663
|
+
// src/tweaksConfig.ts
|
|
1664
|
+
var ForceReuseVideoCodecReason = /* @__PURE__ */ ((ForceReuseVideoCodecReason2) => {
|
|
1665
|
+
ForceReuseVideoCodecReason2["ColorInfoMismatch"] = "ColorInfoMismatch";
|
|
1666
|
+
ForceReuseVideoCodecReason2["MaxInputSizeExceeded"] = "MaxInputSizeExceeded";
|
|
1667
|
+
ForceReuseVideoCodecReason2["MaxResolutionExceeded"] = "MaxResolutionExceeded";
|
|
1668
|
+
return ForceReuseVideoCodecReason2;
|
|
1669
|
+
})(ForceReuseVideoCodecReason || {});
|
|
1670
|
+
|
|
1671
|
+
// src/debug.ts
|
|
1672
|
+
import { NativeModules as NativeModules13 } from "react-native";
|
|
1673
|
+
var DebugModule = NativeModules13.DebugModule;
|
|
1674
|
+
var _DebugConfig = class _DebugConfig {
|
|
1675
|
+
/**
|
|
1676
|
+
* Retrieves the current debug logging state.
|
|
1677
|
+
*
|
|
1678
|
+
* @returns `true` if debug logging is enabled, otherwise `false`.
|
|
1679
|
+
*/
|
|
1680
|
+
static get isDebugLoggingEnabled() {
|
|
1681
|
+
return _DebugConfig._isDebugEnabled;
|
|
1682
|
+
}
|
|
1683
|
+
/**
|
|
1684
|
+
* Enables or disables global debug logging for all Bitmovin components.
|
|
1685
|
+
*
|
|
1686
|
+
* Debug logging provides detailed information primarily for debugging purposes,
|
|
1687
|
+
* helping to diagnose problems and trace the flow of execution within the Player.
|
|
1688
|
+
*
|
|
1689
|
+
* ### Warning:
|
|
1690
|
+
* This option **should not be enabled in production** as it may log sensitive or confidential
|
|
1691
|
+
* information to the console.
|
|
1692
|
+
*
|
|
1693
|
+
* ## Platform-Specific Logging Behavior
|
|
1694
|
+
* ---
|
|
1695
|
+
* - **iOS:** logs are printed using `NSLog` at the verbose log level.
|
|
1696
|
+
* - **Android:** logs are printed using `android.util.Log` with the following tags:
|
|
1697
|
+
* - `BitmovinPlayer`
|
|
1698
|
+
* - `BitmovinPlayerView`
|
|
1699
|
+
* - `BitmovinOffline`
|
|
1700
|
+
* - `BitmovinSource`
|
|
1701
|
+
* - `BitmovinExoPlayer`
|
|
1702
|
+
*
|
|
1703
|
+
* ## Limitations
|
|
1704
|
+
* ---
|
|
1705
|
+
* **Android**
|
|
1706
|
+
* - This flag **must** be set **before** creating any Bitmovin component to take effect.
|
|
1707
|
+
*
|
|
1708
|
+
* ## Usage Notes
|
|
1709
|
+
* ---
|
|
1710
|
+
* - We recommend setting this flag during your app's initialization phase, such as in the
|
|
1711
|
+
* application's entry point (e.g. `App.tsx`).
|
|
1712
|
+
*
|
|
1713
|
+
* @defaultValue `false`
|
|
1714
|
+
*/
|
|
1715
|
+
static async setDebugLoggingEnabled(value) {
|
|
1716
|
+
_DebugConfig._isDebugEnabled = value;
|
|
1717
|
+
await DebugModule.setDebugLoggingEnabled(value);
|
|
1718
|
+
}
|
|
1719
|
+
};
|
|
1720
|
+
__publicField(_DebugConfig, "_isDebugEnabled", false);
|
|
1721
|
+
var DebugConfig = _DebugConfig;
|
|
1662
1722
|
export {
|
|
1663
1723
|
AdQuartile,
|
|
1664
1724
|
AdSourceType,
|
|
@@ -1669,7 +1729,9 @@ export {
|
|
|
1669
1729
|
BufferType,
|
|
1670
1730
|
CustomMessageHandler,
|
|
1671
1731
|
CustomUi,
|
|
1732
|
+
DebugConfig,
|
|
1672
1733
|
Drm,
|
|
1734
|
+
ForceReuseVideoCodecReason,
|
|
1673
1735
|
HttpRequestType,
|
|
1674
1736
|
LoadingState,
|
|
1675
1737
|
MediaType,
|
package/package.json
CHANGED
package/src/debug.ts
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { NativeModules } from 'react-native';
|
|
2
|
+
|
|
3
|
+
const DebugModule = NativeModules.DebugModule;
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Global debug configuration for all Bitmovin components.
|
|
7
|
+
*/
|
|
8
|
+
export class DebugConfig {
|
|
9
|
+
private static _isDebugEnabled = false;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Retrieves the current debug logging state.
|
|
13
|
+
*
|
|
14
|
+
* @returns `true` if debug logging is enabled, otherwise `false`.
|
|
15
|
+
*/
|
|
16
|
+
static get isDebugLoggingEnabled(): boolean {
|
|
17
|
+
return DebugConfig._isDebugEnabled;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Enables or disables global debug logging for all Bitmovin components.
|
|
22
|
+
*
|
|
23
|
+
* Debug logging provides detailed information primarily for debugging purposes,
|
|
24
|
+
* helping to diagnose problems and trace the flow of execution within the Player.
|
|
25
|
+
*
|
|
26
|
+
* ### Warning:
|
|
27
|
+
* This option **should not be enabled in production** as it may log sensitive or confidential
|
|
28
|
+
* information to the console.
|
|
29
|
+
*
|
|
30
|
+
* ## Platform-Specific Logging Behavior
|
|
31
|
+
* ---
|
|
32
|
+
* - **iOS:** logs are printed using `NSLog` at the verbose log level.
|
|
33
|
+
* - **Android:** logs are printed using `android.util.Log` with the following tags:
|
|
34
|
+
* - `BitmovinPlayer`
|
|
35
|
+
* - `BitmovinPlayerView`
|
|
36
|
+
* - `BitmovinOffline`
|
|
37
|
+
* - `BitmovinSource`
|
|
38
|
+
* - `BitmovinExoPlayer`
|
|
39
|
+
*
|
|
40
|
+
* ## Limitations
|
|
41
|
+
* ---
|
|
42
|
+
* **Android**
|
|
43
|
+
* - This flag **must** be set **before** creating any Bitmovin component to take effect.
|
|
44
|
+
*
|
|
45
|
+
* ## Usage Notes
|
|
46
|
+
* ---
|
|
47
|
+
* - We recommend setting this flag during your app's initialization phase, such as in the
|
|
48
|
+
* application's entry point (e.g. `App.tsx`).
|
|
49
|
+
*
|
|
50
|
+
* @defaultValue `false`
|
|
51
|
+
*/
|
|
52
|
+
static async setDebugLoggingEnabled(value: boolean): Promise<void> {
|
|
53
|
+
DebugConfig._isDebugEnabled = value;
|
|
54
|
+
await DebugModule.setDebugLoggingEnabled(value);
|
|
55
|
+
}
|
|
56
|
+
}
|
package/src/index.ts
CHANGED
package/src/tweaksConfig.ts
CHANGED
|
@@ -1,3 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* When switching the video quality, the video decoder's configuration might change
|
|
3
|
+
* as the player can't always know if the codec supports such configuration change, it destroys and recreates it.
|
|
4
|
+
* This behaviour can cause brief black screens when switching between video qualities as codec recreation can be slow.
|
|
5
|
+
*
|
|
6
|
+
* If a codec is know to support a given configuration change without issues,
|
|
7
|
+
* the configuration can be added to the `TweaksConfig.forceReuseVideoCodecReasons`
|
|
8
|
+
* to always reuse the video codec and avoid the black screen.
|
|
9
|
+
*/
|
|
10
|
+
export enum ForceReuseVideoCodecReason {
|
|
11
|
+
/**
|
|
12
|
+
* The new video quality color information is not compatible.
|
|
13
|
+
*/
|
|
14
|
+
ColorInfoMismatch = 'ColorInfoMismatch',
|
|
15
|
+
/**
|
|
16
|
+
* The new video quality exceed the decoder's configured maximum sample size.
|
|
17
|
+
*/
|
|
18
|
+
MaxInputSizeExceeded = 'MaxInputSizeExceeded',
|
|
19
|
+
/**
|
|
20
|
+
* The new video quality exceed the decoder's configured maximum resolution.
|
|
21
|
+
*/
|
|
22
|
+
MaxResolutionExceeded = 'MaxResolutionExceeded',
|
|
23
|
+
}
|
|
24
|
+
|
|
1
25
|
/**
|
|
2
26
|
* This configuration is used as an incubator for experimental features. Tweaks are not officially
|
|
3
27
|
* supported and are not guaranteed to be stable, i.e. their naming, functionality and API can
|
|
@@ -170,4 +194,19 @@ export interface TweaksConfig {
|
|
|
170
194
|
* @platform iOS
|
|
171
195
|
*/
|
|
172
196
|
updatesNowPlayingInfoCenter?: boolean;
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* When switching between video formats (eg: adapting between video qualities)
|
|
200
|
+
* the codec might be recreated due to several reasons.
|
|
201
|
+
* This behaviour can cause brief black screens when switching between video qualities as codec recreation can be
|
|
202
|
+
* slow.
|
|
203
|
+
*
|
|
204
|
+
* If a device is know to support video format changes and keep the current decoder without issues,
|
|
205
|
+
* this set can be filled with multiple `ForceReuseVideoCodecReason` and avoid the black screen.
|
|
206
|
+
*
|
|
207
|
+
* Default is `null` i.e not set
|
|
208
|
+
*
|
|
209
|
+
* @platform Android
|
|
210
|
+
*/
|
|
211
|
+
forceReuseVideoCodecReasons?: Array<ForceReuseVideoCodecReason>;
|
|
173
212
|
}
|