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 支持 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 类可用于同步播放音频和视频流。

适用于