ContentStreamProvider在 AWS SDK for Java 2.x - AWS SDK for Java 2.x

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

ContentStreamProvider在 AWS SDK for Java 2.x

ContentStreamProvider是中使用的抽象, AWS SDK for Java 2.x 用于允许多次读取输入数据。本主题说明如何为您的应用程序ContentStreamProvider正确实现。

适用于 Java 的 SDK 2.x 每次需要读取整个直播时都使用该ContentStreamProvider#newStream()方法。要使它适用于整个流,返回的流必须始终位于内容的开头,并且必须包含相同的数据。

在以下各节中,我们将提供三种方法来正确实现此行为。

使用 mark()reset()

在下面的示例中,我们在开始读取之前mark(int)在构造函数中使用,以确保我们可以将流重置回开头。对于的每次调用,newStream()我们都会重置数据流:

public class MyContentStreamProvider implements ContentStreamProvider { private InputStream contentStream; public MyContentStreamProvider(InputStream contentStream) { this.contentStream = contentStream; this.contentStream.mark(MAX_LEN); } @Override public InputStream newStream() { contentStream.reset(); return contentStream; } }

如果mark()和不可用,reset()则使用缓冲

如果你的直播不支持mark()reset()直接播放,你仍然可以使用前面显示的解决方案,方法是先将直播封装在BufferedInputStream

public class MyContentStreamProvider implements ContentStreamProvider { private BufferedReader contentStream; public MyContentStreamProvider(InputStream contentStream) { this.contentStream = new BufferedInputStream(contentStream); this.contentStream.mark(MAX_LEN); } @Override public InputStream newStream() { contentStream.reset(); return contentStream; } }

创建新直播

一种更简单的方法是在每次调用时简单地获取一个新的数据流,然后关闭前一个数据流:

public class MyContentStreamProvider implements ContentStreamProvider { private InputStream contentStream; @Override public InputStream newStream() { if (contentStream != null) { contentStream.close(); } contentStream = openStream(); return contentStream; } }