¿Cómo puedo agregar una transición gradual de transición / desvanecimiento gradual a AVPlayerLooper?

Tengo un AVPlayerLooper que utiliza un AVQueuePlayer . Es muy fácil enlazar el video, pero quería desvanecerse en el video durante el primer segundo y desaparecer durante el último segundo. Pude hacer que se desvanezca dentro y fuera usando un AVPlayerLayer y un CABasicAnimation que anima la opacidad de manera apropiada, pero no puedo hacerlo sin problemas y 100% confiable. He intentado usar NotificationCenter para AVPlayerItemDidPlayToEndTime y AVPlayerItemTimeJumped . También he intentado usar KVO con la key isReadyForDisplay . Cuando intenté addPeriodicTimeObserver , no puedo getlo lo suficientemente preciso para que el time se desvanezca correctamente. Incluso he tratado de addBoundaryTimeObserver , pero tampoco fue lo suficientemente consistente.

¿Alguien tiene alguna sugerencia sobre cómo implementar un crossfade en un AVPlayerLooper / AVQueuePlayer?

AVPlayerLooper siempre me ha impresionado como una class extraña: ¿no habría sido el bucle más ortogonal y útil como un AVAssetTrack envuelto o incluso un AVPlayerItem ? p.ej

 loop(AVAssetTrack) -> AVAssetTrack loop(AVPlayerItem) -> AVPlayerItem 

De todos modos, podría crear su fundido inicial como AVMutableComposition y AVMutableComposition queue, luego AVPlayerLooper versión de bucle AVPlayerLooper que ya hizo.

En cuanto al fundido, puede poner en queue un fundido, que se reproducirá una vez que detenga el bucle con looper.disableLooping() . (en realidad, tal vez esto responda a mi pregunta, habiendo disableLooping en un AVAssetTrack o AVPlayerItem sería extraño).