Mensen die slechthorend, doof of doofblind zijn afhankelijk van ondertiteling om video’s te kijken. Zorg ervoor dat ondertiteling beschikbaar is voor alle video’s met geluid.
Oplossing
Op Android heeft de MediaPlayer ondersteuning voor TimedText. De basis implementatie met MediaPlayer ziet er als volgt uit:
val player = MediaPlayer.create(this, R.raw.video) try { player.addTimedTextSource("path/to/timed/text/source", MediaPlayer.MEDIA_MIMETYPE_TEXT_SUBRIP) player.trackInfo.forEachIndexed { index, trackInfo -> if (trackInfo.trackType == TrackInfo.MEDIA_TRACK_TYPE_TIMEDTEXT) { player.selectTrack(index) return@forEachIndexed } } player.setOnTimedTextListener(this) player.start() } catch (e: Exception) { e.printStackTrace() }
Op iOS heeft AVPlayer ondersteuning om ondertiteling toe te voegen. Gebruikers kunnen via de systeemvoorkeuren ondertiteling automatisch laten aanzetten. Je kan op de volgende manier ondertiteling toevoegen aan een video:
// Add video track guard let videoTrack = videoComposition.addMutableTrack(withMediaType: .video, preferredTrackID: kCMPersistentTrackID_Invalid) else { return } guard let videoUrl = Bundle.main.url(forResource: "Video", withExtension: "mp4") else { return } let videoAsset = AVURLAsset.init(url: videoUrl) try? videoTrack.insertTimeRange(CMTimeRangeMake(start: .zero, duration: videoAsset.duration), of: videoAsset.tracks(withMediaType: .video)[0], at: .zero) // Add subtitle track guard let subtitleUrl = Bundle.main.url(forResource: "Video", withExtension: ".mp4.vtt") else { return } guard let subtitleTrack = videoComposition.addMutableTrack(withMediaType: .text, preferredTrackID: kCMPersistentTrackID_Invalid) else { return } let subtitleAsset = AVURLAsset(url: subtitleUrl) try? subtitleTrack.insertTimeRange(CMTimeRangeMake(start: .zero, duration: videoAsset.duration), of: subtitleAsset.tracks(withMediaType: .text)[0], at: .zero)