MediaSync Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
La classe MediaSync può essere usata per riprodurre in modo sincrono flussi audio e video.
[Android.Runtime.Register("android/media/MediaSync", ApiSince=23, DoNotGenerateAcw=true)]
public sealed class MediaSync : Java.Lang.Object
[<Android.Runtime.Register("android/media/MediaSync", ApiSince=23, DoNotGenerateAcw=true)>]
type MediaSync = class
inherit Object
- Ereditarietà
- Attributi
Commenti
La classe MediaSync può essere usata per riprodurre in modo sincrono flussi audio e video. Può essere usato anche per riprodurre lo streaming solo audio o solo video.
MediaSync viene in genere usato come segue:
MediaSync sync = new MediaSync();
sync.setSurface(surface);
Surface inputSurface = sync.createInputSurface();
...
// MediaCodec videoDecoder = ...;
videoDecoder.configure(format, inputSurface, ...);
...
sync.setAudioTrack(audioTrack);
sync.setCallback(new MediaSync.Callback() {
{@literal @Override}
public void onAudioBufferConsumed(MediaSync sync, ByteBuffer audioBuffer, int bufferId) {
...
}
}, null);
// This needs to be done since sync is paused on creation.
sync.setPlaybackParams(new PlaybackParams().setSpeed(1.f));
for (;;) {
...
// send video frames to surface for rendering, e.g., call
// videoDecoder.releaseOutputBuffer(videoOutputBufferIx, videoPresentationTimeNs);
// More details are available as below.
...
sync.queueAudio(audioByteBuffer, bufferId, audioPresentationTimeUs); // non-blocking.
// The audioByteBuffer and bufferId will be returned via callback.
// More details are available as below.
...
...
}
sync.setPlaybackParams(new PlaybackParams().setSpeed(0.f));
sync.release();
sync = null;
// The following code snippet illustrates how video/audio raw frames are created by
// MediaCodec's, how they are fed to MediaSync and how they are returned by MediaSync.
// This is the callback from MediaCodec.
onOutputBufferAvailable(MediaCodec codec, int bufferId, BufferInfo info) {
// ...
if (codec == videoDecoder) {
// surface timestamp must contain media presentation time in nanoseconds.
codec.releaseOutputBuffer(bufferId, 1000 * info.presentationTime);
} else {
ByteBuffer audioByteBuffer = codec.getOutputBuffer(bufferId);
sync.queueAudio(audioByteBuffer, bufferId, info.presentationTime);
}
// ...
}
// This is the callback from MediaSync.
onAudioBufferConsumed(MediaSync sync, ByteBuffer buffer, int bufferId) {
// ...
audioDecoder.releaseBuffer(bufferId, false);
// ...
}
Il client deve configurare il sink corrispondente impostando Surface e/o AudioTrack in base al tipo di flusso che verrà riprodotto.
Per il video, il client deve chiamare #createInputSurface
per ottenere una superficie in cui eseguirà il rendering dei fotogrammi video.
Per l'audio, il client deve configurare correttamente la traccia audio, ad esempio usando AudioTrack#MODE_STREAM
. I buffer audio vengono inviati direttamente a MediaSync tramite #queueAudio
e vengono restituiti al client in Callback#onAudioBufferConsumed
modo asincrono. Il client non deve modificare un buffer audio fino a quando non viene restituito.
Il client può facoltativamente pre-riempire buffer audio/video impostando la frequenza di riproduzione su 0,0 e quindi inserire buffer audio/video ai componenti corrispondenti. Ciò può ridurre le possibili sottoesegui iniziali.
Documentazione java per android.media.MediaSync
.
Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dal progetto Open Source Android e usato in base ai termini descritti nella licenza Creative Commons 2.5 Attribuzione.
Costruttori
MediaSync() |
Costruttore di classe. |
Proprietà
Class |
Restituisce la classe di runtime di questo |
Handle |
Handle per l'istanza di Android sottostante. (Ereditato da Object) |
JniIdentityHashCode |
La classe MediaSync può essere usata per riprodurre in modo sincrono flussi audio e video. (Ereditato da Object) |
JniPeerMembers |
La classe MediaSync può essere usata per riprodurre in modo sincrono flussi audio e video. |
PeerReference |
La classe MediaSync può essere usata per riprodurre in modo sincrono flussi audio e video. (Ereditato da Object) |
PlaybackParams |
Ottiene la frequenza di riproduzione utilizzando |
SyncParams |
Ottiene la modalità di sincronizzazione A/V. -oppure- Imposta la modalità di sincronizzazione A/V. |
ThresholdClass |
Questa API supporta l'infrastruttura Mono per Android e non deve essere usata direttamente dal codice. (Ereditato da Object) |
ThresholdType |
Questa API supporta l'infrastruttura Mono per Android e non deve essere usata direttamente dal codice. (Ereditato da Object) |
Timestamp |
Ottiene la posizione di riproduzione corrente. |
Metodi
Clone() |
Crea e restituisce una copia di questo oggetto. (Ereditato da Object) |
CreateInputSurface() |
Richiede a un dispositivo Surface di usare come input. |
Dispose() |
La classe MediaSync può essere usata per riprodurre in modo sincrono flussi audio e video. (Ereditato da Object) |
Dispose(Boolean) |
La classe MediaSync può essere usata per riprodurre in modo sincrono flussi audio e video. (Ereditato da Object) |
Equals(Object) |
Indica se un altro oggetto è "uguale a" questo. (Ereditato da Object) |
Flush() |
Scarica tutti i buffer dall'oggetto di sincronizzazione. |
GetHashCode() |
Restituisce un valore del codice hash per l'oggetto. (Ereditato da Object) |
JavaFinalize() |
Chiamato dal Garbage Collector su un oggetto quando Garbage Collection determina che non sono presenti altri riferimenti all'oggetto . (Ereditato da Object) |
Notify() |
Riattiva un singolo thread in attesa del monitor dell'oggetto. (Ereditato da Object) |
NotifyAll() |
Riattiva tutti i thread in attesa del monitor dell'oggetto. (Ereditato da Object) |
QueueAudio(ByteBuffer, Int32, Int64) |
Accoda i dati audio in modo asincrono per la riproduzione (AudioTrack deve essere in modalità di streaming). |
Release() |
Assicurarsi di chiamare questa operazione al termine per liberare qualsiasi istanza del componente aperta invece di basarsi sul Garbage Collector per eseguire questa operazione a un certo punto in futuro. |
SetAudioTrack(AudioTrack) |
Imposta la traccia audio per MediaSync. |
SetCallback(MediaSync+Callback, Handler) |
Imposta un callback asincrono per gli eventi MediaSync interattivi. |
SetHandle(IntPtr, JniHandleOwnership) |
Imposta la proprietà Handle. (Ereditato da Object) |
SetOnErrorListener(MediaSync+IOnErrorListener, Handler) |
Imposta un callback asincrono per gli eventi di errore. |
SetSurface(Surface) |
Imposta la superficie di output per MediaSync. |
ToArray<T>() |
La classe MediaSync può essere usata per riprodurre in modo sincrono flussi audio e video. (Ereditato da Object) |
ToString() |
Restituisce una rappresentazione di stringa dell'oggetto. (Ereditato da Object) |
UnregisterFromRuntime() |
La classe MediaSync può essere usata per riprodurre in modo sincrono flussi audio e video. (Ereditato da Object) |
Wait() |
Fa sì che il thread corrente attenda finché non viene risvegliato, in genere ricevendo <>una notifica</em> o <em>interrotto</em>. (Ereditato da Object) |
Wait(Int64, Int32) |
Fa sì che il thread corrente attenda finché non viene risvegliato, in genere ricevendo>< una notifica</em> o <em>interrotto</em> o fino a quando non è trascorsa una determinata quantità di tempo reale. (Ereditato da Object) |
Wait(Int64) |
Fa sì che il thread corrente attenda finché non viene risvegliato, in genere ricevendo>< una notifica</em> o <em>interrotto</em> o fino a quando non è trascorsa una determinata quantità di tempo reale. (Ereditato da Object) |
Implementazioni dell'interfaccia esplicita
IJavaPeerable.Disposed() |
La classe MediaSync può essere usata per riprodurre in modo sincrono flussi audio e video. (Ereditato da Object) |
IJavaPeerable.DisposeUnlessReferenced() |
La classe MediaSync può essere usata per riprodurre in modo sincrono flussi audio e video. (Ereditato da Object) |
IJavaPeerable.Finalized() |
La classe MediaSync può essere usata per riprodurre in modo sincrono flussi audio e video. (Ereditato da Object) |
IJavaPeerable.JniManagedPeerState |
La classe MediaSync può essere usata per riprodurre in modo sincrono flussi audio e video. (Ereditato da Object) |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
La classe MediaSync può essere usata per riprodurre in modo sincrono flussi audio e video. (Ereditato da Object) |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
La classe MediaSync può essere usata per riprodurre in modo sincrono flussi audio e video. (Ereditato da Object) |
IJavaPeerable.SetPeerReference(JniObjectReference) |
La classe MediaSync può essere usata per riprodurre in modo sincrono flussi audio e video. (Ereditato da Object) |
Metodi di estensione
JavaCast<TResult>(IJavaObject) |
Esegue una conversione del tipo di tipo controllato dal runtime Android. |
JavaCast<TResult>(IJavaObject) |
La classe MediaSync può essere usata per riprodurre in modo sincrono flussi audio e video. |
GetJniTypeName(IJavaPeerable) |
La classe MediaSync può essere usata per riprodurre in modo sincrono flussi audio e video. |