MediaSync Класс

Определение

Класс MediaSync можно использовать для синхронного воспроизведения аудио- и видеопотоков.

[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
Наследование
MediaSync
Атрибуты

Комментарии

Класс MediaSync можно использовать для синхронного воспроизведения аудио- и видеопотоков. Его также можно использовать для воспроизведения аудио или видеопотока.

MediaSync обычно используется следующим образом:

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

Клиенту необходимо настроить соответствующий приемник, задав Surface и (или) AudioTrack в зависимости от типа потока, который будет воспроизводиться.

Для видео клиент должен вызвать , #createInputSurface чтобы получить поверхность, на которой он будет отображать видеокадры.

Для аудио клиент должен правильно настроить звуковую дорожку, например с помощью AudioTrack#MODE_STREAM. Звуковые буферы отправляются в MediaSync напрямую через #queueAudioи возвращаются клиенту через Callback#onAudioBufferConsumed асинхронно. Клиент не должен изменять звуковой буфер, пока он не будет возвращен.

При необходимости клиент может предварительно заполнить буферы звука и видео, установив скорость воспроизведения 0,0, а затем передать аудио- и видео буферы в соответствующие компоненты. Это может сократить возможный начальный запуск.

Документация по Java для android.media.MediaSync.

Части этой страницы являются изменениями, основанными на работе, созданной и совместно используемой проектом Android и используемой в соответствии с условиями, Creative Commons 2.5 Attribution License.

Конструкторы

MediaSync()

Конструктор классов.

Свойства

Class

Возвращает класс среды выполнения данного объекта Object.

(Унаследовано от Object)
Handle

Дескриптор базового экземпляра Android.

(Унаследовано от Object)
JniIdentityHashCode

Класс MediaSync можно использовать для синхронного воспроизведения аудио- и видеопотоков.

(Унаследовано от Object)
JniPeerMembers

Класс MediaSync можно использовать для синхронного воспроизведения аудио- и видеопотоков.

PeerReference

Класс MediaSync можно использовать для синхронного воспроизведения аудио- и видеопотоков.

(Унаследовано от Object)
PlaybackParams

Возвращает частоту воспроизведения с помощью PlaybackParams. -или- Задает скорость воспроизведения с помощью PlaybackParams.

SyncParams

Возвращает режим синхронизации A/V. -или- Задает режим синхронизации A/V.

ThresholdClass

Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.

(Унаследовано от Object)
ThresholdType

Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.

(Унаследовано от Object)
Timestamp

Получение текущей позиции воспроизведения.

Методы

Clone()

Создает и возвращает копию этого объекта.

(Унаследовано от Object)
CreateInputSurface()

Запрашивает устройство Surface для использования в качестве входных данных.

Dispose()

Класс MediaSync можно использовать для синхронного воспроизведения аудио- и видеопотоков.

(Унаследовано от Object)
Dispose(Boolean)

Класс MediaSync можно использовать для синхронного воспроизведения аудио- и видеопотоков.

(Унаследовано от Object)
Equals(Object)

Указывает, равен ли какой-то другой объект этому объекту.

(Унаследовано от Object)
Flush()

Очищает все буферы из объекта синхронизации.

GetHashCode()

Возвращает значение хэш-кода для объекта.

(Унаследовано от Object)
JavaFinalize()

Вызывается сборщиком мусора для объекта , когда сборка мусора определяет, что больше нет ссылок на объект .

(Унаследовано от Object)
Notify()

Пробуждает один поток, ожидающий монитора этого объекта.

(Унаследовано от Object)
NotifyAll()

Пробуждает все потоки, ожидающие на мониторе этого объекта.

(Унаследовано от Object)
QueueAudio(ByteBuffer, Int32, Int64)

Помещает звуковые данные в очередь асинхронно для воспроизведения (AudioTrack должен находиться в режиме потоковой передачи).

Release()

Убедитесь, что вы вызываете этот метод, когда все готово, чтобы освободить любой открытый экземпляр компонента, а не полагаться на сборщик мусора, чтобы сделать это в какой-то момент в будущем.

SetAudioTrack(AudioTrack)

Задает звуковую дорожку для MediaSync.

SetCallback(MediaSync+Callback, Handler)

Задает асинхронный обратный вызов для событий MediaSync с действиями.

SetHandle(IntPtr, JniHandleOwnership)

Задает свойство Handle.

(Унаследовано от Object)
SetOnErrorListener(MediaSync+IOnErrorListener, Handler)

Задает асинхронный обратный вызов для событий ошибок.

SetSurface(Surface)

Задает выходную поверхность для MediaSync.

ToArray<T>()

Класс MediaSync можно использовать для синхронного воспроизведения аудио- и видеопотоков.

(Унаследовано от Object)
ToString()

Возвращает строковое представление объекта.

(Унаследовано от Object)
UnregisterFromRuntime()

Класс MediaSync можно использовать для синхронного воспроизведения аудио- и видеопотоков.

(Унаследовано от Object)
Wait()

Вызывает ожидание текущего потока, пока он не пробудится, как правило, из-за <уведомления><<> или>прерывания или прерывания.><

(Унаследовано от Object)
Wait(Int64)

Вызывает ожидание текущего потока, пока он не пробудится, как правило, путем <уведомления><<> или>прерывания или прерывания<> или до истечения определенного количества реального времени.

(Унаследовано от Object)
Wait(Int64, Int32)

Вызывает ожидание текущего потока, пока он не пробудится, как правило, путем <уведомления><<> или>прерывания или прерывания<> или до истечения определенного количества реального времени.

(Унаследовано от Object)

Явные реализации интерфейса

IJavaPeerable.Disposed()

Класс MediaSync можно использовать для синхронного воспроизведения аудио- и видеопотоков.

(Унаследовано от Object)
IJavaPeerable.DisposeUnlessReferenced()

Класс MediaSync можно использовать для синхронного воспроизведения аудио- и видеопотоков.

(Унаследовано от Object)
IJavaPeerable.Finalized()

Класс MediaSync можно использовать для синхронного воспроизведения аудио- и видеопотоков.

(Унаследовано от Object)
IJavaPeerable.JniManagedPeerState

Класс MediaSync можно использовать для синхронного воспроизведения аудио- и видеопотоков.

(Унаследовано от Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Класс MediaSync можно использовать для синхронного воспроизведения аудио- и видеопотоков.

(Унаследовано от Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Класс MediaSync можно использовать для синхронного воспроизведения аудио- и видеопотоков.

(Унаследовано от Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

Класс MediaSync можно использовать для синхронного воспроизведения аудио- и видеопотоков.

(Унаследовано от Object)

Методы расширения

JavaCast<TResult>(IJavaObject)

Выполняет преобразование типа, проверенного средой выполнения Android.

JavaCast<TResult>(IJavaObject)

Класс MediaSync можно использовать для синхронного воспроизведения аудио- и видеопотоков.

GetJniTypeName(IJavaPeerable)

Класс MediaSync можно использовать для синхронного воспроизведения аудио- и видеопотоков.

Применяется к