fix(ios): fix sideloading external subtitles (#3690)
* fix(ios): fix subtitles side loading * update example * Update examples/basic/src/VideoPlayer.tsx Co-authored-by: Olivier Bouillet <62574056+freeboub@users.noreply.github.com> * Update examples/basic/src/VideoPlayer.tsx Co-authored-by: Olivier Bouillet <62574056+freeboub@users.noreply.github.com> --------- Co-authored-by: Olivier Bouillet <62574056+freeboub@users.noreply.github.com>
This commit is contained in:
@@ -246,7 +246,7 @@ enum RCTVideoUtils {
|
||||
static func getValidTextTracks(asset: AVAsset, assetOptions: NSDictionary?, mixComposition: AVMutableComposition,
|
||||
textTracks: [TextTrack]?) async -> [TextTrack] {
|
||||
var validTextTracks: [TextTrack] = []
|
||||
var tracks: [[AVAssetTrack]] = []
|
||||
var tracks: [([AVAssetTrack], AVURLAsset)] = []
|
||||
|
||||
let videoTracks = await RCTVideoAssetsUtils.getTracks(asset: asset, withMediaType: .video)
|
||||
guard let videoAsset = videoTracks?.first else { return validTextTracks }
|
||||
@@ -268,23 +268,20 @@ enum RCTVideoUtils {
|
||||
}
|
||||
|
||||
if let track = await RCTVideoAssetsUtils.getTracks(asset: textURLAsset, withMediaType: .text) {
|
||||
tracks.append(track)
|
||||
tracks.append((track, textURLAsset))
|
||||
}
|
||||
}
|
||||
|
||||
for i in 0 ..< tracks.count {
|
||||
guard let track = tracks[i].first else { continue } // fix when there's no textTrackAsset
|
||||
for (index, tracksPair) in tracks.enumerated() {
|
||||
let (tracks, trackAsset) = tracksPair
|
||||
guard let track = tracks.first else { continue } // fix when there's no textTrackAsset
|
||||
|
||||
let textCompTrack: AVMutableCompositionTrack! = mixComposition.addMutableTrack(withMediaType: AVMediaType.text,
|
||||
preferredTrackID: kCMPersistentTrackID_Invalid)
|
||||
|
||||
do {
|
||||
try textCompTrack.insertTimeRange(
|
||||
CMTimeRangeMake(start: .zero, duration: videoAsset.timeRange.duration),
|
||||
of: track,
|
||||
at: .zero
|
||||
)
|
||||
validTextTracks.append(textTracks[i])
|
||||
try textCompTrack.insertTimeRange(CMTimeRangeMake(start: .zero, duration: trackAsset.duration), of: track, at: .zero)
|
||||
validTextTracks.append(textTracks[index])
|
||||
} catch {
|
||||
// TODO: upgrade error by call some props callback to better inform user
|
||||
print("Error occurred on textTrack insert attempt: \(error.localizedDescription)")
|
||||
|
Reference in New Issue
Block a user