Add video file metadata to download modal, via ffprobe (#2411)

* Add video file metadata via ffprobe

* Federate video file metadata

* Add tests for file metadata generation

* Complete tests for videoFile metadata federation

* Lint migration and video-file for metadata

* Objectify metadata from getter in ffmpeg-utils

* Add metadataUrl to all videoFiles

* Simplify metadata API middleware

* Load playlist in videoFile when requesting metadata
This commit is contained in:
Rigel Kent
2020-03-10 14:39:40 +01:00
committed by GitHub
parent edb868655e
commit 8319d6ae72
23 changed files with 553 additions and 52 deletions

View File

@@ -28,6 +28,15 @@ export type ActivityPlaylistSegmentHashesObject = {
href: string
}
export type ActivityVideoFileMetadataObject = {
type: 'Link'
rel: [ 'metadata', any ]
mediaType: 'application/json'
height: number
href: string
fps: number
}
export type ActivityPlaylistInfohashesObject = {
type: 'Infohash'
name: string
@@ -80,6 +89,7 @@ export type ActivityTagObject =
| ActivityMentionObject
| ActivityBitTorrentUrlObject
| ActivityMagnetUrlObject
| ActivityVideoFileMetadataObject
export type ActivityUrlObject =
ActivityVideoUrlObject
@@ -87,6 +97,7 @@ export type ActivityUrlObject =
| ActivityBitTorrentUrlObject
| ActivityMagnetUrlObject
| ActivityHtmlUrlObject
| ActivityVideoFileMetadataObject
export interface ActivityPubAttributedTo {
type: 'Group' | 'Person'

View File

@@ -0,0 +1,18 @@
import { FfprobeData } from "fluent-ffmpeg"
import { DeepOmit } from "@server/models/utils"
export type VideoFileMetadataModel = DeepOmit<FfprobeData, 'filename'>
export class VideoFileMetadata implements VideoFileMetadataModel {
streams: { [x: string]: any, [x: number]: any }[]
format: { [x: string]: any, [x: number]: any }
chapters: any[]
constructor (hash: Partial<VideoFileMetadataModel>) {
this.chapters = hash.chapters
this.format = hash.format
this.streams = hash.streams
delete this.format.filename
}
}

View File

@@ -1,4 +1,5 @@
import { VideoConstant, VideoResolution } from '@shared/models'
import { FfprobeData } from 'fluent-ffmpeg'
export interface VideoFile {
magnetUri: string
@@ -9,4 +10,6 @@ export interface VideoFile {
fileUrl: string
fileDownloadUrl: string
fps: number
metadata?: FfprobeData
metadataUrl?: string
}