Compartilhar via


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
MediaSync
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 de áudio ou somente vídeo.

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 o AudioTrack com base no tipo de fluxo que será reproduzido.

Para vídeo, o cliente precisa ligar #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_STREAMo . Os buffers de áudio são enviados para o MediaSync diretamente via #queueAudio, e são retornados ao cliente de Callback#onAudioBufferConsumed forma assíncrona. O cliente não deve modificar um buffer de áudio até que ele seja retornado.

O cliente pode, opcionalmente, 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 os componentes correspondentes. Isso pode reduzir um possível underrun inicial.

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

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

Construtores

MediaSync()

Construtor de classe.

Propriedades

Class

Retorna a classe de tempo de execução deste Object.

(Herdado de Object)
Handle

O identificador para a instância subjacente do Android.

(Herdado de Object)
JniIdentityHashCode

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

(Herdado de Object)
JniPeerMembers

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

PeerReference

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

(Herdado de Object)
PlaybackParams

Obtém a taxa de reprodução usando PlaybackParamso . -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

Esta API suporta a infraestrutura Mono para Android e não se destina a ser usada diretamente do seu código.

(Herdado de Object)
ThresholdType

Esta API suporta a infraestrutura Mono para Android e não se destina a ser usada diretamente do seu código.

(Herdado de Object)
Timestamp

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

Métodos

Clone()

Cria e retorna uma cópia desse objeto.

(Herdado de Object)
CreateInputSurface()

Solicita que um Surface seja utilizado como entrada.

Dispose()

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

(Herdado de Object)
Dispose(Boolean)

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

(Herdado de Object)
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.

SetSurface(Surface)

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

ToArray<T>()

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

(Herdado de Object)
ToString()

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

(Herdado de Object)
UnregisterFromRuntime()

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

(Herdado de Object)
Wait()

Faz com que o thread atual aguarde até que ele seja ativado, normalmente sendo <em 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 sendo <em>notificado</em> ou <em interrompido</em>, ou até que>uma certa quantidade de tempo real tenha decorrido.

(Herdado de Object)
Wait(Int64)

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

(Herdado de Object)

Implantações explícitas de interface

IJavaPeerable.Disposed()

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

(Herdado de Object)
IJavaPeerable.DisposeUnlessReferenced()

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

(Herdado de Object)
IJavaPeerable.Finalized()

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

(Herdado de Object)
IJavaPeerable.JniManagedPeerState

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

(Herdado de Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

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

(Herdado de Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

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

(Herdado de Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

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

(Herdado de Object)

Métodos de Extensão

JavaCast<TResult>(IJavaObject)

Executa uma conversão de tipo verificada em tempo de execução do Android.

JavaCast<TResult>(IJavaObject)

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

GetJniTypeName(IJavaPeerable)

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

Aplica-se a