S.K*_*hik 6 akka spray scala-2.11 akka-stream akka-http
我正在研究一个实验项目的akka-http(akka-http-experimental_2.11 - 0.4).我之前没有参与喷涂工作.
我想流式传输mp4视频(大小可能会有所不同)到浏览器.但我不知道如何为HttpResponse创建HttpEntity(HttpEntity.Chunked?).我尝试过像这样的脏东西,这不是一种正确的方法,但这只适用于Firefox,只能提供单一请求.
def output = Source.fromFile("C:\\Users\\karthik\\Downloads\\big_buck_bunny.mp4")(scala.io.Codec.ISO8859)
lazy val video = HttpResponse(entity = HttpEntity.Chunked(MediaTypes.`video/mp4`, Flow(output.map(_.toByte).map(a => ChunkStreamPart(ByteString(a)))).toProducer(materializer)))
Run Code Online (Sandbox Code Playgroud)
当我在另一个选项卡或浏览器中打开相同的URL时,服务器无法处理该请求.由于这是一个实验性项目,因此没有足够的文档来处理大型文件流.
我需要知道如何为HttpEntity.Chunked创建Producer.如果任何人可以用简单的术语解释,这将有助于理解API.
谢谢.
(PS:有人请在Stack Overflow中创建Akka-Http标签)
我知道这个问题已经很老了,但如果您仍然需要答案:我编写了一个小玩具文件服务器,它使用内存映射 IO 和分块编码通过 http 发送大文件。
https://gist.github.com/rklaehn/3f26c3f80e5870831f52#file-file-server-example
基本上有一种方法可以从文件生成 Iterator[ByteString]。然后,您从该迭代器创建一个源,通过映射从每个 ByteString 创建一个 ChunkStreamPart,并按其方式发送它。
val mappedByteBuffer = map(path)
val iterator = new ByteBufferIterator(mappedByteBuffer, 4096)
val chunks = Source(() => iterator).map(ChunkStreamPart.apply)
HttpResponse(entity = HttpEntity.Chunked(MediaTypes.`application/octet-stream`, chunks))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1555 次 |
| 最近记录: |