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 ドキュメント。
このページの一部は、によって作成および共有された作業に基づく変更であり、に記載されている条件に従って使用されます。
コンストラクター
MediaSync() |
クラス コンストラクター。 |
プロパティ
Class |
この |
Handle |
基になる Android インスタンスへのハンドル。 (継承元 Object) |
JniIdentityHashCode |
MediaSync クラスを使用すると、オーディオ ストリームとビデオ ストリームを同期的に再生できます。 (継承元 Object) |
JniPeerMembers |
MediaSync クラスを使用すると、オーディオ ストリームとビデオ ストリームを同期的に再生できます。 |
PeerReference |
MediaSync クラスを使用すると、オーディオ ストリームとビデオ ストリームを同期的に再生できます。 (継承元 Object) |
PlaybackParams |
を使用して再生速度を |
SyncParams |
A/V 同期モードを取得します。 または、A/V 同期モードを設定します。 |
ThresholdClass |
この API は Mono for Android インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。 (継承元 Object) |
ThresholdType |
この API は Mono for Android インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。 (継承元 Object) |
Timestamp |
現在の再生位置を取得します。 |
メソッド
Clone() |
このオブジェクトのコピーを作成して返します。 (継承元 Object) |
CreateInputSurface() |
入力として使用する Surface を要求します。 |
Dispose() |
MediaSync クラスを使用すると、オーディオ ストリームとビデオ ストリームを同期的に再生できます。 (継承元 Object) |
Dispose(Boolean) |
MediaSync クラスを使用すると、オーディオ ストリームとビデオ ストリームを同期的に再生できます。 (継承元 Object) |
Equals(Object) |
他のオブジェクトがこのオブジェクトと "等しい" かどうかを示します。 (継承元 Object) |
Flush() |
同期オブジェクトからすべてのバッファーをフラッシュします。 |
GetHashCode() |
オブジェクトのハッシュ コード値を返します。 (継承元 Object) |
JavaFinalize() |
オブジェクトへの参照がなくなったとガベージ コレクションが判断したときに、オブジェクトのガベージ コレクターによって呼び出されます。 (継承元 Object) |
Notify() |
このオブジェクトのモニターで待機している 1 つのスレッドを起動します。 (継承元 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> または>< em 中断</em によって待機します>。> (継承元 Object) |
Wait(Int64) |
現在のスレッドが起動するまで待機します。通常<は、通知></em> または <>em 中断</em>、または特定のリアルタイムが経過するまで待機します。 (継承元 Object) |
Wait(Int64, Int32) |
現在のスレッドが起動するまで待機します。通常<は、通知></em> または <>em 中断</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 クラスを使用すると、オーディオ ストリームとビデオ ストリームを同期的に再生できます。 |