์๋ฌ ํด๊ฒฐ - video.duration ๊ฐ์ ธ์ค๊ธฐ
๋ณต์ต - SETUP / EXPRESS / MONGODB AND MONGOOSE(๊ฐ์ง ๋ฐ์ดํฐ๋ฒ ์ด์ค)
๋ก์ปฌ์์ AWS S3๋ก ์ ์ฅ์๋ฅผ ์ฎ๊ธด ํ video.duration์ ๊ฐ์ ๊ฐ์ ธ์ค์ง ๋ชปํด
๋น๋์ค ํ๋ ์ด์ด์ ์ ์ฒด ๋์์์ ๊ธธ์ด๊ฐ ๋จ์ง ์๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
์ฒ์์๋ video.duration์ ๋ชป ๋ฐ์์ค๋ ๊ฒ ๋ฌธ์ ์ธ ์ค ์์๋๋ฐ ์๊ณ ๋ณด๋ ์ ์ด์ lodeaddata ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ง ์๋
๊ฒ์ด ๋ฌธ์ ์๋ค. loadedmetadata๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ด๋ป๊ฒ ํด๋ ์ผ์ด๋์ง ์์๋ค.
(ํ์ฌ ์๋ฌ๋ฅผ ํด๊ฒฐํ๊ธฐ๋ ํ์ง๋ง, loadeddata ์ด๋ฒคํธ๊ฐ ์ ๋ฐ์ํ์ง ์์๋ ๊ฒ์ธ์ง๋ ์์ง๋ ๋ชจ๋ฅด๊ฒ ๋ค.)
๊ทธ๋์ watch ํ์ด์ง์ ๋ค์ด๊ฐ์ video๋ง ์๋ค๋ฉด video.duration์ ๊ฐ์ ธ์ค๋ handleLoadedData ํจ์๊ฐ ๋ฐ๋ก ์คํ๋๋๋ก ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ค.
// videoPlayer.js
const formatTime = (seconds) => new Date(seconds * 1000).toISOString().substring(14, 19);
const handleLoadedData = () => {
totalTime.innerText = formatTime(Math.floor(video.duration));
timeline.max = Math.floor(video.duration);
};
// ์ถ๊ฐ โ
if (video) {
handleLoadedData();
}
video.addEventListener("loadeddata", handleLoadedData);
๊ทธ๋ฌ๋ ๊ทธ๋ ๊ฒ๋ง ์์ฑํ๋ฉด heroku์์๋ ์ ์๋ํ์ง๋ง ๋ฐ๋๋ก Local์์๋ videoplayer๊ฐ ์์ ๋จ์ง ์์ผ๋ฉด์ ์ฝ์์ ๋ค์๊ณผ ๊ฐ์ ์๋ฌ๊ฐ ์ถ๋ ฅ๋๋ค.
Uncaught RangeError: Invalid time value
at Date.toISOString ()
watch ํ์ด์ง์ ๋ค์ด๊ฐ๊ธฐ๋ง ํ๋ฉด(๋ค์ ๋งํด, video.duration์ ํฌํจํ ๋์์์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๋ loadedmetadata ์ด๋ฒคํธ๊ฐ ์ฐจ๋ง ๋ฐ์ํ๊ธฐ๋ ์ ์) video.duration ๊ฐ์ ๊ฐ์ ธ์ค๋ handleLoadedData ํจ์๊ฐ ์คํ๋๊ธฐ ๋๋ฌธ์ video.duration์ด NAN ๊ฐ์ ๊ฐ์ง๊ฒ ๋์ด formatTime ํจ์์์ NAN * 1000์ ์ ์์ ์ผ๋ก ๊ณ์ฐํ ์ ์์ด ๋ฐ์ํ๋ ์๋ฌ์๋ค.
๊ทธ๋์ ์์ handleLoadedData ํจ์๋ watch ํ์ด์ง์ ๋ค์ด๊ฐ์ ๋ & Heroku ์๋ฒ์ ์์ ๋๋ง ์คํ๋๋๋ก isHeroku ๋ณ์๋ฅผ ์ถ๊ฐํ๋ค.
const formatTime = (seconds) => new Date(seconds * 1000).toISOString().substring(14, 19);
const handleLoadedData = () => {
totalTime.innerText = formatTime(Math.floor(video.duration));
timeline.max = Math.floor(video.duration);
};
// ์ถ๊ฐ โ
const isHeroku = process.env.NODE_ENV === "production";
// ์์ โ
if (isHeroku && video) {
handleLoadedData();
}
video.addEventListener("loadeddata", handleLoadedData);
์ด์ Heroku์ Local ๋ชจ๋์์ ์ ์์ ์ผ๋ก video.duration์ ๊ฐ์ ธ์ ๋น๋์ค ํ๋ ์ด์ด์ ํ์๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ฒ์๋ถํฐ ๋ค์ ๊ตฌํ ์์
์ค์ ์ฝ๋๋ github์ ์ฌ๋ฆผ(wetube_v2)
ํ / ํ์๊ฐ์ / ๋ก๊ทธ์ธ /๊ฒ์
app.use("/", rootRouter);
ํ๋กํ ๋ณด๊ธฐ / ํ๋กํ ์์ / ๋ก๊ทธ์์
app.use("/", userRouter);
๋น๋์ค ์ ๋ก๋ / ๋น๋์ค ๋ณด๊ธฐ / ๋น๋์ค ์์ / ๋น๋์ค ์ญ์
app.use("/", videoRouter);