Node.js
클라이언트에 파일 스트림 보내기
수색…
fs 및 파이프를 사용하여 서버에서 정적 파일 스트리밍
좋은 VOD (Video On Demand) 서비스는 기본으로 시작해야합니다. 서버에 공개적으로 액세스 할 수없는 디렉토리가 있지만 사용자가 미디어에 액세스 할 수있게하려는 일종의 포털이나 페이 월 (paywall)을 통해 있다고 가정 해 보겠습니다.
var movie = path.resolve('./public/' + req.params.filename);
fs.stat(movie, function (err, stats) {
var range = req.headers.range;
if (!range) {
return res.sendStatus(416);
}
//Chunk logic here
var positions = range.replace(/bytes=/, "").split("-");
var start = parseInt(positions[0], 10);
var total = stats.size;
var end = positions[1] ? parseInt(positions[1], 10) : total - 1;
var chunksize = (end - start) + 1;
res.writeHead(206, {
'Transfer-Encoding': 'chunked',
"Content-Range": "bytes " + start + "-" + end + "/" + total,
"Accept-Ranges": "bytes",
"Content-Length": chunksize,
"Content-Type": mime.lookup(req.params.filename)
});
var stream = fs.createReadStream(movie, { start: start, end: end, autoClose: true })
.on('end', function () {
console.log('Stream Done');
})
.on("error", function (err) {
res.end(err);
})
.pipe(res, { end: true });
});
위의 스 니펫은 동영상을 클라이언트로 스트리밍하는 방법에 대한 기본 개요입니다. 청크 로직은 네트워크 트래픽 및 대기 시간과 같은 다양한 요소에 따라 달라집니다. 척 크기와 양 간의 균형을 맞추는 것이 중요합니다.
마지막으로 .pipe 호출을 사용하면 node.js가 서버와의 연결을 유지하고 필요에 따라 추가 청크를 보내도록 알릴 수 있습니다.
Fluent-ffmpeg를 사용하여 스트리밍
flent-ffmpeg를 사용하여 .mp4 파일을 .flv 파일 또는 다른 유형으로 변환 할 수도 있습니다.
res.contentType ( 'flv');
var pathToMovie = './public/' + req.params.filename;
var proc = ffmpeg(pathToMovie)
.preset('flashvideo')
.on('end', function () {
console.log('Stream Done');
})
.on('error', function (err) {
console.log('an error happened: ' + err.message);
res.send(err.message);
})
.pipe(res, { end: true });
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow