video - 从 go 服务器有效地流式传输大文件(视频)

标签 video go server stream

我正在 Go 中实现视频流服务器。 我目前使用的是标准 fileserver但我不确定它对大文件 (4GB+) 是否有效。

有没有一种方法可以在 Go 中有效地提供大文件?

最佳答案

我不确定你所说的“高效”是什么意思,所以我假设你的意思是大文件是流式传输而不是缓冲。

标准http.FileServer最终使用the serveContent function写入数据,这需要一个 io.ReadSeeker 作为内容(幸运的是文件就是这样)。

然后使用 io.Copy 复制内容,在一般情况下(虽然可能不是您的常见情况,请参见下文)表示 copyBuffer .将使用 32KB 缓冲区。

因此,假设 http.ResponseWriter 的实现不缓冲其输入(it doesn't,另请参见 chunked writer),内存利用率应该是恒定的。

然而,当编写器支持ReadFrom 方法时,io.Copy will use that instead .因为http.response(ResponseWriter接口(interface)的标准实现)implements the ReadFrom method , 它将被用来代替 copyBuffer。此实现反过来将尝试在可能的情况下使用 sendfile 系统调用(如 os.File 的情况),这是更有效的含义(数据不根本不需要通过进程内存空间,所以尽可能好。

换句话说,我认为可以说内置的 net/http 包已经支持大文件的高效流式传输。

关于video - 从 go 服务器有效地流式传输大文件(视频),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42318795/

相关文章:

ios - 如何在Unity中播放EasyMovieTexture for ios?

javascript - 保持两个 YouTube 视频彼此同步

javascript - 如果我在 javascript 中拉伸(stretch) Canvas ,我会获得性能提升吗? Canvas 内的视频渲染速度是否较慢?

go - 使用接口(interface)时将结构传递给函数?

java - 共享 jar 和 noclassdeffound java

node.js - 如何在 Node.js 中从模块中获取变量 - 出现语法错误

ios - 使用 Metal/OpenGL ES 在 iOS 中渲染视频

string - 如何获取字符串中的字符数

docker - 在 Docker 中构建干净的 Go 应用程序

java - JAVA套接字服务器应用程序框架