MediaSync Classe

Definição

A classe MediaSync pode ser usada para reproduzir fluxos de áudio e vídeo de forma síncrona.

[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
Herança
Atributos

Comentários

A classe MediaSync pode ser usada para reproduzir fluxos de áudio e vídeo de forma síncrona. Ele também pode ser usado para reproduzir fluxo somente áudio ou somente vídeo.

O MediaSync geralmente é usado assim:

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);
                // ...
            }

O cliente precisa configurar o coletor correspondente definindo o Surface e/ou AudioTrack com base no tipo de fluxo que será reproduzido.

Para vídeo, o cliente precisa chamar #createInputSurface para obter uma superfície na qual renderizará quadros de vídeo.

Para áudio, o cliente precisa configurar a faixa de áudio corretamente, por exemplo, usando AudioTrack#MODE_STREAM. Os buffers de áudio são enviados diretamente ao MediaSync por meio #queueAudioe são retornados para o cliente de forma Callback#onAudioBufferConsumed assíncrona. O cliente não deve modificar um buffer de áudio até que ele seja retornado.

Opcionalmente, o cliente pode pré-preencher buffers de áudio/vídeo definindo a taxa de reprodução como 0,0 e, em seguida, alimentar buffers de áudio/vídeo para componentes correspondentes. Isso pode reduzir a possível subexecução inicial.

Java documentação para android.media.MediaSync.

Partes desta página são modificações baseadas no trabalho criado e compartilhado pelo Project Open Source do Open Source e usadas de acordo com os termos descritos na Creative Commons 2.5.

Construtores

Nome Description
MediaSync()

Construtor de classe.

Propriedades

Nome Description
Class

Retorna a classe de runtime deste Object.

(Herdado de Object)
Handle

O identificador para a instância subjacente do Android.

(Herdado de Object)
JniIdentityHashCode

Obtém o código de hash de identidade atribuído a esse par Java pelo runtime de interoperabilidade.

(Herdado de Object)
JniManagedPeerState

A classe MediaSync pode ser usada para reproduzir fluxos de áudio e vídeo de forma síncrona.

(Herdado de JavaObject)
JniPeerMembers

A classe MediaSync pode ser usada para reproduzir fluxos de áudio e vídeo de forma síncrona.

PeerReference

Obtém a referência de objeto JNI para este par Java.

(Herdado de Object)
PlaybackParams

Obtém a taxa de reprodução usando PlaybackParams. -ou- Define a taxa de reprodução usando PlaybackParams.

SyncParams

Obtém o modo de sincronização A/V. -ou- Define o modo de sincronização A/V.

ThresholdClass

Essa API dá suporte à infraestrutura do Mono para Android e não se destina a ser usada diretamente do seu código.

(Herdado de Object)
ThresholdType

Essa API dá suporte à infraestrutura do Mono para Android e não se destina a ser usada diretamente do seu código.

(Herdado de Object)
Timestamp

Obter a posição de reprodução atual.

Métodos

Nome Description
Clone()

Cria e retorna uma cópia desse objeto.

(Herdado de Object)
Construct(JniObjectReference, JniObjectReferenceOptions)

A classe MediaSync pode ser usada para reproduzir fluxos de áudio e vídeo de forma síncrona.

(Herdado de JavaObject)
CreateInputSurface()

Solicita um Surface a ser usado como entrada.

Dispose()

Libera os recursos mantidos por esse par Java.

(Herdado de Object)
Dispose(Boolean)

Libera os recursos mantidos por esse par Java.

(Herdado de Object)
DisposeUnlessReferenced()

A classe MediaSync pode ser usada para reproduzir fluxos de áudio e vídeo de forma síncrona.

(Herdado de JavaObject)
Equals(Object)

A classe MediaSync pode ser usada para reproduzir fluxos de áudio e vídeo de forma síncrona.

(Herdado de JavaObject)
Equals(Object)

Indica se algum outro objeto é "igual a" este.

(Herdado de Object)
Flush()

Libera todos os buffers do objeto de sincronização.

GetHashCode()

Retorna um valor de código hash para o objeto.

