共用方式為


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.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()

讓目前線程等候直到喚醒為止,通常是藉由em <notified/em>或<em>interrupted</em> 來喚醒它。<>

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

讓目前的線程等到喚醒為止,通常是因為 <em>notified</em> 或 <em>interrupted</em>,或直到經過一定數量的實時為止。

(繼承來源 Object)
Wait(Int64)

讓目前的線程等到喚醒為止,通常是因為 <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 類別可用來同步播放音訊和視訊串流。

適用於