aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--stream/src/stream_info.rs12
-rw-r--r--web/script/player/track/mod.ts2
-rw-r--r--web/script/player/track/mse.ts5
3 files changed, 10 insertions, 9 deletions
diff --git a/stream/src/stream_info.rs b/stream/src/stream_info.rs
index a8b6989..43c536a 100644
--- a/stream/src/stream_info.rs
+++ b/stream/src/stream_info.rs
@@ -57,12 +57,7 @@ pub(crate) async fn stream_info(info: Arc<SMediaInfo>) -> Result<(InternalStream
let segment = StreamSegmentInfo {
name: None,
- duration: metadata[0]
- .info
- .as_ref()
- .unwrap()
- .duration
- .unwrap_or_default(),
+ duration: media_duration(&metadata[0]),
tracks,
};
Ok((
@@ -162,3 +157,8 @@ pub(crate) async fn write_stream_info(info: Arc<SMediaInfo>, mut b: DuplexStream
spawn(async move { b.write_all(&serde_json::to_vec(&info)?).await });
Ok(())
}
+
+fn media_duration(m: &MatroskaMetadata) -> f64 {
+ let info = m.info.as_ref().unwrap();
+ (info.duration.unwrap_or_default() * info.timestamp_scale as f64) / 1_000_000_000.
+}
diff --git a/web/script/player/track/mod.ts b/web/script/player/track/mod.ts
index 5a91209..99b348c 100644
--- a/web/script/player/track/mod.ts
+++ b/web/script/player/track/mod.ts
@@ -8,7 +8,7 @@ import { TimeRange } from "../types_stream.ts";
import { OVar } from "../../jshelper/mod.ts";
import { BufferRange } from "../player.ts";
-export const TARGET_BUFFER_DURATION = 10
+export const TARGET_BUFFER_DURATION = 15
export const MIN_BUFFER_DURATION = 1
export interface AppendRange extends TimeRange { buf: ArrayBuffer, index: number, cb: () => void }
diff --git a/web/script/player/track/mse.ts b/web/script/player/track/mse.ts
index 066bbfd..9fa5e42 100644
--- a/web/script/player/track/mse.ts
+++ b/web/script/player/track/mse.ts
@@ -142,7 +142,7 @@ export class MSEPlayerTrack extends PlayerTrack {
this.current_load = frag;
// TODO why is appending so unreliable?! sometimes it does not add it
this.source_buffer.changeType(track_to_content_type(this.active_format.value!.format, this.active_format.value!.container));
- this.source_buffer.timestampOffset = this.active_format.value !== undefined ? frag.start : 0
+ this.source_buffer.timestampOffset = 0 // TODO send if relative PTS //this.active_format.value !== undefined ? frag.start : 0
console.log(`append track ${this.track_index}`);
this.source_buffer.appendBuffer(frag.buf);
}
@@ -151,7 +151,8 @@ export class MSEPlayerTrack extends PlayerTrack {
public debug(): OVar<HTMLElement> {
const rtype = (t: string, b: BufferRange[]) => {
const c = b.filter(r => r.status == t);
- return `${c.length} range${c.length != 1 ? "s" : ""}, ${c.reduce((a, v) => a + v.end - v.start, 0).toFixed(2)}s`
+ // ${c.length} range${c.length != 1 ? "s" : ""}
+ return `${c.reduce((a, v) => a + v.end - v.start, 0).toFixed(2)}s`
}
return this.active_format.liftA2(this.buffered, (p, b) =>
e("pre",