Succescriterium 1.2.2 Ondertitels voor doven en slechthorenden (vooraf opgenomen)

Video’s met geluid moeten voorzien worden van ondertiteling. De ondertiteling moet het volgende bevatten:

  1. Volledige dialoog
  2. Sprekers identificeren
  3. Informatie die niet door spraak wordt overgedragen beschrijven, zoals geluidseffecten.

Het doel van dit succescriterium is dat doven en slechthorenden ook video’s kunnen bekijken.

Ondertiteling toevoegen

Android

Vanaf Android 4.1 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()
}

iOS

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)

Referenties

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *