Gli stream nei seguenti formati contenitore possono essere riprodotti direttamente da ExoPlayer. Devono essere supportati anche i formati di esempio audio e video contenuti (per informazioni dettagliate, consulta la sezione Formati di esempio).
Formato contenitore | Prove di supporto | Commenti |
---|---|---|
MP4 | SÌ | |
M4A | SÌ | |
FMP4 | SÌ | |
WebM | SÌ | |
Matroska | SÌ | |
MP3 | SÌ | Alcuni stream sono ricercabili solo utilizzando la ricerca a velocità in bit costante** |
Ogg | SÌ | Contiene Vorbis, Opus e FLAC |
WAV | SÌ | |
MPEG-TS | SÌ | |
MPEG-PS | SÌ | |
FLV | SÌ | Non ricercabile* |
ADTS (AAC) | SÌ | Ricercabile solo utilizzando la ricerca a velocità in bit costante** |
FLAC | SÌ | Utilizzando la libreria FLAC o l'estrattore FLAC nella libreria ExoPlayer*** |
AMR | SÌ | Ricercabile solo utilizzando la ricerca a velocità in bit costante** |
Foto in movimento JPEG | SÌ | Vengono estratti solo i contenuti MP4 |
* La ricerca non è supportata perché il container non fornisce metadati (ad esempio, un indice di esempio) per consentire a un media player di eseguire una ricerca in modo efficiente. Se la ricerca è obbligatoria, ti consigliamo di utilizzare un formato contenitore più appropriato.
** Questi estrattori hanno flag FLAG_ENABLE_CONSTANT_BITRATE_SEEKING
per consentire la ricerca approssimativa basata sull'ipotesi di una velocità in bit costante. Questa funzionalità non è abilitata per impostazione predefinita. Il modo più semplice per abilitare questa funzionalità per tutti gli estrattori che la supportano è utilizzare DefaultExtractorsFactory.setConstantBitrateSeekingEnabled
, come descritto qui.
*** L'estrattore della libreriaFLAC restituisce audio non elaborato, che può essere gestito
dal framework a tutti i livelli API. L'estrattore FLAC della libreria ExoPlayer restituisce
frame audio FLAC, quindi si basa sull'avere un decodificatore FLAC (ad esempio, un decodificatore MediaCodec
che gestisce FLAC (richiesto dal livello API 27) o la
libreria FFmpeg con FLAC abilitato). DefaultExtractorsFactory
utilizza l'estrattore dell'estensione se l'applicazione è stata creata con la libreria FLAC.
In caso contrario, utilizza l'estrattore ExoPlayer Library.
Utilizzo di MediaItem
Per riprodurre uno stream progressivo, crea un elemento MediaItem
con l'URI multimediale e passalo al player.
Kotlin
// Create a player instance. val player = ExoPlayer.Builder(context).build() // Set the media item to be played. player.setMediaItem(MediaItem.fromUri(progressiveUri)) // Prepare the player. player.prepare()
Java
// Create a player instance. ExoPlayer player = new ExoPlayer.Builder(context).build(); // Set the media item to be played. player.setMediaItem(MediaItem.fromUri(progressiveUri)); // Prepare the player. player.prepare();
Utilizzo di ProgressiveMediaSource
Per ulteriori opzioni di personalizzazione, puoi creare un ProgressiveMediaSource
e
direttamente al player anziché un MediaItem
.
Kotlin
// Create a data source factory. val dataSourceFactory: DataSource.Factory = DefaultHttpDataSource.Factory() // Create a progressive media source pointing to a stream uri. val mediaSource: MediaSource = ProgressiveMediaSource.Factory(dataSourceFactory) .createMediaSource(MediaItem.fromUri(progressiveUri)) // Create a player instance. val player = ExoPlayer.Builder(context).build() // Set the media source to be played. player.setMediaSource(mediaSource) // Prepare the player. player.prepare()
Java
// Create a data source factory. DataSource.Factory dataSourceFactory = new DefaultHttpDataSource.Factory(); // Create a progressive media source pointing to a stream uri. MediaSource mediaSource = new ProgressiveMediaSource.Factory(dataSourceFactory) .createMediaSource(MediaItem.fromUri(progressiveUri)); // Create a player instance. ExoPlayer player = new ExoPlayer.Builder(context).build(); // Set the media source to be played. player.setMediaSource(mediaSource); // Prepare the player. player.prepare();
Personalizzazione della riproduzione
ExoPlayer offre diversi modi per personalizzare l'esperienza di riproduzione in base alle esigenze della tua app. Consulta la pagina Personalizzazione per alcuni esempi.