UNPKG

1.46 kBJavaScriptView Raw
1"use strict";
2// Calculate the `.currentTime` of a video or audio element
3Object.defineProperty(exports, "__esModule", { value: true });
4exports.getMediaTime = exports.getExpectedMediaFrameUncorrected = void 0;
5const interpolate_1 = require("../interpolate");
6const getExpectedMediaFrameUncorrected = ({ frame, playbackRate, startFrom, }) => {
7 return (0, interpolate_1.interpolate)(frame, [-1, startFrom, startFrom + 1], [-1, startFrom, startFrom + playbackRate]);
8};
9exports.getExpectedMediaFrameUncorrected = getExpectedMediaFrameUncorrected;
10const getMediaTime = ({ fps, frame, src, playbackRate, startFrom, }) => {
11 const expectedFrame = (0, exports.getExpectedMediaFrameUncorrected)({
12 frame,
13 playbackRate,
14 startFrom,
15 });
16 if (src.endsWith('mp4')) {
17 // In Chrome, for MP4s, if 30fps, the first frame is still displayed at 0.033333
18 // even though after that it increases by 0.033333333 each.
19 // So frame = 0 in Remotion is like frame = 1 for the browser
20 return (expectedFrame + 1) / fps;
21 }
22 if (src.endsWith('webm')) {
23 // For WebM videos, we need to add a little bit of shift to get the right frame.
24 const msPerFrame = 1000 / fps;
25 const msShift = msPerFrame / 2;
26 return (expectedFrame * msPerFrame + msShift) / 1000;
27 }
28 // For audio, we don't do any shift correction
29 return expectedFrame / fps;
30};
31exports.getMediaTime = getMediaTime;