MongoDB를 사용하여 비디오 스트리밍 서버를 코딩하는 방법
21644 단어 nodemongodbtutorialjavascript
하지만!
동영상을 MongoDB에 저장하고 NodeJS를 통해 스트리밍하는 방법도 알고 싶다면 이 게시물이 적합합니다!
최종 결과
순수한 NodeJS 솔루션과 마찬가지로 최종 결과는 서버에서 비디오를 스트리밍하는 단일 HTML5 비디오입니다. 타임라인의 회색 막대를 보세요! 버퍼링입니다! 😃
프로젝트를 git clone하려는 경우 다음은 저장소에 대한 링크입니다https://github.com/Abdisalan/blog-code-examples/tree/master/mongo-http-video.
이지 모드
docker가 설치되어 있으면 내 docker compose 파일을 사용하여 패키지를 설치할 필요 없이 프로젝트를 실행할 수 있습니다. 이러한 docker 작성 명령을 실행하고
bigbuck.mp4
폴더에서 http-video-stream
폴더로 mongo-http-video
파일을 복사하기만 하면 됩니다.docker-compose up -d
# When you're done with it, you can tear it down using
docker-compose down -v
그리고 프로젝트는
localhost:8000
에서 실행될 것입니다.문서의 나머지 부분은 처음부터 빌드하는 방법에 대한 지침입니다. 즐기다!
파트 1: 몽고DB
MongoDB는 WSL(Linux용 Windows 하위 시스템)을 지원하지 않으므로 WSL을 사용하려면 docker를 사용하는 것이 좋습니다. 그렇지 않으면 Windows에서 잘 작동합니다.
MongoDB를 설치하고 Windows를 사용 중인 경우 다음 명령(exe 파일)은
C:\Program Files\MongoDB\Server\4.4\bin
에 있어야 합니다.해당 폴더에서 터미널을 열거나 PATH에 추가하고
mongod
프로세스를 시작합니다.mongod
파트 2: 노드 프로젝트 설정
다른 터미널에서 이 명령은 프로젝트 폴더를 만들고 노드 프로젝트를 시작합니다.
mkdir mongo-video-stream
cd mongo-video-stream
npm init
npm install --save express nodemon mongodb
파트 3: index.html
HTML5 비디오 요소가 있는 페이지를 만들고 서버가 mongoDB에서 비디오를 스트리밍할 소스를
"/mongo-video"
로 설정해야 합니다.<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>HTTP Video Stream From MongoDB</title>
</head>
<body>
<video id="videoPlayer" width="650" controls muted="muted" autoplay>
<source src="/mongo-video" type="video/mp4" />
</video>
</body>
</html>
파트 4: Index.js
루트
"/"
엔드포인트가 index.html 페이지를 제공하도록 노드 서버를 설정합니다.const express = require("express");
const app = express();
app.get("/", function (req, res) {
res.sendFile(__dirname + "/index.html");
});
app.listen(8000, function () {
console.log("Listening on port 8000!");
});
파트 5: package.json -- 서버 실행
start
명령을 사용하여 서버를 실행할 수 있도록 package.json
스크립트를 npm start
에 추가하십시오.{
"scripts": {
"start": "nodemon index.js"
}
}
이제
npm start
를 실행할 수 있습니다. 브라우저를 열고 http://localhost:8000
로 이동하여 작동하는지 확인하십시오!중간 체크인
잘 지내? 물도 마시고, 자세도 고치고, 어깨도 풀고 😁
당신은 좋은 부분에 도달하려고합니다!
파트 6: index.js(업로드)
로컬 비디오를 mongodb에 업로드할 수 있는 엔드포인트를 추가합니다. 내가 사용하고 있는 비디오 파일은
bigbuck.mp4
이며 내 githubhttps://github.com/Abdisalan/blog-code-examples/tree/master/http-video-stream에서 찾을 수 있습니다.그러나 자신의 비디오 파일을 사용할 수 있습니다!
const express = require("express");
const app = express();
const fs = require("fs");
const mongodb = require('mongodb');
const url = 'mongodb://localhost:27017';
app.get("/", function (req, res) {
res.sendFile(__dirname + "/index.html");
});
// Sorry about this monstrosity -- just for demo purposes
app.get('/init-video', function (req, res) {
mongodb.MongoClient.connect(url, function (error, client) {
if (error) {
res.json(error);
return;
}
// connect to the videos database
const db = client.db('videos');
// Create GridFS bucket to upload a large file
const bucket = new mongodb.GridFSBucket(db);
// create upload stream using GridFS bucket
const videoUploadStream = bucket.openUploadStream('bigbuck');
// You can put your file instead of bigbuck.mp4
const videoReadStream = fs.createReadStream('./bigbuck.mp4');
// Finally Upload!
videoReadStream.pipe(videoUploadStream);
// All done!
res.status(200).send("Done...");
});
});
app.listen(8000, function () {
console.log("Listening on port 8000!");
});
index.js 파일을 저장한 후 서버를 다시 시작해야 합니다(우리가 nodemon을 사용하고 있기 때문). 비디오가 준비되면 브라우저에서
localhost:8000/init-video
로 이동하면 로컬 파일이 mongodb에 업로드됩니다!거의 다 왔어!
파일이 업로드되었는지 다시 확인하려면 다른 터미널을 열고 mongodb에 연결하십시오.
mongo
그런 다음 비디오 데이터베이스로 이동하여 GridFS의 컬렉션
fs.files
에 있는 문서 수를 계산합니다.use videos
db.fs.files.count()
localhost:8000/init-video
를 로드할 때마다 비디오 파일을 업로드하기 때문에 카운트는 /init-video
에 간 횟수여야 합니다.파트 7: index.js(스트리밍)
마지막으로
/mongo-video
엔드포인트를 추가하여 비디오를 스트리밍할 것입니다!app.get("/mongo-video", function (req, res) {
mongodb.MongoClient.connect(url, function (error, client) {
if (error) {
res.status(500).json(error);
return;
}
// Check for range headers to find our start time
const range = req.headers.range;
if (!range) {
res.status(400).send("Requires Range header");
}
const db = client.db('videos');
// GridFS Collection
db.collection('fs.files').findOne({}, (err, video) => {
if (!video) {
res.status(404).send("No video uploaded!");
return;
}
// Create response headers
const videoSize = video.length;
const start = Number(range.replace(/\D/g, ""));
const end = videoSize - 1;
const contentLength = end - start + 1;
const headers = {
"Content-Range": `bytes ${start}-${end}/${videoSize}`,
"Accept-Ranges": "bytes",
"Content-Length": contentLength,
"Content-Type": "video/mp4",
};
// HTTP Status 206 for Partial Content
res.writeHead(206, headers);
// Get the bucket and download stream from GridFS
const bucket = new mongodb.GridFSBucket(db);
const downloadStream = bucket.openDownloadStreamByName('bigbuck', {
start
});
// Finally pipe video to response
downloadStream.pipe(res);
});
});
});
파일을 저장하고
localhost:8000
로 한 번 더 이동하면 비디오가 스트리밍되어야 합니다!결론
이를 통해 나만의 기본 YouTube 또는 Netflix 앱을 만들 수 있습니다!
이것이 어떻게 작동하는지에 대한 이론과 함께 한 줄씩 심도 있는 설명을 보려면 consider watching my YouTube video.
이것은 이 작업을 수행하는 방법에 대한 기본적인 개요였습니다. 이러한 주제(mongodb, 스트리밍 이론)에 대한 심층적인 블로그 게시물을 원하는 경우 아래에 댓글을 달아주세요!
행복한 스트리밍! ✌
부인 성명
가장 최적화된 아키텍처가 아니기 때문에 프로덕션 환경에서 사용하면 안 됩니다 😋
Reference
이 문제에 관하여(MongoDB를 사용하여 비디오 스트리밍 서버를 코딩하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/abdisalan_js/how-to-stream-video-from-mongodb-using-nodejs-4ibi텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)