Share via


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 。 音訊緩衝區會透過 直接 #queueAudio 傳送至 MediaSync,並透過 Callback#onAudioBufferConsumed 非同步方式傳回給用戶端。 用戶端不應該修改音訊緩衝區,直到傳回為止。

用戶端可以將播放速率設定為 0.0,然後將音訊/視訊緩衝區饋送至對應的元件,以選擇性地預先填滿音訊/視訊緩衝區。 這可減少可能的初始執行不足。

android.media.MediaSync JAVA 檔。

此頁面的部分是根據所建立和共用的工作進行修改,並根據 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()

讓目前的執行緒等到喚醒為止,通常是 em < notified/em > 或 < em > interrupted < /em > 。 ><

(繼承來源 Object)
Wait(Int64)

讓目前的執行緒等到喚醒為止,通常是 em < notified/em > 或 < em > interrupted < /em > ,或直到經過一定數量的即時為止。 <>

(繼承來源 Object)
Wait(Int64, Int32)

讓目前的執行緒等到喚醒為止,通常是 em < notified/em > 或 < em > interrupted < /em > ,或直到經過一定數量的即時為止。 <>

(繼承來源 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 類別可用來同步播放音訊和視訊串流。

適用於