MediaSync 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
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 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.MediaSync
Java 설명서
이 페이지의 일부는 Android 오픈 소스 프로젝트에서 만들고 공유하고 Creative Commons 2.5 특성 라이선스에 설명된 용어에 따라 사용되는 작업을 기반으로 하는 수정 사항입니다.
생성자
MediaSync() |
클래스 생성자입니다. |
속성
Class |
이 |
Handle |
기본 Android 인스턴스에 대한 핸들입니다. (다음에서 상속됨 Object) |
JniIdentityHashCode |
MediaSync 클래스를 사용하여 오디오 및 비디오 스트림을 동기적으로 재생할 수 있습니다. (다음에서 상속됨 Object) |
JniPeerMembers |
MediaSync 클래스를 사용하여 오디오 및 비디오 스트림을 동기적으로 재생할 수 있습니다. |
PeerReference |
MediaSync 클래스를 사용하여 오디오 및 비디오 스트림을 동기적으로 재생할 수 있습니다. (다음에서 상속됨 Object) |
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 클래스를 사용하여 오디오 및 비디오 스트림을 동기적으로 재생할 수 있습니다. |