expo-libvlc-player 7.0.2 → 7.0.3

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.
@@ -174,14 +174,11 @@ class LibVlcPlayerView(
174
174
  }
175
175
 
176
176
  fun createPlayer() {
177
- var args = options
178
- args.toggleStartPausedOption(autoplay)
179
-
180
177
  if (pictureInPicture) {
181
178
  MediaPlayerManager.pictureInPictureManager.setupPipView(this)
182
179
  }
183
180
 
184
- libVLC = LibVLC(context, args)
181
+ libVLC = LibVLC(context)
185
182
  setDialogCallbacks(libVLC!!)
186
183
 
187
184
  mediaPlayer = MediaPlayer(libVLC!!)
@@ -196,7 +193,12 @@ class LibVlcPlayerView(
196
193
  return
197
194
  }
198
195
 
196
+ var args = options
197
+ args.normalizeOptions()
198
+ args.toggleStartPausedOption(autoplay)
199
+
199
200
  val media = Media(libVLC!!, Uri.parse(source!!))
201
+ args.forEach { arg -> media!!.addOption(arg) }
200
202
  mediaPlayer!!.setMedia(media)
201
203
  media.release()
202
204
  mediaPlayer!!.play()
@@ -216,26 +218,10 @@ class LibVlcPlayerView(
216
218
  }
217
219
 
218
220
  fun selectTrack(
219
- trackId: Int?,
221
+ index: Int,
220
222
  type: Int,
221
223
  ) {
222
224
  mediaPlayer?.let { player ->
223
- val tracks =
224
- when (type) {
225
- IMedia.Track.Type.Audio -> player.getAudioTracks()
226
- IMedia.Track.Type.Video -> player.getVideoTracks()
227
- IMedia.Track.Type.Text -> player.getSpuTracks()
228
- else -> null
229
- }
230
-
231
- if (tracks == null) return
232
-
233
- val firstTrack = tracks.firstOrNull { track -> track.id != -1 }
234
- val firstTrackId = firstTrack?.id
235
- val index = trackId ?: firstTrackId
236
-
237
- if (index == null) return
238
-
239
225
  when (type) {
240
226
  IMedia.Track.Type.Audio -> {
241
227
  player.setAudioTrack(index)
@@ -257,9 +243,9 @@ class LibVlcPlayerView(
257
243
  val videoTrack = tracks?.video
258
244
  val spuTrack = tracks?.subtitle
259
245
 
260
- selectTrack(audioTrack, IMedia.Track.Type.Audio)
261
- selectTrack(videoTrack, IMedia.Track.Type.Video)
262
- selectTrack(spuTrack, IMedia.Track.Type.Text)
246
+ audioTrack?.let { audioTrack -> selectTrack(audioTrack, IMedia.Track.Type.Audio) }
247
+ videoTrack?.let { videoTrack -> selectTrack(videoTrack, IMedia.Track.Type.Video) }
248
+ spuTrack?.let { spuTrack -> selectTrack(spuTrack, IMedia.Track.Type.Text) }
263
249
  }
264
250
 
265
251
  fun addPlayerSlaves(slaves: List<Slave>) {
@@ -914,16 +900,25 @@ fun LibVlcPlayerView.setDialogCallbacks(ILibVLC: LibVLC?) {
914
900
  }
915
901
  }
916
902
 
917
- private fun MutableList<String>.toggleStartPausedOption(autoplay: Boolean) {
918
- val options =
919
- setOf(
920
- "--start-paused",
921
- ":start-paused",
922
- )
903
+ private fun MutableList<String>.normalizeOptions() {
904
+ val normalized =
905
+ map { option ->
906
+ if (!option.startsWith(":")) {
907
+ ":" + option.dropWhile { character -> character == '-' }
908
+ } else {
909
+ option
910
+ }
911
+ }
923
912
 
924
- removeAll { option -> option in options }
913
+ for (i in indices) {
914
+ this[i] = normalized[i]
915
+ }
916
+ }
917
+
918
+ private fun MutableList<String>.toggleStartPausedOption(autoplay: Boolean) {
919
+ val hasOption = contains(":start-paused")
925
920
 
926
- if (!autoplay) {
927
- add("--start-paused")
921
+ if (!autoplay && !hasOption) {
922
+ add(":start-paused")
928
923
  }
929
924
  }
@@ -8,6 +8,7 @@ class LibVlcPlayerView: ExpoView {
8
8
  private let playerDrawable: MediaPlayerDrawable = .init()
9
9
  private var pictureDrawable: PictureInPictureDrawable!
10
10
 
11
+ var library: VLCLibrary?
11
12
  var mediaPlayer: VLCMediaPlayer?
12
13
  var vlcDialog: VLCDialogProvider?
13
14
  var vlcDialogRef: NSValue?
@@ -72,10 +73,6 @@ class LibVlcPlayerView: ExpoView {
72
73
  }
73
74
 
74
75
  func createPlayer() {
75
- var args = options
76
- args.toggleStartPausedOption(autoplay)
77
-
78
- let library = VLCLibrary(options: args)
79
76
  var drawable: MediaPlayerDrawable
80
77
 
81
78
  if pictureInPicture {
@@ -86,12 +83,13 @@ class LibVlcPlayerView: ExpoView {
86
83
  drawable = playerDrawable
87
84
  }
88
85
 
89
- mediaPlayer = VLCMediaPlayer(library: library)
86
+ library = VLCLibrary()
87
+ mediaPlayer = VLCMediaPlayer(library: library!)
90
88
  mediaPlayer!.drawable = drawable
91
89
  mediaPlayer!.delegate = self
92
90
  setupPlayer()
93
91
 
94
- vlcDialog = VLCDialogProvider(library: library, customUI: dialogCustomUI)
92
+ vlcDialog = VLCDialogProvider(library: library!, customUI: dialogCustomUI)
95
93
  vlcDialog!.customRenderer = self
96
94
 
97
95
  guard let source, let url = URL(string: source) else {
@@ -99,7 +97,13 @@ class LibVlcPlayerView: ExpoView {
99
97
  return
100
98
  }
101
99
 
102
- mediaPlayer!.media = VLCMedia(url: url)
100
+ var args = options
101
+ args.normalizeOptions()
102
+ args.toggleStartPausedOption(autoplay)
103
+
104
+ let media = VLCMedia(url: url)
105
+ args.forEach { arg in media!.addOption(arg) }
106
+ mediaPlayer!.media = media
103
107
  mediaPlayer!.play()
104
108
 
105
109
  firstPlay = true
@@ -109,41 +113,25 @@ class LibVlcPlayerView: ExpoView {
109
113
  }
110
114
 
111
115
  func destroyPlayer() {
116
+ library = nil
112
117
  mediaPlayer?.stop()
113
118
  mediaPlayer = nil
114
119
  vlcDialog?.customRenderer = nil
115
120
  vlcDialog = nil
116
121
  }
117
122
 
118
- func selectTrack(_ trackId: Int?, _ type: VLCMedia.TrackType) {
123
+ func selectTrack(_ index: Int, _ type: VLCMedia.TrackType) {
119
124
  if let player = mediaPlayer {
120
- if trackId == -1 {
125
+ if index == -1 {
121
126
  switch type {
122
127
  case .audio: player.deselectAllAudioTracks()
123
128
  case .video: player.deselectAllVideoTracks()
124
129
  case .text: player.deselectAllTextTracks()
125
130
  default: break
126
131
  }
127
- return
128
- }
129
-
130
- let tracks: [VLCMediaPlayer.Track]? = switch type {
131
- case .audio: player.audioTracks
132
- case .video: player.videoTracks
133
- case .text: player.textTracks
134
- default: nil
132
+ } else {
133
+ player.selectTrack(at: index, type: type)
135
134
  }
136
-
137
- guard let tracks else { return }
138
-
139
- let firstTrack = tracks.first?.trackId
140
- let firstTrackInt = firstTrack.map { id in (id as NSString).intValue }
141
- let firstTrackId = firstTrackInt.map { id in Int(id) }
142
- let index = trackId ?? firstTrackId
143
-
144
- guard let index else { return }
145
-
146
- player.selectTrack(at: index, type: type)
147
135
  }
148
136
  }
149
137
 
@@ -152,9 +140,9 @@ class LibVlcPlayerView: ExpoView {
152
140
  let videoTrack = tracks?.video
153
141
  let textTrack = tracks?.subtitle
154
142
 
155
- selectTrack(audioTrack, .audio)
156
- selectTrack(videoTrack, .video)
157
- selectTrack(textTrack, .text)
143
+ if let audioTrack { selectTrack(audioTrack, .audio) }
144
+ if let videoTrack { selectTrack(videoTrack, .video) }
145
+ if let textTrack { selectTrack(textTrack, .text) }
158
146
  }
159
147
 
160
148
  func addPlayerSlaves(_ slaves: [Slave]) {
@@ -770,16 +758,23 @@ extension LibVlcPlayerView: VLCCustomDialogRendererProtocol {
770
758
  }
771
759
 
772
760
  private extension [String] {
773
- mutating func toggleStartPausedOption(_ autoplay: Bool) {
774
- let options = [
775
- "--start-paused",
776
- ":start-paused",
777
- ]
761
+ mutating func normalizeOptions() {
762
+ self = map { option in
763
+ if !option.hasPrefix(":") {
764
+ ":" + option.drop { character in character == "-" }
765
+ } else {
766
+ option
767
+ }
768
+ }
769
+ }
770
+ }
778
771
 
779
- removeAll { option in options.contains(option) }
772
+ private extension [String] {
773
+ mutating func toggleStartPausedOption(_ autoplay: Bool) {
774
+ let hasOption = self.contains(":start-paused")
780
775
 
781
- if !autoplay {
782
- append("--start-paused")
776
+ if !autoplay, !hasOption {
777
+ append(":start-paused")
783
778
  }
784
779
  }
785
780
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "expo-libvlc-player",
3
- "version": "7.0.2",
3
+ "version": "7.0.3",
4
4
  "description": "LibVLC Player for Expo",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",