如何将媒体文件从服务器流式传输到客户端,例如我在 loopback 4 nodejs 中的 mp3 音频文件?

Posted

技术标签:

【中文标题】如何将媒体文件从服务器流式传输到客户端,例如我在 loopback 4 nodejs 中的 mp3 音频文件?【英文标题】:How to stream a media file from server to client side for example an mp3 audio file in my case in loopback 4 nodejs? 【发布时间】:2020-11-01 03:27:29 【问题描述】:

我的移动应用程序的后端有 loopback 4 - nodejs,前端有 Ionic 4。我在服务器 sid 上存储了一个 mp3 文件,我想在客户端流式传输和播放它,所以基本上是来自 loopback4 的音频流。 所以基本上我正在寻找loopback-4中的服务器端代码,它位于打字稿中,用于将文件音频流式传输到客户端。 (我无法使用 npmjs 库,因为它们中的大多数都没有类型,不能在 typescript 中使用)

【问题讨论】:

【参考方案1】:

我一了解 loopback4,它就没有 nodejs 流实现。我建议您使用本机 NodeJS 流。看看这个回购https://github.com/noamtcohen/Audiostreamer

【讨论】:

【参考方案2】:

简答: 我可以通过简单地提供静态文件来实现这一点,即来自服务器端的音频文件。使用我创建的端点访问它并使用前端的标签调用它。

长答案:

    在 loopback 4 中,您可以在 application.ts 文件中找到一行代码,该文件位于服务器项目根文件夹的 public 目录中。

    this.static('/', path.join(__dirname, '../../public'));

同样,您可以从任何您想要的目录提供静态文件。就我而言,我从添加到节点项目根目录的媒体文件夹中提供了我的文件。

this.static('/', path.join(__dirname, '../media'));
    第二步是公开一个 API 端点,您可以使用该端点向服务器发出 get 请求。您可以在服务器项目的 index.ts 文件和 app.start() 正下方的代码中执行此操作。

app.static('/media', 'media', extensions: ['mp3'] );

这里,必须添加API端点和节点项目根文件夹中的目录。

    现在,在前端,您只需将完整的 url 添加到 html 标签的 src 属性中即可访问 node 项目中的静态文件。 将 controls 属性添加到标签中,html 将为您处理一切。您可以播放、暂停、跳过等。

【讨论】:

以上是关于如何将媒体文件从服务器流式传输到客户端,例如我在 loopback 4 nodejs 中的 mp3 音频文件?的主要内容,如果未能解决你的问题,请参考以下文章

LAMP:如何从远程 URL/文件创建 .Zip 并将其即时流式传输到客户端

iOS:如何将音频数据从客户端流式传输到服务器?

如何将视频从浏览器提交/流式传输到服务器?

如何从充当服务器的 iPhone 流式传输视频?

如何从 servlet 将文本响应流式传输到 jsp?

如何将特定日志文件从多容器 Docker Elastic Beanstalk 流式传输到 CloudWatch?