aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-01-29 13:22:21 +0100
committermetamuffin <metamuffin@disroot.org>2024-01-29 13:22:21 +0100
commit2676e755286d117b100d379fce84ec3da6d8ae98 (patch)
tree2a075db5468f0c8c2f653be5222c183f4362fcfa
parenta4526fd2eb670c8fac2c28eb1597f0c091f25a2a (diff)
downloadjellything-2676e755286d117b100d379fce84ec3da6d8ae98.tar
jellything-2676e755286d117b100d379fce84ec3da6d8ae98.tar.bz2
jellything-2676e755286d117b100d379fce84ec3da6d8ae98.tar.zst
consistent name for {snippet,segment?,fragment}
-rw-r--r--common/src/stream.rs4
-rw-r--r--common/src/user.rs2
-rw-r--r--remuxer/src/fragment.rs (renamed from remuxer/src/snippet.rs)22
-rw-r--r--remuxer/src/lib.rs4
-rw-r--r--stream/src/fragment.rs (renamed from stream/src/segment.rs)8
-rw-r--r--stream/src/hls.rs8
-rw-r--r--stream/src/jhls.rs2
-rw-r--r--stream/src/lib.rs8
-rw-r--r--stream/src/webvtt.rs2
-rw-r--r--transcoder/src/fragment.rs (renamed from transcoder/src/snippet.rs)0
-rw-r--r--transcoder/src/lib.rs2
-rw-r--r--web/script/player/track/mse.ts2
12 files changed, 32 insertions, 32 deletions
diff --git a/common/src/stream.rs b/common/src/stream.rs
index aa7195e..d0b1373 100644
--- a/common/src/stream.rs
+++ b/common/src/stream.rs
@@ -28,7 +28,7 @@ pub enum StreamFormat {
#[cfg_attr(feature = "rocket", field(value = "hlsmaster"))] HlsMaster,
#[cfg_attr(feature = "rocket", field(value = "hlsvariant"))] HlsVariant,
#[cfg_attr(feature = "rocket", field(value = "jhlsi"))] JhlsIndex,
- #[cfg_attr(feature = "rocket", field(value = "snippet"))] Snippet,
+ #[cfg_attr(feature = "rocket", field(value = "frag"))] Fragment,
#[cfg_attr(feature = "rocket", field(value = "webvtt"))] Webvtt,
#[cfg_attr(feature = "rocket", field(value = "jvtt"))] Jvtt,
}
@@ -85,7 +85,7 @@ impl StreamFormat {
StreamFormat::HlsMaster => "hlsmaster",
StreamFormat::HlsVariant => "hlsvariant",
StreamFormat::JhlsIndex => "jhlsi",
- StreamFormat::Snippet => "snippet",
+ StreamFormat::Fragment => "frag",
StreamFormat::Webvtt => "webvtt",
}
}
diff --git a/common/src/user.rs b/common/src/user.rs
index 81e1cc9..085f9db 100644
--- a/common/src/user.rs
+++ b/common/src/user.rs
@@ -99,7 +99,7 @@ impl UserPermission {
| ManageSelf
| FederatedContent
| StreamFormat(
- JhlsIndex | Jvtt | HlsMaster | HlsVariant | Matroska | Snippet | Webvtt
+ JhlsIndex | Jvtt | HlsMaster | HlsVariant | Matroska | Fragment | Webvtt
)
)
}
diff --git a/remuxer/src/snippet.rs b/remuxer/src/fragment.rs
index 1378e70..660e2d9 100644
--- a/remuxer/src/snippet.rs
+++ b/remuxer/src/fragment.rs
@@ -19,9 +19,9 @@ use std::{
path::Path,
};
-const SNIPPET_LENGTH: f64 = 2.;
+const FRAGMENT_LENGTH: f64 = 2.;
-pub fn snippet_index(
+pub fn fragment_index(
path_base: &Path,
item: &NodePublic,
local_track: &LocalTrack,
@@ -47,9 +47,9 @@ pub fn snippet_index(
};
let average_kf_interval = media_info.duration / n_kf as f64;
- let kf_per_snip = (SNIPPET_LENGTH / average_kf_interval).ceil() as usize;
+ let kf_per_snip = (FRAGMENT_LENGTH / average_kf_interval).ceil() as usize;
debug!("average keyframe interval: {average_kf_interval}");
- debug!(" => keyframes per snippet {kf_per_snip}");
+ debug!(" => keyframes per frag {kf_per_snip}");
let n_snips = n_kf.div_ceil(kf_per_snip);
Ok((0..n_snips)
@@ -78,7 +78,7 @@ pub fn snippet_index(
.collect())
}
-pub fn write_snippet_into(
+pub fn write_fragment_into(
writer: impl Write,
path_base: &Path,
item: &NodePublic,
@@ -87,7 +87,7 @@ pub fn write_snippet_into(
webm: bool,
n: usize,
) -> anyhow::Result<()> {
- info!("writing snippet {n} of {:?} (track {track})", item.title);
+ info!("writing fragment {n} of {:?} (track {track})", item.title);
let mut output = EbmlWriter::new(BufWriter::new(writer), 0);
let media_info = item.media.as_ref().unwrap();
let info = media_info
@@ -119,9 +119,9 @@ pub fn write_snippet_into(
};
let average_kf_interval = media_info.duration / n_kf as f64;
- let kf_per_snip = (SNIPPET_LENGTH / average_kf_interval).ceil() as usize;
+ let kf_per_snip = (FRAGMENT_LENGTH / average_kf_interval).ceil() as usize;
debug!("average keyframe interval: {average_kf_interval}");
- debug!(" => keyframes per snippet {kf_per_snip}");
+ debug!(" => keyframes per frag {kf_per_snip}");
let (start_block_index, end_block_index) = if force_kf {
(n * kf_per_snip, (n + 1) * kf_per_snip)
@@ -130,7 +130,7 @@ pub fn write_snippet_into(
*index
.keyframes
.get(n * kf_per_snip)
- .ok_or(anyhow!("snippet index out of range"))?,
+ .ok_or(anyhow!("fragment index out of range"))?,
*index
.keyframes
.get((n + 1) * kf_per_snip)
@@ -152,7 +152,7 @@ pub fn write_snippet_into(
output.write_tag(&MatroskaTag::Segment(Master::Start))?;
output.write_tag(&ebml_segment_info(
format!(
- "{} (track {track}; snippet {n})",
+ "{} (track {track}; frag {n})",
item.title.clone().unwrap_or_default()
),
(last_block_pts - start_block.pts) as f64 / 1000.,
@@ -165,7 +165,7 @@ pub fn write_snippet_into(
let mut reader = SegmentExtractIter::new(&mut reader, local_track.track as u64);
{
- // TODO this one caused snippets to get dropped by MSE for no reason
+ // TODO this one caused fragments to get dropped by MSE for no reason
// for i in start_block_index..end_block_index {
// let index_block = &index.blocks[i];
// let mut block = reader.next()?;
diff --git a/remuxer/src/lib.rs b/remuxer/src/lib.rs
index b49dedc..49af2e7 100644
--- a/remuxer/src/lib.rs
+++ b/remuxer/src/lib.rs
@@ -8,11 +8,11 @@ pub mod import;
pub mod remux;
pub mod seek_index;
pub mod segment_extractor;
-pub mod snippet;
+pub mod fragment;
pub mod trim_writer;
pub use remux::remux_stream_into;
-pub use snippet::write_snippet_into;
+pub use fragment::write_fragment_into;
use jellycommon::{SourceTrack, SourceTrackKind};
use jellymatroska::{Master, MatroskaTag};
diff --git a/stream/src/segment.rs b/stream/src/fragment.rs
index a5162cd..f08114c 100644
--- a/stream/src/segment.rs
+++ b/stream/src/fragment.rs
@@ -10,12 +10,12 @@ use jellycommon::{
user::{PermissionSet, UserPermission},
LocalTrack, Node,
};
-use jellytranscoder::snippet::transcode;
+use jellytranscoder::fragment::transcode;
use log::warn;
use tokio::{fs::File, io::DuplexStream};
use tokio_util::io::SyncIoBridge;
-pub async fn segment_stream(
+pub async fn fragment_stream(
node: Node,
local_tracks: Vec<LocalTrack>,
spec: StreamSpec,
@@ -42,7 +42,7 @@ pub async fn segment_stream(
.ok_or(anyhow!("profile out of range"))?,
move |b| {
tokio::task::spawn_blocking(move || {
- if let Err(err) = jellyremuxer::write_snippet_into(
+ if let Err(err) = jellyremuxer::write_fragment_into(
SyncIoBridge::new(b),
&CONF.media_path,
&node.public,
@@ -66,7 +66,7 @@ pub async fn segment_stream(
} else {
let b = SyncIoBridge::new(b);
tokio::task::spawn_blocking(move || {
- if let Err(err) = jellyremuxer::write_snippet_into(
+ if let Err(err) = jellyremuxer::write_fragment_into(
b,
&CONF.media_path,
&node.public,
diff --git a/stream/src/hls.rs b/stream/src/hls.rs
index 310c6b1..7f69d2c 100644
--- a/stream/src/hls.rs
+++ b/stream/src/hls.rs
@@ -53,8 +53,8 @@ pub async fn hls_variant_stream(
let local_track = local_tracks.get(0).ok_or(anyhow!("no track"))?.to_owned();
let track_index = spec.tracks[0];
let media_info = node.public.media.to_owned().ok_or(anyhow!("no media?"))?;
- let snips = spawn_blocking(move || {
- jellyremuxer::snippet::snippet_index(
+ let frags = spawn_blocking(move || {
+ jellyremuxer::fragment::fragment_index(
&CONF.media_path,
&node.public,
&local_track,
@@ -70,8 +70,8 @@ pub async fn hls_variant_stream(
writeln!(out, "#EXT-X-VERSION:4")?;
writeln!(out, "#EXT-X-MEDIA-SEQUENCE:0")?;
- spec.format = StreamFormat::Snippet;
- for (i, Range { start, end }) in snips.iter().enumerate() {
+ spec.format = StreamFormat::Fragment;
+ for (i, Range { start, end }) in frags.iter().enumerate() {
writeln!(out, "#EXTINF:{:},", end - start)?;
spec.index = Some(i);
writeln!(out, "stream?{}", spec.to_query())?;
diff --git a/stream/src/jhls.rs b/stream/src/jhls.rs
index e26df1b..1313c7a 100644
--- a/stream/src/jhls.rs
+++ b/stream/src/jhls.rs
@@ -26,7 +26,7 @@ pub async fn jhls_index(
.to_owned();
let segments = tokio::task::spawn_blocking(move || {
- jellyremuxer::snippet::snippet_index(
+ jellyremuxer::fragment::fragment_index(
&CONF.media_path,
&node.public,
&local_track,
diff --git a/stream/src/lib.rs b/stream/src/lib.rs
index 906e638..4d96f8c 100644
--- a/stream/src/lib.rs
+++ b/stream/src/lib.rs
@@ -6,7 +6,7 @@
#![feature(iterator_try_collect)]
pub mod hls;
pub mod jhls;
-pub mod segment;
+pub mod fragment;
pub mod webvtt;
use anyhow::{anyhow, bail, Context, Result};
@@ -18,7 +18,7 @@ use jellycommon::{
LocalTrack, Node, TrackSource,
};
use jhls::jhls_index;
-use segment::segment_stream;
+use fragment::fragment_stream;
use std::{io::SeekFrom, ops::Range};
use tokio::{
fs::File,
@@ -41,7 +41,7 @@ pub fn stream_head(spec: &StreamSpec) -> StreamHead {
StreamFormat::HlsMaster | StreamFormat::HlsVariant => StreamHead { content_type: "application/vnd.apple.mpegurl", range_supported: false },
StreamFormat::JhlsIndex => StreamHead { content_type: "application/jellything-seekindex+json", range_supported: false },
StreamFormat::Webvtt => StreamHead { content_type: "text/vtt", range_supported: false },
- StreamFormat::Snippet => StreamHead { content_type: webm_or_mkv, range_supported: false },
+ StreamFormat::Fragment => StreamHead { content_type: webm_or_mkv, range_supported: false },
StreamFormat::Jvtt => StreamHead { content_type: "application/jellything-vtt+json", range_supported: false },
}
}
@@ -87,7 +87,7 @@ pub async fn stream(
StreamFormat::HlsMaster => hls_master_stream(node, local_tracks, spec, b).await?,
StreamFormat::HlsVariant => hls_variant_stream(node, local_tracks, spec, b).await?,
StreamFormat::JhlsIndex => jhls_index(node, &local_tracks, spec, b, perms).await?,
- StreamFormat::Snippet => segment_stream(node, local_tracks, spec, b, perms).await?,
+ StreamFormat::Fragment => fragment_stream(node, local_tracks, spec, b, perms).await?,
StreamFormat::Webvtt => vtt_stream(false, node, local_tracks, spec, b).await?,
StreamFormat::Jvtt => vtt_stream(true, node, local_tracks, spec, b).await?,
}
diff --git a/stream/src/webvtt.rs b/stream/src/webvtt.rs
index 3c9ec41..ec26398 100644
--- a/stream/src/webvtt.rs
+++ b/stream/src/webvtt.rs
@@ -19,7 +19,7 @@ pub async fn vtt_stream(
) -> Result<()> {
// TODO cache
- // TODO should use snippets too? big films take too long...
+ // TODO should use fragments too? big films take too long...
let tracki = *spec.tracks.get(0).ok_or(anyhow!("no track selected"))?;
let local_track = local_tracks.get(0).ok_or(anyhow!("no tracks"))?.clone();
diff --git a/transcoder/src/snippet.rs b/transcoder/src/fragment.rs
index 90512c4..90512c4 100644
--- a/transcoder/src/snippet.rs
+++ b/transcoder/src/fragment.rs
diff --git a/transcoder/src/lib.rs b/transcoder/src/lib.rs
index 35b5605..eb56229 100644
--- a/transcoder/src/lib.rs
+++ b/transcoder/src/lib.rs
@@ -8,7 +8,7 @@
use tokio::sync::Semaphore;
pub mod image;
-pub mod snippet;
+pub mod fragment;
pub mod subtitles;
pub mod thumbnail;
diff --git a/web/script/player/track/mse.ts b/web/script/player/track/mse.ts
index c916204..2949890 100644
--- a/web/script/player/track/mse.ts
+++ b/web/script/player/track/mse.ts
@@ -122,7 +122,7 @@ export class MSEPlayerTrack extends PlayerTrack {
async load(index: number) {
this.loading.add(index);
await this.profile_selector.select_optimal_profile(this.track_index, this.profile);
- const url = `/n/${encodeURIComponent(this.node_id)}/stream?format=snippet&webm=true&tracks=${this.track_index}&index=${index}${this.profile.value ? `&profile=${this.profile.value.id}` : ""}`;
+ const url = `/n/${encodeURIComponent(this.node_id)}/stream?format=frag&webm=true&tracks=${this.track_index}&index=${index}${this.profile.value ? `&profile=${this.profile.value.id}` : ""}`;
const buf = await this.player.downloader.download(url);
await new Promise<void>(cb => {
if (!this.index) return;