aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common/src/config.rs5
-rw-r--r--common/src/jhls.rs20
-rw-r--r--common/src/lib.rs19
-rw-r--r--stream/src/jhls.rs1
-rw-r--r--transcoder/src/snippet.rs2
-rw-r--r--web/script/player/jhls.d.ts46
-rw-r--r--web/script/player/mod.ts35
7 files changed, 74 insertions, 54 deletions
diff --git a/common/src/config.rs b/common/src/config.rs
index e30e70b..2666d17 100644
--- a/common/src/config.rs
+++ b/common/src/config.rs
@@ -4,7 +4,7 @@
Copyright (C) 2023 metamuffin <metamuffin.org>
*/
-use crate::{user::PermissionSet, EncodingProfile};
+use crate::{jhls::EncodingProfile, user::PermissionSet};
use serde::{Deserialize, Serialize};
use std::{collections::HashMap, path::PathBuf};
@@ -30,9 +30,10 @@ pub struct GlobalConfig {
}
mod default {
- use crate::EncodingProfile;
use std::path::PathBuf;
+ use crate::jhls::EncodingProfile;
+
pub fn admin_username() -> String {
"admin".into()
}
diff --git a/common/src/jhls.rs b/common/src/jhls.rs
index 306161f..e3ef23c 100644
--- a/common/src/jhls.rs
+++ b/common/src/jhls.rs
@@ -5,6 +5,7 @@ use std::ops::Range;
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct JhlsMetadata {
pub duration: f64,
+ pub extra_profiles: Vec<EncodingProfile>,
pub tracks: Vec<JhlsTrack>,
}
@@ -13,3 +14,22 @@ pub struct JhlsTrack {
pub info: SourceTrack,
pub segments: Vec<Range<f64>>,
}
+
+#[derive(Debug, Clone, Deserialize, Serialize)]
+#[serde(rename_all = "snake_case")]
+pub enum EncodingProfile {
+ Video {
+ codec: String,
+ preset: u8,
+ bitrate: usize,
+ width: usize,
+ },
+ Audio {
+ codec: String,
+ bitrate: usize,
+ sample_rate: Option<f64>,
+ },
+ Subtitles {
+ codec: String,
+ },
+}
diff --git a/common/src/lib.rs b/common/src/lib.rs
index 6d1a78c..c425c21 100644
--- a/common/src/lib.rs
+++ b/common/src/lib.rs
@@ -142,22 +142,3 @@ pub enum SourceTrackKind {
},
Subtitles,
}
-
-#[derive(Debug, Clone, Deserialize, Serialize)]
-#[serde(rename_all = "snake_case")]
-pub enum EncodingProfile {
- Video {
- codec: String,
- preset: u8,
- bitrate: usize,
- width: usize,
- },
- Audio {
- codec: String,
- bitrate: usize,
- sample_rate: Option<f64>,
- },
- Subtitles {
- codec: String,
- },
-}
diff --git a/stream/src/jhls.rs b/stream/src/jhls.rs
index d528c06..5183a26 100644
--- a/stream/src/jhls.rs
+++ b/stream/src/jhls.rs
@@ -42,6 +42,7 @@ pub async fn jhls_stream(
let out = serde_json::to_string(&JhlsMetadata {
tracks,
+ extra_profiles: CONF.transcoding_profiles.clone(),
duration: media.duration,
})?;
tokio::spawn(async move { b.write_all(out.as_bytes()).await });
diff --git a/transcoder/src/snippet.rs b/transcoder/src/snippet.rs
index 9253c2c..42847a0 100644
--- a/transcoder/src/snippet.rs
+++ b/transcoder/src/snippet.rs
@@ -5,7 +5,7 @@
*/
use jellybase::cache::async_cache_file;
-use jellycommon::{AssetLocation, EncodingProfile};
+use jellycommon::{jhls::EncodingProfile, AssetLocation};
use log::info;
use std::process::Stdio;
use tokio::{
diff --git a/web/script/player/jhls.d.ts b/web/script/player/jhls.d.ts
new file mode 100644
index 0000000..b1b6a57
--- /dev/null
+++ b/web/script/player/jhls.d.ts
@@ -0,0 +1,46 @@
+
+export interface TimeRange { start: number, end: number }
+export interface JhlsMetadata {
+ tracks: JhlsTrack[],
+ extra_profiles: EncodingProfile[],
+ duration: number,
+}
+export interface JhlsTrack {
+ info: SourceTrack,
+ segments: TimeRange[],
+}
+export interface SourceTrack {
+ kind: SourceTrackKind,
+ name: string,
+ codec: string,
+ language: string,
+}
+export interface SourceTrackKind {
+ video?: {
+ width: number,
+ height: number,
+ fps: number,
+ },
+ audio?: {
+ channels: number,
+ sample_rate: number,
+ bit_depth: number,
+ },
+ subtitles?: boolean,
+}
+export interface EncodingProfile {
+ video?: {
+ codec: string,
+ preset: number,
+ bitrate: number,
+ width: number,
+ },
+ audio?: {
+ codec: string,
+ bitrate: number,
+ sample_rate?: number,
+ },
+ subtitles?: {
+ codec: string,
+ },
+} \ No newline at end of file
diff --git a/web/script/player/mod.ts b/web/script/player/mod.ts
index 52da454..caad781 100644
--- a/web/script/player/mod.ts
+++ b/web/script/player/mod.ts
@@ -4,35 +4,7 @@
Copyright (C) 2023 metamuffin <metamuffin.org>
*/
import { OVar, e } from "../jshelper/mod.ts";
-
-export interface Range { start: number, end: number }
-export interface JhlsMetadata {
- tracks: JhlsTrack[],
- duration: number,
-}
-export interface JhlsTrack {
- info: SourceTrack,
- segments: Range[],
-}
-export interface SourceTrack {
- kind: SourceTrackKind,
- name: string,
- codec: string,
- language: string,
-}
-export interface SourceTrackKind {
- video?: {
- width: number,
- height: number,
- fps: number,
- },
- audio?: {
- channels: number,
- sample_rate: number,
- bit_depth: number,
- },
- subtitles?: boolean,
-}
+import { JhlsMetadata, JhlsTrack, TimeRange } from "./jhls.d.ts";
const TARGET_BUFFER_DURATION = 15
const MIN_BUFFER_DURATION = 1
@@ -148,7 +120,7 @@ function display_time(t: number): string {
return (h ? h + "h" : "") + (m ? m + "m" : "") + (s ? s + "s" : "")
}
-interface BufferRange extends Range { status: "buffered" | "loading" | "queued" }
+interface BufferRange extends TimeRange { status: "buffered" | "loading" | "queued" }
class Player {
public video = e("video")
private media_source = new MediaSource();
@@ -240,10 +212,9 @@ class Player {
await this.update(p)
this.video.currentTime = p
}
-
}
-interface AppendRange extends Range { buf: ArrayBuffer, index: number, cb: () => void }
+interface AppendRange extends TimeRange { buf: ArrayBuffer, index: number, cb: () => void }
class PlayerTrack {
private source_buffer: SourceBuffer
private current_load?: AppendRange