我试图让 Mountebank 将读取的文件流管道从我的.ts
MPEG-2 文件返回到 Mountebank 注入,以便客户端可以接收流数据并播放视频。关于如何读入文件有一个有用的节点实现,我让它读入文件,但现在它似乎被第一个文件.m3u8
卡住了。.ts
Node 似乎正在将.ts
文件作为流读取并将其传送到 response stream.pipe(res)
。我不确定这如何转化为 Mountebank。这是我的 Mountbank 代码:
山岸:
function (request, state, logger, callback) {
const path = require('path');
const fs = require('fs');
function _handleError(errorMessage, statusCode) {
logger.error(`[video-qoe-injection:responses]`, errorMessage);
return {
statusCode,
body: {}
}
}
function _sendFile(filepath) {
const data = fs.readFileSync(filepath, 'utf-8');
return {
statusCode: 200,
headers: {'Content-Type': 'application/vnd.apple.mpegurl'},
body: data
}
}
if (request && request.method === 'GET') {
if (path.extname(uri) === '.m3u8') {
filepath = path.join(M3U8_FILE_PATH);
return _sendFile(filepath);
}
} else if (path.extname(uri) === '.ts') {
filepath = path.join(TS_FILE_PATH)
let body = '';
const stream = fs.createReadStream(filepath, { bufferSize: 64 * 1024 });
stream.on('data', (data) => {
body += data.toString();
});
stream.on('end', () => {
const stubResponse = {
statusCode: 200,
headers: {'Content-Type': 'video/MP2T'},
body
}
callback(stubResponse);
});
}
}
我用纯节点实现尝试了这个,它可以工作,但是,当我将它移植到 Mountebank 时,我得到一个控制台日志错误,并出现以下错误:
hls.0.12.4.min.js:1 Uncaught (in promise) DOMException: The play() request was interrupted by a new load request.
player.js:57 Player error: mediaError - fragParsingError
不确定我在这里缺少什么,Mountebank 不支持流响应吗?我什至尝试.ts
使用但 hls.js 读取文件,const data = fs.readFileSync(filepath)
但似乎不喜欢这样并得到承诺拒绝。