expo-libvlc-player 5.0.3 → 6.0.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/README.md CHANGED
@@ -151,7 +151,6 @@ The `LibVlcPlayerView` extends React Native `ViewProps` and implements the follo
151
151
  | `onPlaying` | Called after the `Playing` player event | |
152
152
  | `onPaused` | Called after the `Paused` player event | |
153
153
  | `onStopped` | Called after the `Stopped` player event | |
154
- | `onEndReached` | Called after the `EndReached` player event | |
155
154
  | `onEncounteredError` | Called after the `EncounteredError` player event | `{ error: string }` |
156
155
  | `onDialogDisplay` | Called after a `Dialog` needs to be displayed | [`Dialog`](#dialog) |
157
156
  | `onTimeChanged` | Called after the `TimeChanged` player event | `{ time: number }` |
@@ -15,7 +15,6 @@ private val PLAYER_EVENTS =
15
15
  "onPlaying",
16
16
  "onPaused",
17
17
  "onStopped",
18
- "onEndReached",
19
18
  "onEncounteredError",
20
19
  "onDialogDisplay",
21
20
  "onTimeChanged",
@@ -42,7 +41,7 @@ class LibVlcPlayerModule : Module() {
42
41
  }
43
42
 
44
43
  OnActivityEntersForeground {
45
- MediaPlayerManager.keepAwakeManager.activateKeepAwake()
44
+ MediaPlayerManager.keepAwakeManager.toggleKeepAwake()
46
45
  MediaPlayerManager.onModuleForeground()
47
46
  }
48
47
 
@@ -62,7 +62,6 @@ class LibVlcPlayerView(
62
62
  val onPlaying by EventDispatcher<Unit>()
63
63
  val onPaused by EventDispatcher<Unit>()
64
64
  val onStopped by EventDispatcher<Unit>()
65
- val onEndReached by EventDispatcher<Unit>()
66
65
  val onEncounteredError by EventDispatcher()
67
66
  val onDialogDisplay by EventDispatcher<Dialog>()
68
67
  val onTimeChanged by EventDispatcher()
@@ -638,7 +637,7 @@ fun LibVlcPlayerView.setPlayerListener(player: MediaPlayer) {
638
637
 
639
638
  attachPlayer()
640
639
 
641
- MediaPlayerManager.keepAwakeManager.activateKeepAwake()
640
+ MediaPlayerManager.keepAwakeManager.toggleKeepAwake()
642
641
 
643
642
  retryUntil {
644
643
  val volume = player.getVolume()
@@ -651,7 +650,7 @@ fun LibVlcPlayerView.setPlayerListener(player: MediaPlayer) {
651
650
  Event.Paused -> {
652
651
  onPaused(Unit)
653
652
 
654
- MediaPlayerManager.keepAwakeManager.deactivateKeepAwake()
653
+ MediaPlayerManager.keepAwakeManager.toggleKeepAwake()
655
654
  MediaPlayerManager.audioFocusManager.updateAudioFocus()
656
655
  }
657
656
 
@@ -660,13 +659,11 @@ fun LibVlcPlayerView.setPlayerListener(player: MediaPlayer) {
660
659
 
661
660
  detachPlayer()
662
661
 
663
- MediaPlayerManager.keepAwakeManager.deactivateKeepAwake()
662
+ MediaPlayerManager.keepAwakeManager.toggleKeepAwake()
664
663
  MediaPlayerManager.audioFocusManager.updateAudioFocus()
665
664
  }
666
665
 
667
666
  Event.EndReached -> {
668
- onEndReached(Unit)
669
-
670
667
  player.stop()
671
668
 
672
669
  if (repeat) {
@@ -8,6 +8,7 @@ import android.os.Build
8
8
  import expo.modules.kotlin.AppContext
9
9
  import expo.modules.kotlin.exception.CodedException
10
10
  import expo.modules.kotlin.exception.Exceptions
11
+ import expo.modules.libvlcplayer.LibVlcPlayerView
11
12
  import expo.modules.libvlcplayer.constants.MediaPlayerConstants
12
13
  import expo.modules.libvlcplayer.enums.AudioMixingMode
13
14
  import kotlinx.coroutines.launch
@@ -25,11 +26,14 @@ class AudioFocusManager(
25
26
  }
26
27
  }
27
28
 
29
+ private val playerViews: MutableSet<LibVlcPlayerView>
30
+ get() = MediaPlayerManager.playerViews
31
+
28
32
  private var currentFocusRequest: AudioFocusRequest? = null
29
33
 
30
34
  private val anyPlayerRequiresFocus: Boolean
31
35
  get() =
32
- MediaPlayerManager.playerViews.any { view ->
36
+ playerViews.any { view ->
33
37
  playerRequiresFocus(view.mediaPlayer)
34
38
  }
35
39
 
@@ -41,7 +45,7 @@ class AudioFocusManager(
41
45
  appContext.mainQueue.launch {
42
46
  when (focusChange) {
43
47
  AudioManager.AUDIOFOCUS_LOSS -> {
44
- MediaPlayerManager.playerViews.forEach { view ->
48
+ playerViews.forEach { view ->
45
49
  pausePlayerIfUnmuted(view.mediaPlayer)
46
50
  }
47
51
 
@@ -55,7 +59,7 @@ class AudioFocusManager(
55
59
  return@launch
56
60
  }
57
61
 
58
- MediaPlayerManager.playerViews.forEach { view ->
62
+ playerViews.forEach { view ->
59
63
  pausePlayerIfUnmuted(view.mediaPlayer)
60
64
  }
61
65
 
@@ -65,7 +69,7 @@ class AudioFocusManager(
65
69
  AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK -> {
66
70
  val audioMixingMode = findAudioMixingMode()
67
71
 
68
- MediaPlayerManager.playerViews.forEach { view ->
72
+ playerViews.forEach { view ->
69
73
  if (audioMixingMode == AudioMixingMode.DO_NOT_MIX) {
70
74
  pausePlayerIfUnmuted(view.mediaPlayer)
71
75
  } else {
@@ -75,7 +79,7 @@ class AudioFocusManager(
75
79
  }
76
80
 
77
81
  AudioManager.AUDIOFOCUS_GAIN -> {
78
- MediaPlayerManager.playerViews.forEach { view ->
82
+ playerViews.forEach { view ->
79
83
  unduckPlayer(view.mediaPlayer)
80
84
  }
81
85
  }
@@ -102,7 +106,7 @@ class AudioFocusManager(
102
106
 
103
107
  private fun findAudioMixingMode(): AudioMixingMode {
104
108
  val mixingModes =
105
- MediaPlayerManager.playerViews
109
+ playerViews
106
110
  .filter { view -> view.mediaPlayer?.isPlaying() == true }
107
111
  .map { view -> view.audioMixingMode }
108
112
 
@@ -11,6 +11,12 @@ class KeepAwakeManager(
11
11
  private val activity: Activity
12
12
  get() = appContext.currentActivity ?: throw Exceptions.MissingActivity()
13
13
 
14
+ private val anyPlayingView: Boolean
15
+ get() =
16
+ MediaPlayerManager.playerViews.any { view ->
17
+ view.mediaPlayer?.isPlaying() == true
18
+ }
19
+
14
20
  fun activateKeepAwake() {
15
21
  activity.let { activity ->
16
22
  activity.runOnUiThread {
@@ -26,4 +32,12 @@ class KeepAwakeManager(
26
32
  }
27
33
  }
28
34
  }
35
+
36
+ fun toggleKeepAwake() {
37
+ if (anyPlayingView) {
38
+ activateKeepAwake()
39
+ } else {
40
+ deactivateKeepAwake()
41
+ }
42
+ }
29
43
  }
@@ -122,10 +122,6 @@ type PausedListener = () => void;
122
122
  * @hidden
123
123
  */
124
124
  type StoppedListener = () => void;
125
- /**
126
- * @hidden
127
- */
128
- type EndReachedListener = () => void;
129
125
  export type Error = {
130
126
  error: string;
131
127
  };
@@ -201,7 +197,6 @@ export interface LibVlcPlayerViewNativeProps extends ViewProps {
201
197
  onPlaying?: PlayingListener;
202
198
  onPaused?: PausedListener;
203
199
  onStopped?: StoppedListener;
204
- onEndReached?: EndReachedListener;
205
200
  onEncounteredError?: EncounteredErrorListener;
206
201
  onDialogDisplay?: DialogDisplayListener;
207
202
  onTimeChanged?: TimeChangedListener;
@@ -370,10 +365,6 @@ export interface LibVlcPlayerViewProps extends ViewProps {
370
365
  * Called after the `Stopped` player event
371
366
  */
372
367
  onStopped?: () => void;
373
- /**
374
- * Called after the `EndReached` player event
375
- */
376
- onEndReached?: () => void;
377
368
  /**
378
369
  * Called after the `EncounteredError` player event
379
370
  */
@@ -1 +1 @@
1
- {"version":3,"file":"LibVlcPlayer.types.d.ts","sourceRoot":"","sources":["../src/LibVlcPlayer.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LibVlcPlayer.types.d.ts","sourceRoot":"","sources":["../src/LibVlcPlayer.types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"LibVlcPlayer.types.js","sourceRoot":"","sources":["../src/LibVlcPlayer.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ViewProps } from \"react-native\";\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport type LibVlcPlayerModuleEvents = {};\n\nexport interface LibVlcPlayerViewRef {\n /**\n * Starts playback of the current player\n *\n * @returns A promise which resolves to `void`\n */\n readonly play: () => Promise<void>;\n /**\n * Pauses playback of the current player\n *\n * @returns A promise which resolves to `void`\n */\n readonly pause: () => Promise<void>;\n /**\n * Stops playback of the current player\n *\n * @returns A promise which resolves to `void`\n */\n readonly stop: () => Promise<void>;\n /**\n * Sets the time or position of the current player\n *\n * @param value - Must be a number equal or greater than `0`\n * @param type - Defaults to `\"time\"`\n *\n * @returns A promise which resolves to `void`\n */\n readonly seek: (value: number, type?: \"time\" | \"position\") => Promise<void>;\n /**\n * Starts or stops recording the current media\n *\n * @param path - Must be a valid path string or `undefined` to stop recording\n *\n * @returns A promise which resolves to `void`\n */\n readonly record: (path?: string) => Promise<void>;\n /**\n * Takes a snapshot of the current media\n *\n * @param path - Must be a valid path string\n *\n * @returns A promise which resolves to `void`\n */\n readonly snapshot: (path: string) => Promise<void>;\n /**\n * Posts an answer to a `Dialog`\n *\n * @param action - Must be an integer of `1` or `2`\n *\n * @returns A promise which resolves to `void`\n */\n readonly postAction: (action: 1 | 2) => Promise<void>;\n /**\n * Dismisses a `Dialog`\n *\n * @returns A promise which resolves to `void`\n */\n readonly dismiss: () => Promise<void>;\n}\n\nexport type LibVlcSource = string | number | null;\n\nexport interface Tracks {\n audio?: number;\n video?: number;\n subtitle?: number;\n}\n\nexport interface Slave {\n source: NonNullable<LibVlcSource>;\n type: \"audio\" | \"subtitle\";\n selected?: boolean;\n}\n\nexport type VideoAspectRatio = \"auto\" | string | number;\n\nexport type VideoContentFit = \"contain\" | \"cover\" | \"fill\";\n\nexport type AudioMixingMode =\n | \"mixWithOthers\"\n | \"duckOthers\"\n | \"auto\"\n | \"doNotMix\";\n\nexport interface NativeEventProps {\n target: number;\n}\n\nexport interface NativeEvent<T> {\n nativeEvent: T & NativeEventProps;\n}\n\nexport type LibVlcEvent<T> = Omit<T & NativeEventProps, \"target\">;\n\nexport interface Dialog {\n title: string;\n text: string;\n cancelText?: string;\n action1Text?: string;\n action2Text?: string;\n}\n\nexport interface Recording {\n path: string | null;\n isRecording: boolean;\n}\n\nexport interface Track {\n id: number;\n name: string;\n}\n\nexport interface MediaTracks {\n audio: Track[];\n video: Track[];\n subtitle: Track[];\n}\n\nexport interface MediaInfo {\n width: number;\n height: number;\n length: number;\n seekable: boolean;\n}\n\n/**\n * @hidden\n */\ntype BufferingListener = () => void;\n\n/**\n * @hidden\n */\ntype PlayingListener = () => void;\n\n/**\n * @hidden\n */\ntype PausedListener = () => void;\n\n/**\n * @hidden\n */\ntype StoppedListener = () => void;\n\n/**\n * @hidden\n */\ntype EndReachedListener = () => void;\n\nexport type Error = { error: string };\n\n/**\n * @hidden\n */\ntype EncounteredErrorListener = (event: NativeEvent<Error>) => void;\n\nexport type Time = { time: number };\n\n/**\n * @hidden\n */\ntype TimeChangedListener = (event: NativeEvent<Time>) => void;\n\nexport type Position = { position: number };\n\n/**\n * @hidden\n */\ntype PositionChangedListener = (event: NativeEvent<Position>) => void;\n\n/**\n * @hidden\n */\ntype ESAddedListener = (event: NativeEvent<MediaTracks>) => void;\n\n/**\n * @hidden\n */\ntype RecordChangedListener = (event: NativeEvent<Recording>) => void;\n\nexport type Snapshot = { path: string };\n\n/**\n * @hidden\n */\ntype SnapshotTakenListener = (event: NativeEvent<Snapshot>) => void;\n\n/**\n * @hidden\n */\ntype DialogDisplayListener = (event: NativeEvent<Dialog>) => void;\n\n/**\n * @hidden\n */\ntype FirstPlayListener = (event: NativeEvent<MediaInfo>) => void;\n\n/**\n * @hidden\n */\ntype ForegroundListener = () => void;\n\n/**\n * @hidden\n */\ntype BackgroundListener = () => void;\n\n/**\n * @hidden\n */\nexport interface LibVlcPlayerViewNativeProps extends ViewProps {\n ref?: React.Ref<LibVlcPlayerViewRef>;\n source?: LibVlcSource;\n options?: string[];\n tracks?: Tracks;\n slaves?: Slave[];\n scale?: number;\n aspectRatio?: VideoAspectRatio;\n contentFit?: VideoContentFit;\n rate?: number;\n time?: number;\n volume?: number;\n mute?: boolean;\n audioMixingMode?: AudioMixingMode;\n repeat?: boolean;\n autoplay?: boolean;\n onBuffering?: BufferingListener;\n onPlaying?: PlayingListener;\n onPaused?: PausedListener;\n onStopped?: StoppedListener;\n onEndReached?: EndReachedListener;\n onEncounteredError?: EncounteredErrorListener;\n onDialogDisplay?: DialogDisplayListener;\n onTimeChanged?: TimeChangedListener;\n onPositionChanged?: PositionChangedListener;\n onESAdded?: ESAddedListener;\n onRecordChanged?: RecordChangedListener;\n onSnapshotTaken?: SnapshotTakenListener;\n onFirstPlay?: FirstPlayListener;\n onForeground?: ForegroundListener;\n onBackground?: BackgroundListener;\n}\n\nexport interface LibVlcPlayerViewProps extends ViewProps {\n /**\n * Sets the source of the media to be played. Set to `null` to release the player\n *\n * @example\n *\n * ```tsx\n * const BIG_BUCK_BUNNY =\n * \"https://download.blender.org/peach/bigbuckbunny_movies/big_buck_bunny_720p_h264.mov\";\n *\n * <LibVlcPlayerView source={BIG_BUCK_BUNNY} />\n * ```\n */\n source: LibVlcSource;\n /**\n * Sets the VLC options to initialize the player with\n *\n * https://wiki.videolan.org/VLC_command-line_help/\n *\n * @example\n *\n * ```tsx\n * const options = [\"--network-caching=1000\"];\n *\n * <LibVlcPlayerView\n * source={BIG_BUCK_BUNNY}\n * options={options}\n * />\n * ```\n *\n * @default []\n */\n options?: string[];\n /**\n * Sets the player audio, video and subtitle tracks\n *\n * @example\n *\n * ```tsx\n * const tracks = {\n * audio: 3,\n * video: 2,\n * subtitle: 1,\n * };\n *\n * <LibVlcPlayerView\n * source={BIG_BUCK_BUNNY}\n * tracks={tracks}\n * />\n * ```\n *\n * @default undefined\n */\n tracks?: Tracks;\n /**\n * Sets the player audio and subtitle slaves\n *\n * @example\n *\n * ```tsx\n * const subtitles = [{\n * source: \"file://path/to/subtitle.srt\",\n * type: \"subtitle\",\n * selected: true,\n * }];\n *\n * <LibVlcPlayerView\n * source={BIG_BUCK_BUNNY}\n * slaves={subtitles}\n * />\n * ```\n *\n * @default []\n */\n slaves?: Slave[];\n /**\n * Sets the player scaling factor. Must be a float equal or greater than `0`\n *\n * @default 0\n */\n scale?: number;\n /**\n * Sets the container aspect ratio. Must be a valid ratio string or number\n *\n * @example \"16:9\"\n *\n * @default undefined\n */\n aspectRatio?: VideoAspectRatio;\n /**\n * Sets how the video should be scaled to fit in the container\n *\n * @example \"cover\"\n *\n * @default \"contain\"\n */\n contentFit?: VideoContentFit;\n /**\n * Sets the player rate. Must be a float equal or greater than `1`\n *\n * @default 1\n */\n rate?: number;\n /**\n * Sets the initial player time. Must be an integer in milliseconds\n *\n * @default 0\n */\n time?: number;\n /**\n * Sets the player volume. Must be an integer between `0` and `100`\n *\n * @default 100\n */\n volume?: number;\n /**\n * Sets the player volume to `0` when `true`. Previous value is set when `false`\n *\n * @default false\n */\n mute?: boolean;\n /**\n * Determines how the player will interact with other audio playing in the system\n *\n * @example \"doNotMix\"\n *\n * @default \"auto\"\n */\n audioMixingMode?: AudioMixingMode;\n /**\n * Determines whether the media should repeat once ended\n *\n * @default false\n */\n repeat?: boolean;\n /**\n * Determines whether the media should autoplay once created\n *\n * @default true\n */\n autoplay?: boolean;\n /**\n * Called after the `Buffering` player event\n */\n onBuffering?: () => void;\n /**\n * Called after the `Playing` player event\n */\n onPlaying?: () => void;\n /**\n * Called after the `Paused` player event\n */\n onPaused?: () => void;\n /**\n * Called after the `Stopped` player event\n */\n onStopped?: () => void;\n /**\n * Called after the `EndReached` player event\n */\n onEndReached?: () => void;\n /**\n * Called after the `EncounteredError` player event\n */\n onEncounteredError?: (event: Error) => void;\n /**\n * Called after a `Dialog` needs to be displayed\n */\n onDialogDisplay?: (event: Dialog) => void;\n /**\n * Called after the `TimeChanged` player event\n */\n onTimeChanged?: (event: Time) => void;\n /**\n * Called after the `PositionChanged` player event\n */\n onPositionChanged?: (event: Position) => void;\n /**\n * Called after the `ESAdded` player event\n */\n onESAdded?: (event: MediaTracks) => void;\n /**\n * Called after the `RecordChanged` player event\n */\n onRecordChanged?: (event: Recording) => void;\n /**\n * Called after a media snapshot is taken\n */\n onSnapshotTaken?: (event: Snapshot) => void;\n /**\n * Called after the player first playing event\n */\n onFirstPlay?: (event: MediaInfo) => void;\n /**\n * Called after the player enters the foreground\n */\n onForeground?: () => void;\n /**\n * Called after the player enters the background\n */\n onBackground?: () => void;\n}\n"]}
1
+ {"version":3,"file":"LibVlcPlayer.types.js","sourceRoot":"","sources":["../src/LibVlcPlayer.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ViewProps } from \"react-native\";\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport type LibVlcPlayerModuleEvents = {};\n\nexport interface LibVlcPlayerViewRef {\n /**\n * Starts playback of the current player\n *\n * @returns A promise which resolves to `void`\n */\n readonly play: () => Promise<void>;\n /**\n * Pauses playback of the current player\n *\n * @returns A promise which resolves to `void`\n */\n readonly pause: () => Promise<void>;\n /**\n * Stops playback of the current player\n *\n * @returns A promise which resolves to `void`\n */\n readonly stop: () => Promise<void>;\n /**\n * Sets the time or position of the current player\n *\n * @param value - Must be a number equal or greater than `0`\n * @param type - Defaults to `\"time\"`\n *\n * @returns A promise which resolves to `void`\n */\n readonly seek: (value: number, type?: \"time\" | \"position\") => Promise<void>;\n /**\n * Starts or stops recording the current media\n *\n * @param path - Must be a valid path string or `undefined` to stop recording\n *\n * @returns A promise which resolves to `void`\n */\n readonly record: (path?: string) => Promise<void>;\n /**\n * Takes a snapshot of the current media\n *\n * @param path - Must be a valid path string\n *\n * @returns A promise which resolves to `void`\n */\n readonly snapshot: (path: string) => Promise<void>;\n /**\n * Posts an answer to a `Dialog`\n *\n * @param action - Must be an integer of `1` or `2`\n *\n * @returns A promise which resolves to `void`\n */\n readonly postAction: (action: 1 | 2) => Promise<void>;\n /**\n * Dismisses a `Dialog`\n *\n * @returns A promise which resolves to `void`\n */\n readonly dismiss: () => Promise<void>;\n}\n\nexport type LibVlcSource = string | number | null;\n\nexport interface Tracks {\n audio?: number;\n video?: number;\n subtitle?: number;\n}\n\nexport interface Slave {\n source: NonNullable<LibVlcSource>;\n type: \"audio\" | \"subtitle\";\n selected?: boolean;\n}\n\nexport type VideoAspectRatio = \"auto\" | string | number;\n\nexport type VideoContentFit = \"contain\" | \"cover\" | \"fill\";\n\nexport type AudioMixingMode =\n | \"mixWithOthers\"\n | \"duckOthers\"\n | \"auto\"\n | \"doNotMix\";\n\nexport interface NativeEventProps {\n target: number;\n}\n\nexport interface NativeEvent<T> {\n nativeEvent: T & NativeEventProps;\n}\n\nexport type LibVlcEvent<T> = Omit<T & NativeEventProps, \"target\">;\n\nexport interface Dialog {\n title: string;\n text: string;\n cancelText?: string;\n action1Text?: string;\n action2Text?: string;\n}\n\nexport interface Recording {\n path: string | null;\n isRecording: boolean;\n}\n\nexport interface Track {\n id: number;\n name: string;\n}\n\nexport interface MediaTracks {\n audio: Track[];\n video: Track[];\n subtitle: Track[];\n}\n\nexport interface MediaInfo {\n width: number;\n height: number;\n length: number;\n seekable: boolean;\n}\n\n/**\n * @hidden\n */\ntype BufferingListener = () => void;\n\n/**\n * @hidden\n */\ntype PlayingListener = () => void;\n\n/**\n * @hidden\n */\ntype PausedListener = () => void;\n\n/**\n * @hidden\n */\ntype StoppedListener = () => void;\n\nexport type Error = { error: string };\n\n/**\n * @hidden\n */\ntype EncounteredErrorListener = (event: NativeEvent<Error>) => void;\n\nexport type Time = { time: number };\n\n/**\n * @hidden\n */\ntype TimeChangedListener = (event: NativeEvent<Time>) => void;\n\nexport type Position = { position: number };\n\n/**\n * @hidden\n */\ntype PositionChangedListener = (event: NativeEvent<Position>) => void;\n\n/**\n * @hidden\n */\ntype ESAddedListener = (event: NativeEvent<MediaTracks>) => void;\n\n/**\n * @hidden\n */\ntype RecordChangedListener = (event: NativeEvent<Recording>) => void;\n\nexport type Snapshot = { path: string };\n\n/**\n * @hidden\n */\ntype SnapshotTakenListener = (event: NativeEvent<Snapshot>) => void;\n\n/**\n * @hidden\n */\ntype DialogDisplayListener = (event: NativeEvent<Dialog>) => void;\n\n/**\n * @hidden\n */\ntype FirstPlayListener = (event: NativeEvent<MediaInfo>) => void;\n\n/**\n * @hidden\n */\ntype ForegroundListener = () => void;\n\n/**\n * @hidden\n */\ntype BackgroundListener = () => void;\n\n/**\n * @hidden\n */\nexport interface LibVlcPlayerViewNativeProps extends ViewProps {\n ref?: React.Ref<LibVlcPlayerViewRef>;\n source?: LibVlcSource;\n options?: string[];\n tracks?: Tracks;\n slaves?: Slave[];\n scale?: number;\n aspectRatio?: VideoAspectRatio;\n contentFit?: VideoContentFit;\n rate?: number;\n time?: number;\n volume?: number;\n mute?: boolean;\n audioMixingMode?: AudioMixingMode;\n repeat?: boolean;\n autoplay?: boolean;\n onBuffering?: BufferingListener;\n onPlaying?: PlayingListener;\n onPaused?: PausedListener;\n onStopped?: StoppedListener;\n onEncounteredError?: EncounteredErrorListener;\n onDialogDisplay?: DialogDisplayListener;\n onTimeChanged?: TimeChangedListener;\n onPositionChanged?: PositionChangedListener;\n onESAdded?: ESAddedListener;\n onRecordChanged?: RecordChangedListener;\n onSnapshotTaken?: SnapshotTakenListener;\n onFirstPlay?: FirstPlayListener;\n onForeground?: ForegroundListener;\n onBackground?: BackgroundListener;\n}\n\nexport interface LibVlcPlayerViewProps extends ViewProps {\n /**\n * Sets the source of the media to be played. Set to `null` to release the player\n *\n * @example\n *\n * ```tsx\n * const BIG_BUCK_BUNNY =\n * \"https://download.blender.org/peach/bigbuckbunny_movies/big_buck_bunny_720p_h264.mov\";\n *\n * <LibVlcPlayerView source={BIG_BUCK_BUNNY} />\n * ```\n */\n source: LibVlcSource;\n /**\n * Sets the VLC options to initialize the player with\n *\n * https://wiki.videolan.org/VLC_command-line_help/\n *\n * @example\n *\n * ```tsx\n * const options = [\"--network-caching=1000\"];\n *\n * <LibVlcPlayerView\n * source={BIG_BUCK_BUNNY}\n * options={options}\n * />\n * ```\n *\n * @default []\n */\n options?: string[];\n /**\n * Sets the player audio, video and subtitle tracks\n *\n * @example\n *\n * ```tsx\n * const tracks = {\n * audio: 3,\n * video: 2,\n * subtitle: 1,\n * };\n *\n * <LibVlcPlayerView\n * source={BIG_BUCK_BUNNY}\n * tracks={tracks}\n * />\n * ```\n *\n * @default undefined\n */\n tracks?: Tracks;\n /**\n * Sets the player audio and subtitle slaves\n *\n * @example\n *\n * ```tsx\n * const subtitles = [{\n * source: \"file://path/to/subtitle.srt\",\n * type: \"subtitle\",\n * selected: true,\n * }];\n *\n * <LibVlcPlayerView\n * source={BIG_BUCK_BUNNY}\n * slaves={subtitles}\n * />\n * ```\n *\n * @default []\n */\n slaves?: Slave[];\n /**\n * Sets the player scaling factor. Must be a float equal or greater than `0`\n *\n * @default 0\n */\n scale?: number;\n /**\n * Sets the container aspect ratio. Must be a valid ratio string or number\n *\n * @example \"16:9\"\n *\n * @default undefined\n */\n aspectRatio?: VideoAspectRatio;\n /**\n * Sets how the video should be scaled to fit in the container\n *\n * @example \"cover\"\n *\n * @default \"contain\"\n */\n contentFit?: VideoContentFit;\n /**\n * Sets the player rate. Must be a float equal or greater than `1`\n *\n * @default 1\n */\n rate?: number;\n /**\n * Sets the initial player time. Must be an integer in milliseconds\n *\n * @default 0\n */\n time?: number;\n /**\n * Sets the player volume. Must be an integer between `0` and `100`\n *\n * @default 100\n */\n volume?: number;\n /**\n * Sets the player volume to `0` when `true`. Previous value is set when `false`\n *\n * @default false\n */\n mute?: boolean;\n /**\n * Determines how the player will interact with other audio playing in the system\n *\n * @example \"doNotMix\"\n *\n * @default \"auto\"\n */\n audioMixingMode?: AudioMixingMode;\n /**\n * Determines whether the media should repeat once ended\n *\n * @default false\n */\n repeat?: boolean;\n /**\n * Determines whether the media should autoplay once created\n *\n * @default true\n */\n autoplay?: boolean;\n /**\n * Called after the `Buffering` player event\n */\n onBuffering?: () => void;\n /**\n * Called after the `Playing` player event\n */\n onPlaying?: () => void;\n /**\n * Called after the `Paused` player event\n */\n onPaused?: () => void;\n /**\n * Called after the `Stopped` player event\n */\n onStopped?: () => void;\n /**\n * Called after the `EncounteredError` player event\n */\n onEncounteredError?: (event: Error) => void;\n /**\n * Called after a `Dialog` needs to be displayed\n */\n onDialogDisplay?: (event: Dialog) => void;\n /**\n * Called after the `TimeChanged` player event\n */\n onTimeChanged?: (event: Time) => void;\n /**\n * Called after the `PositionChanged` player event\n */\n onPositionChanged?: (event: Position) => void;\n /**\n * Called after the `ESAdded` player event\n */\n onESAdded?: (event: MediaTracks) => void;\n /**\n * Called after the `RecordChanged` player event\n */\n onRecordChanged?: (event: Recording) => void;\n /**\n * Called after a media snapshot is taken\n */\n onSnapshotTaken?: (event: Snapshot) => void;\n /**\n * Called after the player first playing event\n */\n onFirstPlay?: (event: MediaInfo) => void;\n /**\n * Called after the player enters the foreground\n */\n onForeground?: () => void;\n /**\n * Called after the player enters the background\n */\n onBackground?: () => void;\n}\n"]}
@@ -19,8 +19,7 @@ Pod::Spec.new do |s|
19
19
  s.static_framework = true
20
20
 
21
21
  s.dependency 'ExpoModulesCore'
22
- s.ios.dependency 'MobileVLCKit', '3.7.3'
23
- s.tvos.dependency 'TVVLCKit', '3.7.3'
22
+ s.dependency 'VLCKit', '4.0.0a18'
24
23
 
25
24
  # Swift/Objective-C compatibility
26
25
  s.pod_target_xcconfig = {
@@ -5,7 +5,6 @@ private let playerEvents = [
5
5
  "onPlaying",
6
6
  "onPaused",
7
7
  "onStopped",
8
- "onEndReached",
9
8
  "onEncounteredError",
10
9
  "onDialogDisplay",
11
10
  "onTimeChanged",
@@ -31,7 +30,7 @@ public class LibVlcPlayerModule: Module {
31
30
  }
32
31
 
33
32
  OnAppEntersForeground {
34
- MediaPlayerManager.shared.keepAwakeManager.activateKeepAwake()
33
+ MediaPlayerManager.shared.keepAwakeManager.toggleKeepAwake()
35
34
  MediaPlayerManager.shared.onModuleForeground()
36
35
  }
37
36
 
@@ -1,10 +1,6 @@
1
1
  import ExpoModulesCore
2
2
  import UIKit
3
- #if os(tvOS)
4
- import TVVLCKit
5
- #else
6
- import MobileVLCKit
7
- #endif
3
+ import VLCKit
8
4
 
9
5
  private let dialogCustomUI: Bool = true
10
6
 
@@ -26,7 +22,6 @@ class LibVlcPlayerView: ExpoView {
26
22
  let onPlaying = EventDispatcher()
27
23
  let onPaused = EventDispatcher()
28
24
  let onStopped = EventDispatcher()
29
- let onEndReached = EventDispatcher()
30
25
  let onEncounteredError = EventDispatcher()
31
26
  let onDialogDisplay = EventDispatcher()
32
27
  let onTimeChanged = EventDispatcher()
@@ -56,8 +51,8 @@ class LibVlcPlayerView: ExpoView {
56
51
 
57
52
  override var bounds: CGRect {
58
53
  didSet {
59
- playerView.transform = .identity
60
54
  playerView.frame = bounds
55
+ playerView.transform = .identity
61
56
  setContentFit()
62
57
  }
63
58
  }
@@ -105,18 +100,48 @@ class LibVlcPlayerView: ExpoView {
105
100
  vlcDialog = nil
106
101
  }
107
102
 
108
- func setPlayerTracks() {
103
+ func selectTrack(_ track: Int?, _ type: VLCMedia.TrackType) {
109
104
  if let player = mediaPlayer {
110
- let audioTrackIndex = tracks?.audio ?? Int(player.currentAudioTrackIndex)
111
- let videoTrackIndex = tracks?.video ?? Int(player.currentVideoTrackIndex)
112
- let videoSubTitleIndex = tracks?.subtitle ?? Int(player.currentVideoSubTitleIndex)
105
+ let tracks: [VLCMediaPlayer.Track]? = switch type {
106
+ case .audio:
107
+ player.audioTracks
108
+ case .video:
109
+ player.videoTracks
110
+ case .text:
111
+ player.textTracks
112
+ default:
113
+ nil
114
+ }
113
115
 
114
- player.currentAudioTrackIndex = Int32(audioTrackIndex)
115
- player.currentVideoTrackIndex = Int32(videoTrackIndex)
116
- player.currentVideoSubTitleIndex = Int32(videoSubTitleIndex)
116
+ let trackId = tracks?.first?.trackId
117
+ let firstId = trackId.map { id in (id as NSString).intValue }
118
+ let trackIndex = track ?? firstId.map { id in Int(id) }
119
+
120
+ if let index = trackIndex {
121
+ switch (type, index) {
122
+ case (.audio, -1):
123
+ player.deselectAllAudioTracks()
124
+ case (.video, -1):
125
+ player.deselectAllVideoTracks()
126
+ case (.text, -1):
127
+ player.deselectAllTextTracks()
128
+ default:
129
+ player.selectTrack(at: index, type: type)
130
+ }
131
+ }
117
132
  }
118
133
  }
119
134
 
135
+ func setPlayerTracks() {
136
+ let audioTrack = tracks?.audio
137
+ let videoTrack = tracks?.video
138
+ let textTrack = tracks?.subtitle
139
+
140
+ selectTrack(audioTrack, .audio)
141
+ selectTrack(videoTrack, .video)
142
+ selectTrack(textTrack, .text)
143
+ }
144
+
120
145
  func addPlayerSlaves() {
121
146
  for slave in slaves {
122
147
  let source = slave.source
@@ -136,18 +161,18 @@ class LibVlcPlayerView: ExpoView {
136
161
  }
137
162
 
138
163
  func setContentFit() {
139
- DispatchQueue.main.async {
140
- let view = self.playerView
164
+ DispatchQueue.main.async { [self] in
165
+ let view = playerView
141
166
  var transform: CGAffineTransform = .identity
142
167
 
143
- if let player = self.mediaPlayer {
168
+ if let player = mediaPlayer {
144
169
  let video = player.videoSize
145
170
 
146
- if self.hasVideoSize() {
171
+ if hasVideoSize() {
147
172
  let viewAspect = view.frame.size.width / view.frame.size.height
148
173
  let videoAspect = video.width / video.height
149
174
 
150
- switch self.contentFit {
175
+ switch contentFit {
151
176
  case .contain:
152
177
  // No transform required
153
178
  break
@@ -226,35 +251,32 @@ class LibVlcPlayerView: ExpoView {
226
251
  if let player = mediaPlayer {
227
252
  var audioTracks: [Track] = []
228
253
 
229
- if let audios = player.audioTrackNames as? [String] {
230
- if let audioIndexes = player.audioTrackIndexes as? [NSNumber] {
231
- for (index, trackName) in zip(audioIndexes, audios) {
232
- let track = Track(id: index.intValue, name: trackName)
233
- audioTracks.append(track)
234
- }
235
- }
254
+ let audios = player.audioTracks
255
+
256
+ audioTracks = audios.map { audio in
257
+ let id = (audio.trackId as NSString).intValue
258
+ let name = audio.trackName
259
+ return Track(id: Int(id), name: name)
236
260
  }
237
261
 
238
262
  var videoTracks: [Track] = []
239
263
 
240
- if let videos = player.videoTrackNames as? [String] {
241
- if let videoIndexes = player.videoTrackIndexes as? [NSNumber] {
242
- for (index, trackName) in zip(videoIndexes, videos) {
243
- let track = Track(id: index.intValue, name: trackName)
244
- videoTracks.append(track)
245
- }
246
- }
264
+ let videos = player.videoTracks
265
+
266
+ videoTracks = videos.map { video in
267
+ let id = (video.trackId as NSString).intValue
268
+ let name = video.trackName
269
+ return Track(id: Int(id), name: name)
247
270
  }
248
271
 
249
272
  var subtitleTracks: [Track] = []
250
273
 
251
- if let subtitles = player.videoSubTitlesNames as? [String] {
252
- if let subtitleIndexes = player.videoSubTitlesIndexes as? [NSNumber] {
253
- for (index, trackName) in zip(subtitleIndexes, subtitles) {
254
- let track = Track(id: index.intValue, name: trackName)
255
- subtitleTracks.append(track)
256
- }
257
- }
274
+ let subtitles = player.textTracks
275
+
276
+ subtitleTracks = subtitles.map { subtitle in
277
+ let id = (subtitle.trackId as NSString).intValue
278
+ let name = subtitle.trackName
279
+ return Track(id: Int(id), name: name)
258
280
  }
259
281
 
260
282
  mediaTracks = MediaTracks(
@@ -290,8 +312,8 @@ class LibVlcPlayerView: ExpoView {
290
312
  let tracks = getMediaTracks()
291
313
  let length = getMediaLength()
292
314
 
293
- let hasAudio = tracks.audio.contains { track in track.id != -1 }
294
- let hasVideo = tracks.video.contains { track in track.id != -1 }
315
+ let hasAudio = tracks.audio.count > 0
316
+ let hasVideo = tracks.video.count > 0
295
317
 
296
318
  let hasAudioOnly = hasAudio && !hasVideo && length > 0
297
319
  let hasAudioAndVideo = hasAudio && hasVideo && hasVideoSize() && length > 0
@@ -409,7 +431,7 @@ class LibVlcPlayerView: ExpoView {
409
431
  if let player = mediaPlayer {
410
432
  if player.isSeekable {
411
433
  if type == "position" {
412
- player.position = Float(value)
434
+ player.position = value
413
435
  } else {
414
436
  player.time = VLCTime(int: Int32(value))
415
437
  }
@@ -426,17 +448,12 @@ class LibVlcPlayerView: ExpoView {
426
448
  func record(_ path: String?) {
427
449
  if let player = mediaPlayer {
428
450
  if let path {
429
- // https://code.videolan.org/videolan/VLCKit/-/issues/394
430
- let success = !player.startRecording(atPath: path)
431
-
432
- if !success {
433
- onEncounteredError(["error": "Media could not be recorded"])
434
-
435
- player.stopRecording()
436
- }
451
+ player.startRecording(atPath: path)
437
452
  } else {
438
453
  player.stopRecording()
439
454
  }
455
+ } else {
456
+ onEncounteredError(["error": "Media could not be recorded"])
440
457
  }
441
458
  }
442
459
 
@@ -495,23 +512,23 @@ class LibVlcPlayerView: ExpoView {
495
512
  }
496
513
 
497
514
  extension LibVlcPlayerView: VLCMediaPlayerDelegate {
498
- func mediaPlayerStateChanged(_: Notification) {
515
+ func mediaPlayerStateChanged(_ newState: VLCMediaPlayerState) {
499
516
  if let player = mediaPlayer {
500
- switch player.state {
517
+ switch newState {
501
518
  case .buffering:
502
519
  onBuffering()
503
520
  case .playing:
504
521
  onPlaying()
505
522
 
506
523
  if firstPlay {
507
- retryUntil {
508
- self.onFirstPlay(self.getMediaInfo())
509
- return self.hasAudioVideo()
524
+ retryUntil { [self] in
525
+ onFirstPlay(getMediaInfo())
526
+ return hasAudioVideo()
510
527
  }
511
528
 
512
- retryUntil {
513
- self.setContentFit()
514
- return self.hasVideoSize()
529
+ retryUntil { [self] in
530
+ setContentFit()
531
+ return hasVideoSize()
515
532
  }
516
533
 
517
534
  setupPlayer()
@@ -519,10 +536,10 @@ extension LibVlcPlayerView: VLCMediaPlayerDelegate {
519
536
  firstPlay = false
520
537
  }
521
538
 
522
- MediaPlayerManager.shared.keepAwakeManager.activateKeepAwake()
539
+ MediaPlayerManager.shared.keepAwakeManager.toggleKeepAwake()
523
540
 
524
541
  retryUntil {
525
- let volume = Int(player.audio?.volume ?? Int32(MediaPlayerConstants.minPlayerVolume))
542
+ let volume = player.audio?.volume ?? Int32(MediaPlayerConstants.minPlayerVolume)
526
543
  let hasVolume = volume > MediaPlayerConstants.minPlayerVolume
527
544
  MediaPlayerManager.shared.audioSessionManager.setAppropriateAudioSession()
528
545
  return hasVolume
@@ -530,27 +547,21 @@ extension LibVlcPlayerView: VLCMediaPlayerDelegate {
530
547
  case .paused:
531
548
  onPaused()
532
549
 
533
- MediaPlayerManager.shared.keepAwakeManager.deactivateKeepAwake()
550
+ MediaPlayerManager.shared.keepAwakeManager.toggleKeepAwake()
534
551
  MediaPlayerManager.shared.audioSessionManager.setAppropriateAudioSession()
535
552
  case .stopped:
536
553
  onStopped()
537
554
 
538
- MediaPlayerManager.shared.keepAwakeManager.deactivateKeepAwake()
539
- MediaPlayerManager.shared.audioSessionManager.setAppropriateAudioSession()
540
- case .ended:
541
- onEndReached()
542
-
543
- player.stop()
544
-
545
555
  if shouldRepeat {
546
556
  player.play()
547
557
  }
558
+
559
+ MediaPlayerManager.shared.keepAwakeManager.toggleKeepAwake()
560
+ MediaPlayerManager.shared.audioSessionManager.setAppropriateAudioSession()
548
561
  case .error:
549
562
  onEncounteredError(["error": "Player encountered an error"])
550
563
 
551
564
  player.stop()
552
- case .esAdded:
553
- onESAdded(getMediaTracks())
554
565
  default:
555
566
  break
556
567
  }
@@ -565,6 +576,10 @@ extension LibVlcPlayerView: VLCMediaPlayerDelegate {
565
576
  }
566
577
  }
567
578
 
579
+ func mediaPlayerTrackAdded(_: String, with _: VLCMedia.TrackType) {
580
+ onESAdded(getMediaTracks())
581
+ }
582
+
568
583
  func mediaPlayerStartedRecording(_: VLCMediaPlayer) {
569
584
  let recording = Recording(
570
585
  path: nil,
@@ -574,7 +589,7 @@ extension LibVlcPlayerView: VLCMediaPlayerDelegate {
574
589
  onRecordChanged(recording)
575
590
  }
576
591
 
577
- func mediaPlayer(_: VLCMediaPlayer, recordingStoppedAtPath path: String) {
592
+ func mediaPlayer(recordingStoppedAt path: String) {
578
593
  let recording = Recording(
579
594
  path: path,
580
595
  isRecording: false,
@@ -7,6 +7,8 @@ class AudioSessionManager {
7
7
 
8
8
  private static let managerQueue = DispatchQueue(label: "audioManagerQueue")
9
9
 
10
+ private lazy var playerViews = MediaPlayerManager.shared.playerViews
11
+
10
12
  func setAppropriateAudioSession() {
11
13
  Self.managerQueue.async { [weak self] in
12
14
  self?.setAudioSession()
@@ -18,7 +20,7 @@ class AudioSessionManager {
18
20
  let audioMixingMode = findAudioMixingMode()
19
21
  var audioSessionCategoryOptions: AVAudioSession.CategoryOptions = audioSession.categoryOptions
20
22
 
21
- let isOutputtingAudio = MediaPlayerManager.shared.playerViews.allObjects.contains { view in
23
+ let isOutputtingAudio = playerViews.allObjects.contains { view in
22
24
  if let player = view.mediaPlayer, let audio = player.audio {
23
25
  player.isPlaying && audio.volume > MediaPlayerConstants.minPlayerVolume
24
26
  } else {
@@ -62,7 +64,7 @@ class AudioSessionManager {
62
64
  }
63
65
 
64
66
  private func findAudioMixingMode() -> AudioMixingMode? {
65
- let playingViews = MediaPlayerManager.shared.playerViews.allObjects.filter { view in
67
+ let playingViews = playerViews.allObjects.filter { view in
66
68
  view.mediaPlayer?.isPlaying == true
67
69
  }
68
70
 
@@ -72,8 +74,8 @@ class AudioSessionManager {
72
74
  return nil
73
75
  }
74
76
 
75
- for playerView in playingViews where (audioMixingMode.priority()) < playerView.audioMixingMode.priority() {
76
- audioMixingMode = playerView.audioMixingMode
77
+ for view in playingViews where (audioMixingMode.priority()) < view.audioMixingMode.priority() {
78
+ audioMixingMode = view.audioMixingMode
77
79
  }
78
80
 
79
81
  return audioMixingMode
@@ -1,6 +1,10 @@
1
1
  class KeepAwakeManager {
2
2
  static let shared = KeepAwakeManager()
3
3
 
4
+ private lazy var anyPlayingView = MediaPlayerManager.shared.playerViews.allObjects.contains { view in
5
+ view.mediaPlayer?.isPlaying == true
6
+ }
7
+
4
8
  func activateKeepAwake() {
5
9
  DispatchQueue.main.async {
6
10
  UIApplication.shared.isIdleTimerDisabled = true
@@ -12,4 +16,12 @@ class KeepAwakeManager {
12
16
  UIApplication.shared.isIdleTimerDisabled = false
13
17
  }
14
18
  }
19
+
20
+ func toggleKeepAwake() {
21
+ if anyPlayingView {
22
+ activateKeepAwake()
23
+ } else {
24
+ deactivateKeepAwake()
25
+ }
26
+ }
15
27
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "expo-libvlc-player",
3
- "version": "5.0.3",
3
+ "version": "6.0.0",
4
4
  "description": "LibVLC Player for Expo",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -148,11 +148,6 @@ type PausedListener = () => void;
148
148
  */
149
149
  type StoppedListener = () => void;
150
150
 
151
- /**
152
- * @hidden
153
- */
154
- type EndReachedListener = () => void;
155
-
156
151
  export type Error = { error: string };
157
152
 
158
153
  /**
@@ -234,7 +229,6 @@ export interface LibVlcPlayerViewNativeProps extends ViewProps {
234
229
  onPlaying?: PlayingListener;
235
230
  onPaused?: PausedListener;
236
231
  onStopped?: StoppedListener;
237
- onEndReached?: EndReachedListener;
238
232
  onEncounteredError?: EncounteredErrorListener;
239
233
  onDialogDisplay?: DialogDisplayListener;
240
234
  onTimeChanged?: TimeChangedListener;
@@ -404,10 +398,6 @@ export interface LibVlcPlayerViewProps extends ViewProps {
404
398
  * Called after the `Stopped` player event
405
399
  */
406
400
  onStopped?: () => void;
407
- /**
408
- * Called after the `EndReached` player event
409
- */
410
- onEndReached?: () => void;
411
401
  /**
412
402
  * Called after the `EncounteredError` player event
413
403
  */