Succescriterium 1.2.2 – Ondertiteling

Zorg dat er ondertiteling beschikbaar is voor alle video’s met geluid. Slechthorend, dove of doofblinde mensen zijn afhankelijk van ondertiteling om te horen wat er wordt gezegd. Ondertiteling is ook handig voor iedereen die tijdelijk geen geluid kan waarnemen, bijvoorbeeld in de stiltecoupé.

Impact

  • Ondertiteling is handig voor iedereen die tijdelijk geen geluid kan waarnemen, bijvoorbeeld in de stiltecoupé.
  • Dove en slechthorende mensen zijn afhankelijk van ondertiteling om te begrijpen wat er gezegd wordt.

Controleren

Is er ondertiteling beschikbaar bij video’s?”

Dit kan visueel getest worden, er zijn geen hulpmiddelen nodig.

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
)

Referenties

Meer succescriteria