blob: 6fbddc6bb36541291a05030229132aceca2f9bf7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
/*
This file is part of jellything (https://codeberg.org/metamuffin/jellything)
which is licensed under the GNU Affero General Public License (version 3); see /COPYING.
Copyright (C) 2025 metamuffin <metamuffin.org>
*/
use crate::{stream_info, SMediaInfo};
use anyhow::{anyhow, Result};
use jellybase::common::stream::{SegmentNum, TrackNum};
use std::sync::Arc;
use tokio::io::{AsyncWriteExt, DuplexStream};
pub async fn fragment_index_stream(
mut b: DuplexStream,
info: Arc<SMediaInfo>,
_segment: SegmentNum,
track: TrackNum,
) -> Result<()> {
let (iinfo, _info) = stream_info(info).await?;
let (file_index, track_num) = *iinfo
.track_to_file
.get(track)
.ok_or(anyhow!("track not found"))?;
let fragments = tokio::task::spawn_blocking(move || {
jellyremuxer::fragment::fragment_index(&iinfo.paths[file_index], track_num)
})
.await??;
let out = serde_json::to_string(&fragments)?;
tokio::spawn(async move { b.write_all(out.as_bytes()).await });
Ok(())
}
|