使用 node.js 服务器从 GCP 提供 HLS 播放列表的合适方法
Suitable approach for serving HLS playlist from GCP using node.js server
我在向用户提供动态 hls 播放列表时遇到了难题,因为所有 hls 文件都必须从 GCP 存储提供。由于索引文件是静态的,我可以简单地使用 express static 为它提供服务,如 here 中的一个答案所述,但它仅限于文件目录(在我看来)。对于来自 GCP 的流式 HLS 播放列表,我尝试了以下方法
用于从 GCP 提供动态索引文件
router.get('/segments-list', (req, res) => {
const playlistName = req.query;
const remoteFile = hlsPlaylistBucket.file('${playlistName}.m3u8');
remoteFile.download().then((data) => {
const contents = data[0];
res.send(contents);
});
});
用于向用户提供单独的分段文件 (.ts)
router.get('/segments/:segment', (req, res) => {
const { segment } = req.params;
//* Gets specific segment files from GCP cloud in request of particular segments
const remoteFile = hlsPlaylistBucket.file(`${segment}`);
remoteFile.download().then((data) => {
const contents = data[0];
res.send(contents);
});
});
这是清单文件
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:8
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:8.341667,
segments/file000.ts
#EXTINF:8.341667,
segments/file001.ts
#EXTINF:8.341667,
segments/file002.ts
#EXTINF:8.341667,
segments/file003.ts
#EXTINF:5.572233,
segments/file004.ts
#EXT-X-ENDLIST
现在这种方法似乎可行,但这是一种有缺陷的方法,因为每次用户请求时都会为内存中的文件下载小块。并且为每个片段文件提供签名的 urls 也不是一种合适的方式,因为一个视频可能包含 200 个片段文件。我的方法是正确的还是我必须在 GCP 中提供像 this 这样的 HLS 播放列表。真正的问题出现在服务基础 url 段文件中,过去几天我一直被这个问题困扰,但我找不到合适的方式通过服务 HLS 播放列表向用户提供 VOD 文件
任何帮助将不胜感激
我在向用户提供动态 hls 播放列表时遇到了难题,因为所有 hls 文件都必须从 GCP 存储提供。由于索引文件是静态的,我可以简单地使用 express static 为它提供服务,如 here 中的一个答案所述,但它仅限于文件目录(在我看来)。对于来自 GCP 的流式 HLS 播放列表,我尝试了以下方法
用于从 GCP 提供动态索引文件
router.get('/segments-list', (req, res) => {
const playlistName = req.query;
const remoteFile = hlsPlaylistBucket.file('${playlistName}.m3u8');
remoteFile.download().then((data) => {
const contents = data[0];
res.send(contents);
});
});
用于向用户提供单独的分段文件 (.ts)
router.get('/segments/:segment', (req, res) => {
const { segment } = req.params;
//* Gets specific segment files from GCP cloud in request of particular segments
const remoteFile = hlsPlaylistBucket.file(`${segment}`);
remoteFile.download().then((data) => {
const contents = data[0];
res.send(contents);
});
});
这是清单文件
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:8
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:8.341667,
segments/file000.ts
#EXTINF:8.341667,
segments/file001.ts
#EXTINF:8.341667,
segments/file002.ts
#EXTINF:8.341667,
segments/file003.ts
#EXTINF:5.572233,
segments/file004.ts
#EXT-X-ENDLIST
现在这种方法似乎可行,但这是一种有缺陷的方法,因为每次用户请求时都会为内存中的文件下载小块。并且为每个片段文件提供签名的 urls 也不是一种合适的方式,因为一个视频可能包含 200 个片段文件。我的方法是正确的还是我必须在 GCP 中提供像 this 这样的 HLS 播放列表。真正的问题出现在服务基础 url 段文件中,过去几天我一直被这个问题困扰,但我找不到合适的方式通过服务 HLS 播放列表向用户提供 VOD 文件 任何帮助将不胜感激