mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
Solve the problem of inaccurate HLS TS duration. v5.0.187 v6.0.87 (#3824)
1. The comment on the ratio configuration says it can affect the slice duration, but there is no effect after configuring it. 2. The default hls_td_ratio is 1.5, and after setting it to 1, the duration is still slightly more than 10 seconds. 3. Even if the GOP is an integer, like 1 second, the slice is still a non-integer, like 0.998 seconds, which seems a bit unreliable. 4. In the duration of the TS in the m3u8 file, it is one frame less than the duration of the slice. 5. Set hls_dispose to 120s to dispose HLS files when no stream. 6. Use docker.conf for docker. Before this patch: ``` #EXTINF:10.983, no desc livestream-0.ts?hls_ctx=3p095hq0 ``` After this patch: ``` #EXTINF:10.000, no desc livestream-0.ts?hls_ctx=3p095hq0 ``` Note: If the fragment is set to 10 seconds, but the GOP size cannot be divided by 10, such as not 1, 2, 5, or 10, then the duration of ts will still be more than 10 seconds. --------- Co-authored-by: john <hondaxiao@tencent.com>
This commit is contained in:
parent
d10e16e335
commit
a1e4f61dd3
11 changed files with 87 additions and 63 deletions
|
@ -204,6 +204,10 @@ public:
|
|||
virtual bool pure_audio();
|
||||
virtual srs_error_t flush_audio(SrsTsMessageCache* cache);
|
||||
virtual srs_error_t flush_video(SrsTsMessageCache* cache);
|
||||
// When flushing video or audio, we update the duration. But, we should also update the
|
||||
// duration before closing the segment. Keep in mind that it's fine to update the duration
|
||||
// several times using the same dts timestamp.
|
||||
void update_duration(uint64_t dts);
|
||||
// Close segment(ts).
|
||||
virtual srs_error_t segment_close();
|
||||
private:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue