ContentStreamProvider在 Amazon SDK for Java 2.x - Amazon SDK for Java 2.x
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

ContentStreamProvider在 Amazon SDK for Java 2.x

ContentStreamProvider是中使用的抽象, Amazon 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; } }