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 支持 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() |
唤醒正在等待此对象的监视器的单个线程。 (继承自 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>interrupted</em>。<>< (继承自 Object) |
Wait(Int64) |
使当前线程等待直到唤醒,通常是通过 <em>通知</em> 或 <em interrupted</em>>,或直到经过一定数量的实时。 (继承自 Object) |
Wait(Int64, Int32) |
使当前线程等待直到唤醒,通常是通过 <em>通知</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 类可用于同步播放音频和视频流。 |