IVS 广播 SDK:自定义图像源(低延迟流式传输) - Amazon Interactive Video Service

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

IVS 广播 SDK:自定义图像源(低延迟流式传输)

本指南假设您已熟悉如何设置广播会话(AndroidiOS)以及如何使用混合器 API

自定义图像输入源允许应用程序向广播 SDK 提供自己的图像输入,而不仅限于预设相机或屏幕共享。自定义图像源可以是简单的半透明水印或静态“马上回来”等场景,也可以允许应用程序执行额外的自定义处理,例如向相机添加美颜滤镜。

您可以拥有多个自定义图像源,例如水印加上带美颜滤镜的相机。当您使用自定义图像输入源对摄像机进行自定义控制时(例如使用需要访问相机的美颜滤镜库)时,广播 SDK 不再负责管理相机。相反,应用程序负责正确处理相机的生命周期。请参阅官方平台文档,以了解应用程序应如何管理相机。

Android

创建广播会话后,请创建一个图像输入源:

SurfaceSource surfaceSource = broadcastSession.createImageInputSource();

此方法将返回一个 SurfaceSource,这是标准的 Android Surface 支持的图像源。它会自动附加到广播会话,因此之后无需使用 attachDevice(...) 方法。但是,SurfaceSource 需要绑定到一个插槽;这将在下文详细介绍。SurfaceSource 支持大小调整和轮换。您还可以创建 ImagePreviewView 来显示其内容预览。

检索底层 Surface

Surface surface = surfaceSource.getInputSurface();

Surface 可以用作图像创建器(例如 Camera2、OpenGL ES 和其他库)的输出缓冲区。最简单的使用场景是直接在 Surface 画布中绘制静态位图或颜色。但是,许多库(例如 beauty-filter 库)提供了一种方法,允许应用程序指定外部 Surface 来进行渲染。您可以用这种方法将此 Surface 传递到滤镜库,从而让库输出处理后的帧以便广播会话进行流式传输。

最后,SurfaceSource 必须绑定到将由广播会话流式传输的 Mixer.Slot

broadcastSession.getMixer().bind(surfaceSource, "customSlot");

Android 示例代码包含了多个以不同方式使用自定义图像源的示例:

  • MixerActivity 中添加了一个半透明水印。

  • 一个 MP4 文件在 MixerActivity 中回环。

  • CameraManager 实用程序类使用 CustomActivity 中的 Camera2 方法对设备相机进行自定义管理,这种方法使用了一个简单的 sepia 滤镜。此示例特别有用,因为它演示了如何管理相机以及将广播会话的自定义 SurfaceSource 传递到相机捕获请求。如果您使用其他外部库,请参阅其文档以了解如何配置库,以输出到由广播会话提供的 Android Surface

iOS

创建广播会话后,请创建一个图像输入源:

let customSource = broadcastSession.createImageSource(withName: "customSourceName")

此方法将返回一个 IVSCustomImageSource,这是一个允许应用程序手动提交 CMSampleBuffers 的图像源。有关支持的像素格式,请参阅 iOS 广播 SDK 参考;指向最新版本的链接详见最新广播 SDK 发行版的 Amazon IVS 版本注释。源不会自动附加到广播会话,因此必须将图像源附加到会话并将其绑定到插槽,然后才能流式传输源:

broadcastSession.attach(customSource, toSlotWithName: "customSourceSlot", onComplete: nil)

附加并绑定自定义源后,应用程序可以直接将 CMSampleBuffers 提交到自定义源。您可以选择使用 onComplete 回调来开始操作。

提交到自定义源的样本将在广播会话中流式传输:

customSource.onSampleBuffer(sampleBuffer)

对于串流视频,请在回调中使用此方法。例如,假设您使用的是相机,则每次从 AVCaptureSession 收到一个新的样本缓冲时,应用程序可以将样本缓冲转发到自定义图像源。如果需要,应用程序可以在将样本提交到自定义图像源之前执行进一步的处理(例如美颜滤镜)。

对于静态图像,在收到第一个样本之后,如果自定义图像源的插槽绑定已更改,或源已分离并重新连接到广播会话,则应用程序需要重新提交样本。例如,假设删除了混合器的插槽然后将该插槽添加到混合器,则必须重新提交样本。

iOS 示例应用程序包含了多个以不同方式使用自定义图像源的示例:

  • MixerViewController 中添加了一个半透明水印。

  • 一个 MP4 文件在 MixerViewController 中回环。

  • CustomSourcesViewController 中添加了一个带有设备摄像头的 CiFilter 实现。这使应用程序能够独立于 Amazon IVS 广播开发工具包管理设备摄像头。它通过 AVCaptureSession 从设备摄像头捕获图像、使用 CiFilter 实现处理图像,然后将 CMSampleBuffers 提交到 customSource 来实现实时流。