다음을 통해 공유


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으로 설정하여 오디오/비디오 버퍼를 미리 채운 다음 오디오/비디오 버퍼를 해당 구성 요소에 공급할 수 있습니다. 이렇게 하면 가능한 초기 언더런을 줄일 수 있습니다.

에 대한 android.media.MediaSyncJava 설명서

이 페이지의 일부는 Android 오픈 소스 프로젝트에서 만들고 공유하고 Creative Commons 2.5 특성 라이선스에 설명된 용어에 따라 사용되는 작업을 기반으로 하는 수정 사항입니다.

생성자

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는 Android용 Mono 인프라를 지원하며 코드에서 직접 사용할 수 없습니다.

(다음에서 상속됨 Object)
ThresholdType

이 API는 Android용 Mono 인프라를 지원하며 코드에서 직접 사용할 수 없습니다.

(다음에서 상속됨 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, Int32)

현재 스레드가 각성될 때까지 대기하게 하며, 일반적으로 <>알림을 받<거나 <중단/>종료><>하거나 일정량의 실시간 경과가 발생할 때까지 대기합니다.

(다음에서 상속됨 Object)
Wait(Int64)

현재 스레드가 각성될 때까지 대기하게 하며, 일반적으로 <>알림을 받<거나 <중단/>종료><>하거나 일정량의 실시간 경과가 발생할 때까지 대기합니다.

(다음에서 상속됨 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 클래스를 사용하여 오디오 및 비디오 스트림을 동기적으로 재생할 수 있습니다.

적용 대상