(Herdado de Object)
JavaFinalize()

Chamado pelo coletor de lixo em um objeto quando a coleta de lixo determina que não há mais referências ao objeto.

(Herdado de Object)
Notify()

Ativa um único thread que está aguardando no monitor deste objeto.

(Herdado de Object)
NotifyAll()

Ativa todos os threads que estão aguardando no monitor deste objeto.

(Herdado de Object)
QueueAudio(ByteBuffer, Int32, Int64)

Enfileira os dados de áudio de forma assíncrona para reprodução (o AudioTrack deve estar no modo de streaming).

Release()

Certifique-se de chamar isso quando terminar de liberar qualquer instância de componente aberta em vez de depender do coletor de lixo para fazer isso por você em algum momento no futuro.

SetAudioTrack(AudioTrack)

Define a faixa de áudio para MediaSync.

SetCallback(MediaSync+Callback, Handler)

Define um retorno de chamada assíncrono para eventos MediaSync acionáveis.

SetHandle(IntPtr, JniHandleOwnership)

Define a propriedade Handle

(Herdado de Object)
SetOnErrorListener(MediaSync+IOnErrorListener, Handler)

Define um retorno de chamada assíncrono para eventos de erro.

SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

A classe MediaSync pode ser usada para reproduzir fluxos de áudio e vídeo de forma síncrona.

(Herdado de JavaObject)
SetSurface(Surface)

Define a superfície de saída para MediaSync.

ToArray<T>()

Cria uma matriz gerenciada com base nesse wrapper de matriz Java.

(Herdado de Object)
ToString()

Retorna uma representação de cadeia de caracteres do objeto.

(Herdado de Object)
UnregisterFromRuntime()

Cancela o registro desse par Java do runtime de interoperabilidade.

(Herdado de Object)
Wait()

Faz com que o thread atual aguarde até ser despertado, normalmente por ser <notificado/em> ou <em>interrompido</em>.<>

(Herdado de Object)
Wait(Int64, Int32)

Faz com que o thread atual aguarde até que ele seja despertado, normalmente por ser <>notificado</em> ou <em>interrompido</em>, ou até que uma determinada quantidade de tempo real tenha decorrido.

(Herdado de Object)
Wait(Int64)

Faz com que o thread atual aguarde até que ele seja despertado, normalmente por ser <>notificado</em> ou <em>interrompido</em>, ou até que uma determinada quantidade de tempo real tenha decorrido.

(Herdado de Object)

Implantações explícitas de interface

Nome Description
IJavaPeerable.Disposed()

A classe MediaSync pode ser usada para reproduzir fluxos de áudio e vídeo de forma síncrona.

(Herdado de JavaObject)
IJavaPeerable.Finalized()

A classe MediaSync pode ser usada para reproduzir fluxos de áudio e vídeo de forma síncrona.

(Herdado de JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

A classe MediaSync pode ser usada para reproduzir fluxos de áudio e vídeo de forma síncrona.

(Herdado de JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

A classe MediaSync pode ser usada para reproduzir fluxos de áudio e vídeo de forma síncrona.

(Herdado de JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

A classe MediaSync pode ser usada para reproduzir fluxos de áudio e vídeo de forma síncrona.

(Herdado de JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

A classe MediaSync pode ser usada para reproduzir fluxos de áudio e vídeo de forma síncrona.

(Herdado de JavaObject)

Métodos de Extensão

Nome Description
GetJniTypeName(IJavaPeerable)

Obtém o nome JNI do tipo da instância self.

JavaAs<TResult>(IJavaPeerable)

Tente coagir a digitar selfTResult, verificando se a coerção é válida no lado Java.

JavaCast<TResult>(IJavaObject)

Executa uma conversão de tipo marcada por runtime do Android.

JavaCast<TResult>(IJavaObject)

A classe MediaSync pode ser usada para reproduzir fluxos de áudio e vídeo de forma síncrona.

TryJavaCast<TResult>(IJavaPeerable, TResult)

Tente coagir a digitar selfTResult, verificando se a coerção é válida no lado Java.

Aplica-se a