feat: segment with query param (#219)

* bump version to 2.16.1

* fix: read segment with params
This commit is contained in:
Xinrea
2025-11-04 23:00:34 +08:00
committed by GitHub
parent 6127c67cd3
commit cf439d60c4
4 changed files with 21 additions and 10 deletions

View File

@@ -1,7 +1,7 @@
{ {
"name": "bili-shadowreplay", "name": "bili-shadowreplay",
"private": true, "private": true,
"version": "2.16.0", "version": "2.16.1",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",

2
src-tauri/Cargo.lock generated
View File

@@ -541,7 +541,7 @@ checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba"
[[package]] [[package]]
name = "bili-shadowreplay" name = "bili-shadowreplay"
version = "2.16.0" version = "2.16.1"
dependencies = [ dependencies = [
"async-ffmpeg-sidecar 0.0.1", "async-ffmpeg-sidecar 0.0.1",
"async-std", "async-std",

View File

@@ -4,7 +4,7 @@ resolver = "2"
[package] [package]
name = "bili-shadowreplay" name = "bili-shadowreplay"
version = "2.16.0" version = "2.16.1"
description = "BiliBili ShadowReplay" description = "BiliBili ShadowReplay"
authors = ["Xinrea"] authors = ["Xinrea"]
license = "" license = ""

View File

@@ -69,21 +69,32 @@ pub async fn playlist_to_video(
if !output_folder.exists() { if !output_folder.exists() {
std::fs::create_dir_all(output_folder).unwrap(); std::fs::create_dir_all(output_folder).unwrap();
} }
let mut file = tokio::fs::File::create(&output_path).await.unwrap(); let mut file = tokio::fs::File::create(&output_path)
.await
.map_err(|e| format!("Failed to create output file: {}", e))?;
if let Some(header_url) = header_url { if let Some(header_url) = header_url {
let header_data = tokio::fs::read(playlist_folder.join(header_url)) let header_data = tokio::fs::read(playlist_folder.join(header_url))
.await .await
.unwrap(); .map_err(|e| format!("Failed to read header file: {}", e))?;
file.write_all(&header_data).await.unwrap(); file.write_all(&header_data)
.await
.map_err(|e| format!("Failed to write header file: {}", e))?;
} }
for s in segments { for s in segments {
// read segment // read segment
let segment_file_path = playlist_folder.join(s.uri); let uri = s.uri.split('?').next().unwrap_or(&s.uri);
let segment_data = tokio::fs::read(&segment_file_path).await.unwrap(); let segment_file_path = playlist_folder.join(uri);
let segment_data = tokio::fs::read(&segment_file_path)
.await
.map_err(|e| format!("Failed to read segment file: {}", e))?;
// append segment data to clip_file // append segment data to clip_file
file.write_all(&segment_data).await.unwrap(); file.write_all(&segment_data)
.await
.map_err(|e| format!("Failed to write segment file: {}", e))?;
} }
file.flush().await.unwrap(); file.flush()
.await
.map_err(|e| format!("Failed to flush file: {}", e))?;
} }
// transcode copy to fix timestamp // transcode copy to fix timestamp