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
。 音訊緩衝區會透過 #queueAudio
直接傳送至 MediaSync,並透過 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() |
讓目前線程等候直到喚醒為止,通常是藉由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 類別可用來同步播放音訊和視訊串流。 |