Condividi tramite


MediaSync Classe

Definizione

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à
MediaSync
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 #queueAudioe vengono restituiti al client in Callback#onAudioBufferConsumed modo asincrono. Il client non deve modificare un buffer audio finché non viene restituito.

Il client può facoltativamente precompilare buffer audio/video impostando la frequenza di riproduzione su 0,0 e quindi inserire buffer audio/video ai componenti corrispondenti. In questo modo è possibile ridurre la possibile sottoruna iniziale.

Documentazione java per android.media.MediaSync.

Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dal Android e usato in base ai termini descritti in 2.5 Attribution License Creative Commons 2.5 Attribution License.

Costruttori

MediaSync()

Costruttore di classe.

Proprietà

Class

Restituisce la classe di runtime di questo Objectoggetto .

(Ereditato da Object)
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 PlaybackParams. -oppure- Imposta la frequenza di riproduzione usando PlaybackParams.

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 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 sync.

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 monitoraggio di questo 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 affidarsi al Garbage Collector per eseguire questa operazione 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 in formato 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 eseguendo <una>notifica</em> o <em>interrotto</em>.

(Ereditato da Object)
Wait(Int64)

Fa sì che il thread corrente attenda finché non viene risvegliato, in genere eseguendo <una notifica</>em> o <em>interrotto</em> o fino a quando non è trascorsa una certa quantità di tempo reale.

(Ereditato da Object)
Wait(Int64, Int32)

Fa sì che il thread corrente attenda finché non viene risvegliato, in genere eseguendo <una notifica</>em> o <em>interrotto</em> o fino a quando non è trascorsa una certa 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 verificato 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.

Si applica a