expo-video 3.0.12-canary-20251008-f2d1b4a → 3.0.12-canary-20251013-623c5a6

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.
Files changed (40) hide show
  1. package/CHANGELOG.md +1 -0
  2. package/android/build.gradle +2 -2
  3. package/expo-module.config.json +1 -1
  4. package/ios/VideoPlayer.swift +3 -2
  5. package/ios/VideoPlayerItem.swift +4 -0
  6. package/ios/VideoPlayerObserver.swift +25 -7
  7. package/local-maven-repo/host/exp/exponent/expo.modules.video/{3.0.12-canary-20251008-f2d1b4a/expo.modules.video-3.0.12-canary-20251008-f2d1b4a.module → 3.0.12-canary-20251013-623c5a6/expo.modules.video-3.0.12-canary-20251013-623c5a6.module} +7 -7
  8. package/local-maven-repo/host/exp/exponent/expo.modules.video/3.0.12-canary-20251013-623c5a6/expo.modules.video-3.0.12-canary-20251013-623c5a6.module.md5 +1 -0
  9. package/local-maven-repo/host/exp/exponent/expo.modules.video/3.0.12-canary-20251013-623c5a6/expo.modules.video-3.0.12-canary-20251013-623c5a6.module.sha1 +1 -0
  10. package/local-maven-repo/host/exp/exponent/expo.modules.video/3.0.12-canary-20251013-623c5a6/expo.modules.video-3.0.12-canary-20251013-623c5a6.module.sha256 +1 -0
  11. package/local-maven-repo/host/exp/exponent/expo.modules.video/3.0.12-canary-20251013-623c5a6/expo.modules.video-3.0.12-canary-20251013-623c5a6.module.sha512 +1 -0
  12. package/local-maven-repo/host/exp/exponent/expo.modules.video/{3.0.12-canary-20251008-f2d1b4a/expo.modules.video-3.0.12-canary-20251008-f2d1b4a.pom → 3.0.12-canary-20251013-623c5a6/expo.modules.video-3.0.12-canary-20251013-623c5a6.pom} +1 -1
  13. package/local-maven-repo/host/exp/exponent/expo.modules.video/3.0.12-canary-20251013-623c5a6/expo.modules.video-3.0.12-canary-20251013-623c5a6.pom.md5 +1 -0
  14. package/local-maven-repo/host/exp/exponent/expo.modules.video/3.0.12-canary-20251013-623c5a6/expo.modules.video-3.0.12-canary-20251013-623c5a6.pom.sha1 +1 -0
  15. package/local-maven-repo/host/exp/exponent/expo.modules.video/3.0.12-canary-20251013-623c5a6/expo.modules.video-3.0.12-canary-20251013-623c5a6.pom.sha256 +1 -0
  16. package/local-maven-repo/host/exp/exponent/expo.modules.video/3.0.12-canary-20251013-623c5a6/expo.modules.video-3.0.12-canary-20251013-623c5a6.pom.sha512 +1 -0
  17. package/local-maven-repo/host/exp/exponent/expo.modules.video/maven-metadata.xml +4 -4
  18. package/local-maven-repo/host/exp/exponent/expo.modules.video/maven-metadata.xml.md5 +1 -1
  19. package/local-maven-repo/host/exp/exponent/expo.modules.video/maven-metadata.xml.sha1 +1 -1
  20. package/local-maven-repo/host/exp/exponent/expo.modules.video/maven-metadata.xml.sha256 +1 -1
  21. package/local-maven-repo/host/exp/exponent/expo.modules.video/maven-metadata.xml.sha512 +1 -1
  22. package/package.json +3 -3
  23. package/local-maven-repo/host/exp/exponent/expo.modules.video/3.0.12-canary-20251008-f2d1b4a/expo.modules.video-3.0.12-canary-20251008-f2d1b4a.module.md5 +0 -1
  24. package/local-maven-repo/host/exp/exponent/expo.modules.video/3.0.12-canary-20251008-f2d1b4a/expo.modules.video-3.0.12-canary-20251008-f2d1b4a.module.sha1 +0 -1
  25. package/local-maven-repo/host/exp/exponent/expo.modules.video/3.0.12-canary-20251008-f2d1b4a/expo.modules.video-3.0.12-canary-20251008-f2d1b4a.module.sha256 +0 -1
  26. package/local-maven-repo/host/exp/exponent/expo.modules.video/3.0.12-canary-20251008-f2d1b4a/expo.modules.video-3.0.12-canary-20251008-f2d1b4a.module.sha512 +0 -1
  27. package/local-maven-repo/host/exp/exponent/expo.modules.video/3.0.12-canary-20251008-f2d1b4a/expo.modules.video-3.0.12-canary-20251008-f2d1b4a.pom.md5 +0 -1
  28. package/local-maven-repo/host/exp/exponent/expo.modules.video/3.0.12-canary-20251008-f2d1b4a/expo.modules.video-3.0.12-canary-20251008-f2d1b4a.pom.sha1 +0 -1
  29. package/local-maven-repo/host/exp/exponent/expo.modules.video/3.0.12-canary-20251008-f2d1b4a/expo.modules.video-3.0.12-canary-20251008-f2d1b4a.pom.sha256 +0 -1
  30. package/local-maven-repo/host/exp/exponent/expo.modules.video/3.0.12-canary-20251008-f2d1b4a/expo.modules.video-3.0.12-canary-20251008-f2d1b4a.pom.sha512 +0 -1
  31. /package/local-maven-repo/host/exp/exponent/expo.modules.video/{3.0.12-canary-20251008-f2d1b4a/expo.modules.video-3.0.12-canary-20251008-f2d1b4a-sources.jar → 3.0.12-canary-20251013-623c5a6/expo.modules.video-3.0.12-canary-20251013-623c5a6-sources.jar} +0 -0
  32. /package/local-maven-repo/host/exp/exponent/expo.modules.video/{3.0.12-canary-20251008-f2d1b4a/expo.modules.video-3.0.12-canary-20251008-f2d1b4a-sources.jar.md5 → 3.0.12-canary-20251013-623c5a6/expo.modules.video-3.0.12-canary-20251013-623c5a6-sources.jar.md5} +0 -0
  33. /package/local-maven-repo/host/exp/exponent/expo.modules.video/{3.0.12-canary-20251008-f2d1b4a/expo.modules.video-3.0.12-canary-20251008-f2d1b4a-sources.jar.sha1 → 3.0.12-canary-20251013-623c5a6/expo.modules.video-3.0.12-canary-20251013-623c5a6-sources.jar.sha1} +0 -0
  34. /package/local-maven-repo/host/exp/exponent/expo.modules.video/{3.0.12-canary-20251008-f2d1b4a/expo.modules.video-3.0.12-canary-20251008-f2d1b4a-sources.jar.sha256 → 3.0.12-canary-20251013-623c5a6/expo.modules.video-3.0.12-canary-20251013-623c5a6-sources.jar.sha256} +0 -0
  35. /package/local-maven-repo/host/exp/exponent/expo.modules.video/{3.0.12-canary-20251008-f2d1b4a/expo.modules.video-3.0.12-canary-20251008-f2d1b4a-sources.jar.sha512 → 3.0.12-canary-20251013-623c5a6/expo.modules.video-3.0.12-canary-20251013-623c5a6-sources.jar.sha512} +0 -0
  36. /package/local-maven-repo/host/exp/exponent/expo.modules.video/{3.0.12-canary-20251008-f2d1b4a/expo.modules.video-3.0.12-canary-20251008-f2d1b4a.aar → 3.0.12-canary-20251013-623c5a6/expo.modules.video-3.0.12-canary-20251013-623c5a6.aar} +0 -0
  37. /package/local-maven-repo/host/exp/exponent/expo.modules.video/{3.0.12-canary-20251008-f2d1b4a/expo.modules.video-3.0.12-canary-20251008-f2d1b4a.aar.md5 → 3.0.12-canary-20251013-623c5a6/expo.modules.video-3.0.12-canary-20251013-623c5a6.aar.md5} +0 -0
  38. /package/local-maven-repo/host/exp/exponent/expo.modules.video/{3.0.12-canary-20251008-f2d1b4a/expo.modules.video-3.0.12-canary-20251008-f2d1b4a.aar.sha1 → 3.0.12-canary-20251013-623c5a6/expo.modules.video-3.0.12-canary-20251013-623c5a6.aar.sha1} +0 -0
  39. /package/local-maven-repo/host/exp/exponent/expo.modules.video/{3.0.12-canary-20251008-f2d1b4a/expo.modules.video-3.0.12-canary-20251008-f2d1b4a.aar.sha256 → 3.0.12-canary-20251013-623c5a6/expo.modules.video-3.0.12-canary-20251013-623c5a6.aar.sha256} +0 -0
  40. /package/local-maven-repo/host/exp/exponent/expo.modules.video/{3.0.12-canary-20251008-f2d1b4a/expo.modules.video-3.0.12-canary-20251008-f2d1b4a.aar.sha512 → 3.0.12-canary-20251013-623c5a6/expo.modules.video-3.0.12-canary-20251013-623c5a6.aar.sha512} +0 -0
