我有一個 firebase 功能,旨在將音頻作為回應流式傳輸:
import fetch from "axios";
import * as functions from "firebase-functions";
export const testAudioStream = functions.https.onRequest(async (req, res) => {
const urlToFile = "https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3";
const range = req.headers.range;
// get media response
const mediaResponse = range
? await fetch(urlToFile, { headers: { range }, responseType: "stream" })
: await fetch(urlToFile, { responseType: "stream" });
mediaResponse.data.pipe(res);
});
當我在本地主機(使用郵遞員)中運行它時,它作業得很好:

但是當我將它部署到生產環境時,回應與我在 localhost 中測驗時的回應不同:

我相信這是由于回應標頭。在localhost中,回傳的回應標頭是:

但是在生產中,回應頭是不同的:

所以我的問題是:
- 為什么結果因本地主機和生產環境而異
- 如何使生產功能正確回傳音頻?
編輯:這里的目的是隱藏檔案 URL。
uj5u.com熱心網友回復:
Cloud Functions 不支持流式傳輸。整個請求和回應以一個塊的形式發送。您可能需要閱讀有關其限制的
您也可以只回傳音頻鏈接并在前端處理鏈接以正確播放回傳的音頻。
uj5u.com熱心網友回復:
我通過將標頭復制到回應檔案來解決這個問題:
// copy headers
const newHeaders = Object.entries(mediaResponse.headers);
for (const [key, value] of newHeaders)
res.setHeader(key, value);
// copy status code
res.status(mediaResponse.status);
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/442442.html
