diff options
author | metamuffin <metamuffin@disroot.org> | 2024-01-29 13:22:21 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-01-29 13:22:21 +0100 |
commit | 2676e755286d117b100d379fce84ec3da6d8ae98 (patch) | |
tree | 2a075db5468f0c8c2f653be5222c183f4362fcfa | |
parent | a4526fd2eb670c8fac2c28eb1597f0c091f25a2a (diff) | |
download | jellything-2676e755286d117b100d379fce84ec3da6d8ae98.tar jellything-2676e755286d117b100d379fce84ec3da6d8ae98.tar.bz2 jellything-2676e755286d117b100d379fce84ec3da6d8ae98.tar.zst |
consistent name for {snippet,segment?,fragment}
-rw-r--r-- | common/src/stream.rs | 4 | ||||
-rw-r--r-- | common/src/user.rs | 2 | ||||
-rw-r--r-- | remuxer/src/fragment.rs (renamed from remuxer/src/snippet.rs) | 22 | ||||
-rw-r--r-- | remuxer/src/lib.rs | 4 | ||||
-rw-r--r-- | stream/src/fragment.rs (renamed from stream/src/segment.rs) | 8 | ||||
-rw-r--r-- | stream/src/hls.rs | 8 | ||||
-rw-r--r-- | stream/src/jhls.rs | 2 | ||||
-rw-r--r-- | stream/src/lib.rs | 8 | ||||
-rw-r--r-- | stream/src/webvtt.rs | 2 | ||||
-rw-r--r-- | transcoder/src/fragment.rs (renamed from transcoder/src/snippet.rs) | 0 | ||||
-rw-r--r-- | transcoder/src/lib.rs | 2 | ||||
-rw-r--r-- | web/script/player/track/mse.ts | 2 |
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; |