package/CHANGELOG.md CHANGED
@@ -9,6 +9,7 @@
9
9
  ### 🐛 Bug fixes
10
10
 
11
11
  - Fix `FOREGROUND_SERVICE_MEDIA_PLAYBACK` being always present in the manifest. ([#40074](https://github.com/expo/expo/pull/40074) by [@behenate](https://github.com/behenate))
12
+ - [iOS] Fix crashes when rapidly replacing HLS sources. ([#40265](https://github.com/expo/expo/pull/40265) by [@behenate](https://github.com/behenate))
12
13
 
13
14
  ### 💡 Others
14
15
 
@@ -4,13 +4,13 @@ plugins {
4
4
  }
5
5
 
6
6
  group = 'host.exp.exponent'
7
- version = '3.0.12-canary-20251008-f2d1b4a'
7
+ version = '3.0.12-canary-20251013-623c5a6'
8
8
 
9
9
  android {
10
10
  namespace "expo.modules.video"
11
11
  defaultConfig {
12
12
  versionCode 1
13
- versionName '3.0.12-canary-20251008-f2d1b4a'
13
+ versionName '3.0.12-canary-20251013-623c5a6'
14
14
  }
15
15
  }
16
16
 
@@ -8,7 +8,7 @@
8
8
  "publication": {
9
9
  "groupId": "host.exp.exponent",
10
10
  "artifactId": "expo.modules.video",
11
- "version": "3.0.12-canary-20251008-f2d1b4a",
11
+ "version": "3.0.12-canary-20251013-623c5a6",
12
12
  "repository": "local-maven-repo"
13
13
  }
14
14
  }
@@ -268,9 +268,10 @@ internal final class VideoPlayer: SharedRef<AVPlayer>, Hashable, VideoPlayerObse
268
268
  }
269
269
 
270
270
  private func clearCurrentItem() {
271
- DispatchQueue.main.async { [ref, videoSourceLoader, dangerousPropertiesStore] in
271
+ videoSourceLoader.cancelCurrentTask()
272
+
273
+ DispatchQueue.main.async { [ref, dangerousPropertiesStore] in
272
274
  ref.replaceCurrentItem(with: nil)
273
- videoSourceLoader.cancelCurrentTask()
274
275
  dangerousPropertiesStore.reset()
275
276
  dangerousPropertiesStore.ownerIsReplacing = false
276
277
  }
@@ -49,6 +49,10 @@ class VideoPlayerItem: AVPlayerItem {
49
49
  self.createTracksLoadingTask()
50
50
  }
51
51
 
52
+ deinit {
53
+ tracksLoadingTask?.cancel()
54
+ }
55
+
52
56
  func createTracksLoadingTask() {
53
57
  tracksLoadingTask = Task { [weak self] in
54
58
  var tracks: [VideoTrack] = []
@@ -157,6 +157,8 @@ class VideoPlayerObserver: VideoSourceLoaderListener {
157
157
  private var currentSubtitlesObserver: NSObjectProtocol?
158
158
  private var currentAudioTracksObserver: NSObjectProtocol?
159
159
 
160
+ private var videoTrackUpdateTask: Task<Void, Never>?
161
+
160
162
  init(owner: VideoPlayer, videoSourceLoader: VideoSourceLoader) {
161
163
  self.owner = owner
162
164
  self.videoSourceLoader = videoSourceLoader
@@ -239,24 +241,36 @@ class VideoPlayerObserver: VideoSourceLoaderListener {
239
241
  // For HLS sources AVPlayer doesn't provide the tracks when they change
240
242
  // But it does call this event when they are loaded and when the current track changes.
241
243
  // We have to extract the necessary information ourselves.
242
- Task { [weak self] in
244
+ self?.videoTrackUpdateTask?.cancel()
245
+ self?.videoTrackUpdateTask = Task { [weak self, playerItem] in
243
246
  // For HLS sources
244
247
  if let videoPlayerItem = playerItem as? VideoPlayerItem, videoPlayerItem.isHls {
245
248
  guard let itemUri = videoPlayerItem.videoSource.uri else {
246
249
  return
247
250
  }
248
- let lastLog = playerItem.accessLog()?.events.last(where: { $0.uri != nil })
249
- self?.currentVideoTrack = lastLog?.matchToVideoTrack(videoTracks: await videoPlayerItem.videoTracks, itemUrl: itemUri)
251
+ let lastLog = item.accessLog()?.events.last(where: { $0.uri != nil })
252
+ let tracks = await videoPlayerItem.videoTracks
253
+
254
+ guard let self, !Task.isCancelled else {
255
+ return
256
+ }
257
+
258
+ self.currentVideoTrack = lastLog?.matchToVideoTrack(videoTracks: tracks, itemUrl: itemUri)
250
259
  return
251
260
  }
252
261
 
253
- // For "regular sources
262
+ // For non-HLS sources
254
263
  // The track which is currently playing will be first
255
264
  let currentTrack = try? await item.asset.loadTracks(withMediaType: .video).first
256
265
 
257
- if let currentTrack {
258
- let oldVideoTrack = self?.currentVideoTrack
259
- self?.currentVideoTrack = await VideoTrack.from(assetTrack: currentTrack)
266
+ if let currentTrack, !Task.isCancelled {
267
+ let newVideoTrack = await VideoTrack.from(assetTrack: currentTrack)
268
+
269
+ guard let self, !Task.isCancelled else {
270
+ return
271
+ }
272
+
273
+ self.currentVideoTrack = newVideoTrack
260
274
  }
261
275
  }
262
276
  }
@@ -299,6 +313,10 @@ class VideoPlayerObserver: VideoSourceLoaderListener {
299
313
  playbackBufferEmptyObserver?.invalidate()
300
314
  playerItemStatusObserver?.invalidate()
301
315
  tracksObserver?.invalidate()
316
+
317
+ videoTrackUpdateTask?.cancel()
318
+ videoTrackUpdateTask = nil
319
+
302
320
  NotificationCenter.default.removeObserver(playerItemObserver as Any)
303
321
  NotificationCenter.default.removeObserver(currentSubtitlesObserver as Any)
304
322
  NotificationCenter.default.removeObserver(currentAudioTracksObserver as Any)
@@ -3,7 +3,7 @@
3
3
  "component": {
4
4
  "group": "host.exp.exponent",
5
5
  "module": "expo.modules.video",
6
- "version": "3.0.12-canary-20251008-f2d1b4a",
6
+ "version": "3.0.12-canary-20251013-623c5a6",
7
7
  "attributes": {
8
8
  "org.gradle.status": "release"
9
9
  }
@@ -24,8 +24,8 @@
24
24
  },
25
25
  "files": [
26
26
  {
27
- "name": "expo.modules.video-3.0.12-canary-20251008-f2d1b4a.aar",
28
- "url": "expo.modules.video-3.0.12-canary-20251008-f2d1b4a.aar",
27
+ "name": "expo.modules.video-3.0.12-canary-20251013-623c5a6.aar",
28
+ "url": "expo.modules.video-3.0.12-canary-20251013-623c5a6.aar",
29
29
  "size": 499962,
30
30
  "sha512": "e2d6ac5f2d3bad569c46687ea971a0e620551b5364afcebad3cea1b7c24cdab228421abb36abca9ce5794ec13bb2be8ab0103672761905494aa4ea789ee99a0c",
31
31
  "sha256": "ff210cba3dfc59e4839a53c3941b13a7fcb10feabbbd19c71a5510d9e8b37ea8",
@@ -113,8 +113,8 @@
113
113
  ],
114
114
  "files": [
115
115
  {
116
- "name": "expo.modules.video-3.0.12-canary-20251008-f2d1b4a.aar",
117
- "url": "expo.modules.video-3.0.12-canary-20251008-f2d1b4a.aar",
116
+ "name": "expo.modules.video-3.0.12-canary-20251013-623c5a6.aar",
117
+ "url": "expo.modules.video-3.0.12-canary-20251013-623c5a6.aar",
118
118
  "size": 499962,
119
119
  "sha512": "e2d6ac5f2d3bad569c46687ea971a0e620551b5364afcebad3cea1b7c24cdab228421abb36abca9ce5794ec13bb2be8ab0103672761905494aa4ea789ee99a0c",
120
120
  "sha256": "ff210cba3dfc59e4839a53c3941b13a7fcb10feabbbd19c71a5510d9e8b37ea8",
@@ -133,8 +133,8 @@
133
133
  },
134
134
  "files": [
135
135
  {
136
- "name": "expo.modules.video-3.0.12-canary-20251008-f2d1b4a-sources.jar",
137
- "url": "expo.modules.video-3.0.12-canary-20251008-f2d1b4a-sources.jar",
136
+ "name": "expo.modules.video-3.0.12-canary-20251013-623c5a6-sources.jar",
137
+ "url": "expo.modules.video-3.0.12-canary-20251013-623c5a6-sources.jar",
138
138
  "size": 63322,
139
139
  "sha512": "919fc7ff706cc8cda229cd547b80eecf1aad9302e8aaca8021da18dfd5ccee94dc0091829c15897f064d26541c124251fea6962bb40561d16e99304722520a99",
140
140
  "sha256": "3358ccdcc90d5ad068c83e36cc08426695fa65591cbd5da681b3193fe2496637",
@@ -0,0 +1 @@
1
+ d4447aa3a1c7e1c366280188e8fd333573ae088a5a0bf1c9b13957c87b5d33cc977336bcf4b52beb6ea078acb446f6a238a1d3076af6b48a5171690f29b70a21
@@ -9,7 +9,7 @@
9
9
  <modelVersion>4.0.0</modelVersion>
10
10
  <groupId>host.exp.exponent</groupId>
11
11
  <artifactId>expo.modules.video</artifactId>
12
- <version>3.0.12-canary-20251008-f2d1b4a</version>
12
+ <version>3.0.12-canary-20251013-623c5a6</version>
13
13
  <packaging>aar</packaging>
14
14
  <name>expo.modules.video</name>
15
15
  <url>https://github.com/expo/expo</url>
@@ -0,0 +1 @@
1
+ c358f98a3f3b2ab87590183b7df4c5fabde7c7059547b95df9b483aa3241982fb965dfd159749a97a71b2894b0b4f7e960958cd3b585e685aac16be35d98ce97
@@ -3,11 +3,11 @@
3
3
  <groupId>host.exp.exponent</groupId>
4
4
  <artifactId>expo.modules.video</artifactId>
5
5
  <versioning>
6
- <latest>3.0.12-canary-20251008-f2d1b4a</latest>
7
- <release>3.0.12-canary-20251008-f2d1b4a</release>
6
+ <latest>3.0.12-canary-20251013-623c5a6</latest>
7
+ <release>3.0.12-canary-20251013-623c5a6</release>
8
8
  <versions>
9
- <version>3.0.12-canary-20251008-f2d1b4a</version>
9
+ <version>3.0.12-canary-20251013-623c5a6</version>
10
10
  </versions>
11
- <lastUpdated>20251008205532</lastUpdated>
11
+ <lastUpdated>20251013170928</lastUpdated>
12
12
  </versioning>
13
13
  </metadata>
@@ -1 +1 @@
1
- ea48f4b0d51cc53305a59a90be25fb1d
1
+ 79ec4fc2737af90832b06423fb23c155
@@ -1 +1 @@
1
- bde1f32912a48eac383ce322d93cbd2624e9b7e1
1
+ 8baaf12a7fc700b6b57b4de5e0b4fb96fb882c9e
@@ -1 +1 @@
1
- cd73073228cd8cdfa84937749e95adbfad7ad35b2c07f92d08f3164e0057f67e
1
+ 7bf1e3c38e9f40143769adfa1f3efcbef9774a6872343661eb3e5b37820eee85
@@ -1 +1 @@
1
- 7ca8ae595f082226238626eb9ac7d3557f5b0210e8bcbc18fb3d33b545a8e42decb7c8f8772c2157d0d228dcfe30de52398f8035d2ccd9ccb2112128ca0e8b04
1
+ 385b4e58a0897b1fbb1106e98302b9f28ef4ec0a2b5fbfaa797c562c76eeb1c0ebab54329e857a50aec06225191a70eba59627e5f63f5e3b76281abb9af21eba
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "expo-video",
3
3
  "title": "Expo Video",
4
- "version": "3.0.12-canary-20251008-f2d1b4a",
4
+ "version": "3.0.12-canary-20251013-623c5a6",
5
5
  "description": "A cross-platform, performant video component for React Native and Expo with Web support",
6
6
  "main": "build/index.js",
7
7
  "types": "build/index.d.ts",
@@ -31,10 +31,10 @@
31
31
  "license": "MIT",
32
32
  "dependencies": {},
33
33
  "devDependencies": {
34
- "expo-module-scripts": "5.0.8-canary-20251008-f2d1b4a"
34
+ "expo-module-scripts": "5.0.8-canary-20251013-623c5a6"
35
35
  },
36
36
  "peerDependencies": {
37
- "expo": "55.0.0-canary-20251008-f2d1b4a",
37
+ "expo": "55.0.0-canary-20251013-623c5a6",
38
38
  "react": "*",
39
39
  "react-native": "*"
40
40
  }
@@ -1 +0,0 @@
1
- b182dfb7b2d8ee8fd05b1e8900c0c9d159a7d7fe650b997c6dee1884b1378302278f40a5b07e54201fde082378b0701df16db588d0397ee031ceb35c39e4c2ad
@@ -1 +0,0 @@
1
- cfd190664b989491fdb7bada9681a4152736c559bf4736308af56b2a2b755ebae5da7568e18fe8e7a03d69ee55d012cf346ade12710920e7fff52ba2506b0b61