Se le interfacce di alto livello (MediaPlayer, MediaRecorder) possono fare ciò che volete (riprodurre il video da un formato che il sistema supporta sul display, o registrare video dalla fotocamera in un file), probabilmente dovreste semplicemente usare loro, sarà molto più semplice.
Se vuoi fare qualcosa di più personalizzato, quando ti accorgi che la parte della catena che vuoi modificare è nascosta all'interno delle classi di alto livello, ti consigliamo di passare a quelle di livello inferiore. Per esempio. per MediaExtractor; se vuoi solo estrarre pacchetti di dati da un file ma non decodificarli e visualizzarli/riprodurli immediatamente, ti consigliamo di utilizzare MediaExtractor. Se desideri ricevere pacchetti da un'altra fonte che il sistema stesso non supporta, ti consigliamo di utilizzare MediaCodec senza MediaExtractor. Allo stesso modo, se si desidera registrare qualcos'altro rispetto alla fotocamera o scrivere l'output da qualche altra parte rispetto a un file supportato da MediaRecorder, si vorrà utilizzare MediaCodec direttamente anziché MediaRecorder.
Inoltre, le classi di alto livello migliorano e diventano più flessibili con le nuove versioni dell'API, consentendo di eseguire operazioni che in precedenza richiedevano l'utilizzo manuale delle classi di livello inferiore. Per esempio. in Android 5.0, MediaRecorder ha la possibilità di registrare da una superficie personalizzata, permettendoti di registrare un video di qualcosa che rendi te stesso, non solo la fotocamera. Ciò era possibile in precedenza dal 4.3 utilizzando le classi di livello inferiore.