From fdc537d69ad44322179fbc2d52ff7f2524494bd7 Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Sun, 30 Jul 2023 23:09:11 +0900 Subject: [PATCH] Add sub and metadata extraction on the new transcoder --- .env.example | 2 +- docker-compose.dev.yml | 2 + docker-compose.prod.yml | 2 + docker-compose.yml | 2 + transcoder/Cargo.lock | 12 ++++ transcoder/Cargo.toml | 1 + transcoder/src/identify.rs | 123 +++++++++++++++++++++++++++++------- transcoder/src/main.rs | 89 ++++++++++++++++++++++---- transcoder/src/transcode.rs | 2 +- 9 files changed, 199 insertions(+), 36 deletions(-) diff --git a/.env.example b/.env.example index 7dc4f780..3259c744 100644 --- a/.env.example +++ b/.env.example @@ -1,5 +1,5 @@ # Useful config options -LIBRARY_ROOT=/video +LIBRARY_ROOT=./video CACHE_ROOT=/tmp/kyoo_cache LIBRARY_LANGUAGES=en diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index fdc036df..53c9f06c 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -63,6 +63,7 @@ services: - ./transcoder:/app - ${LIBRARY_ROOT}:/video - ${CACHE_ROOT}:/cache + - metadata:/metadata ingress: image: nginx @@ -99,3 +100,4 @@ services: volumes: kyoo: db: + metadata: diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 57cea1d8..dddb7e13 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -41,6 +41,7 @@ services: volumes: - ${LIBRARY_ROOT}:/video - ${CACHE_ROOT}:/cache + - metadata:/metadata ingress: image: nginx @@ -73,3 +74,4 @@ services: volumes: kyoo: db: + metadata: diff --git a/docker-compose.yml b/docker-compose.yml index 14bfe964..8ed6c818 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -41,6 +41,7 @@ services: volumes: - ${LIBRARY_ROOT}:/video - ${CACHE_ROOT}:/cache + - metadata:/metadata ingress: image: nginx @@ -73,3 +74,4 @@ services: volumes: kyoo: db: + metadata: diff --git a/transcoder/Cargo.lock b/transcoder/Cargo.lock index d2dd0728..beab38a2 100644 --- a/transcoder/Cargo.lock +++ b/transcoder/Cargo.lock @@ -1112,6 +1112,17 @@ dependencies = [ "serde", ] +[[package]] +name = "sha-1" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + [[package]] name = "sha1" version = "0.10.5" @@ -1306,6 +1317,7 @@ dependencies = [ "rand", "reqwest", "serde", + "sha-1", "tokio", "utoipa", ] diff --git a/transcoder/Cargo.toml b/transcoder/Cargo.toml index 23d66708..86869909 100644 --- a/transcoder/Cargo.toml +++ b/transcoder/Cargo.toml @@ -13,3 +13,4 @@ derive_more = "0.99.17" reqwest = { version = "0.11.16", default_features = false, features = ["json", "rustls-tls"] } utoipa = { version = "3", features = ["actix_extras"] } json = "0.12.4" +sha-1 = "0.10.1" diff --git a/transcoder/src/identify.rs b/transcoder/src/identify.rs index e6478099..fe3f76dc 100644 --- a/transcoder/src/identify.rs +++ b/transcoder/src/identify.rs @@ -1,6 +1,12 @@ use json::JsonValue; use serde::Serialize; -use std::str::{self, FromStr}; +use sha1::{Sha1, Digest}; +use std::{ + fs, + path::PathBuf, + process::Stdio, + str::{self, FromStr}, io, +}; use tokio::process::Command; use utoipa::ToSchema; @@ -8,18 +14,21 @@ use crate::transcode::Quality; #[derive(Serialize, ToSchema)] pub struct MediaInfo { + pub sha: String, + /// The internal path of this track. + pub path: String, /// The length of the media in seconds. pub length: f32, pub container: String, - pub video: VideoTrack, - pub audios: Vec, - pub subtitles: Vec, + pub video: Video, + pub audios: Vec