aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/client/views/nodes/RecordingBox/RecordingView.tsx50
-rw-r--r--src/server/DashUploadUtils.ts17
2 files changed, 55 insertions, 12 deletions
diff --git a/src/client/views/nodes/RecordingBox/RecordingView.tsx b/src/client/views/nodes/RecordingBox/RecordingView.tsx
index 994111bd4..3fd062483 100644
--- a/src/client/views/nodes/RecordingBox/RecordingView.tsx
+++ b/src/client/views/nodes/RecordingBox/RecordingView.tsx
@@ -7,9 +7,9 @@ import { FaCheckCircle } from 'react-icons/fa';
import { IconContext } from "react-icons";
import { Networking } from '../../../Network';
import { Upload } from '../../../../server/SharedMediaTypes';
-const ffmpeg = require("fluent-ffmpeg");
import { RecordingApi } from '../../../util/RecordingApi';
+import { DashUploadUtils } from '../../../../server/DashUploadUtils';
interface MediaSegment {
videoChunks: any[],
@@ -61,24 +61,50 @@ export function RecordingView(props: IRecordingViewProps) {
if (finished) {
(async () => {
const inputPaths: string[] = [];
+ const videoFiles: File[] = []
videos.forEach(async (vid, i) => {
const videoFile = new File(vid.videoChunks, `segvideo${i}.mkv`, { type: vid.videoChunks[0].type, lastModified: Date.now() });
+ videoFiles.push(videoFile);
+
const { name } = videoFile;
- ffmpeg(name)
inputPaths.push(name)
});
-
-
+
+
+
+ // const inputListName = 'order.txt';
+ // fs.writeFileSync(inputListName, inputPaths.join('\n'));
+
+ // var merge = ffmpeg();
+ // merge.input(inputListName)
+ // .inputOptions(['-f concat', '-safe 0'])
+ // .outputOptions('-c copy')
+ // .save('output.mp4')
+
+ // fs.unlinkSync(inputListName);
+
+ const combined = await DashUploadUtils.combineSegments(videoFiles, inputPaths)
+ console.log('combined', combined)
+
+ // const outputFile = new File(['output.mp4'], 'output.mp4', { type: 'video/mp4', lastModified: Date.now() });
+
+ const data = await Networking.UploadFilesToServer(combined)
+ const result = data[0].result
+ if (!(result instanceof Error)) { // convert this screenshotBox into normal videoBox
+ props.setResult(result, trackScreen)
+ } else {
+ alert("video conversion failed");
+ }
- if (format.includes("x-matroska")) {
- await new Promise(res => ffmpeg(file.path)
- .videoCodec("copy") // this will copy the data instead of reencode it
- .save(file.path.replace(".mkv", ".mp4"))
- .on('end', res));
- file.path = file.path.replace(".mkv", ".mp4");
- format = ".mp4";
- }
+ // if (format.includes("x-matroska")) {
+ // await new Promise(res => ffmpeg(file.path)
+ // .videoCodec("copy") // this will copy the data instead of reencode it
+ // .save(file.path.replace(".mkv", ".mp4"))
+ // .on('end', res));
+ // file.path = file.path.replace(".mkv", ".mp4");
+ // format = ".mp4";
+ // }
// console.log('crossOriginIsolated', crossOriginIsolated)
// props.setDuration(recordingTimer * 100)
diff --git a/src/server/DashUploadUtils.ts b/src/server/DashUploadUtils.ts
index 552ab57a5..0c4f87905 100644
--- a/src/server/DashUploadUtils.ts
+++ b/src/server/DashUploadUtils.ts
@@ -17,9 +17,11 @@ import { resolvedServerUrl } from "./server_Initialization";
import { AcceptableMedia, Upload } from './SharedMediaTypes';
import request = require('request-promise');
import formidable = require('formidable');
+import { output } from '../../webpack.config';
const { exec } = require("child_process");
const parse = require('pdf-parse');
const ffmpeg = require("fluent-ffmpeg");
+const fs = require("fs");
const requestImageSize = require("../client/util/request-image-size");
export enum SizeSuffix {
@@ -60,6 +62,21 @@ export namespace DashUploadUtils {
const type = "content-type";
const { imageFormats, videoFormats, applicationFormats, audioFormats } = AcceptableMedia; //TODO:glr
+
+ export async function combineSegments(filePtr: File[], inputPaths: string[]): Promise<File> {
+ const inputListName = 'order.txt';
+
+ return new Promise<File>((resolve, reject) => {
+ fs.writeFileSync(inputListName, inputPaths.join('\n'));
+ ffmpeg(inputListName).inputOptions(['-f concat', '-safe 0']).outputOptions('-c copy').save('output.mp4')
+ .on("error", reject)
+ .on("end", () => {
+ fs.unlinkSync(inputListName);
+ filePtr[0].path = 'output.mp4';
+ resolve(filePtr[0]);
+ });
+ });
+ }
export function uploadYoutube(videoId: string): Promise<Upload.FileResponse> {
console.log("UPLOAD " + videoId);