Подход, который я использую, заключается в проверке каждые несколько миллисекунд (например, 200 мс), должна ли активироваться аннотация с ее временем начала и окончания или нет.
for(a in annotations){
if( playbackTime < a.end AND playbackTime >= a.start){
a.activate()
}else{
a.deactivate()
}
}