Succescriterium 1.2.2 – Ondertiteling bij video

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)

Meer succescriteria