我有一个关于通过 NodeJS 服务器流式传输音频文件的问题。我正在使用以下代码:
var http = require('http');
var fs = require('fs');
var filePath = 'media/test.mp3';
var stat = fs.statSync(filePath);
http.createServer(function(request, response) {
response.writeHead(200, {
'Content-Type': 'audio/mpeg',
'Content-Length': stat.size
});
fs.createReadStream(filePath).pipe(response);
})
.listen(3000);
当我...时它确实有效
- 在本地运行它:http://localhost:3000或
- 在同一网络中的另一台机器上运行它:http://192.168.1.42:3000。
但是当我...时它不起作用
- 从外部运行它,例如调用http://my-public-ip:3000或
- 使用 DynDNS 服务:http ://my-dyndns-provider.com:3000 。
通过不工作,我的意思是我可以在 Chrome devtools 中看到一个待处理的请求(“请求尚未完成!”),但流有时只启动不到一秒钟,有时它根本不启动。在 devtools 中,我可以看到只加载了 4 KB(在 localhost 上是 3.1 MB)。
为了启用从外部的访问,我在路由器上配置了端口转发,以便将对端口 3000 的请求转发到我计算机的内部 IP。
对于流媒体以外的其他事情,我的设置正在运行,例如,可以调用服务器上定义的 REST 路由。
编辑:
同时,我还尝试使用 PHP 而不是 NodeJS 进行流式传输。但它表现出完全相同的行为。
你们知道可能是什么原因吗?谢谢!