diff mbox

[FFmpeg-devel,1/8] ffserver.c: Fix timestamp handling, still creates new clusters for mp4 files, but result is playable

Message ID 20180528181859.12182-2-klaxa1337@googlemail.com
State Superseded
Headers show

Commit Message

Stephan Holljes May 28, 2018, 6:18 p.m. UTC
Signed-off-by: Stephan Holljes <klaxa1337@googlemail.com>
---
 ffserver.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

Comments

Michael Niedermayer May 28, 2018, 9:54 p.m. UTC | #1
On Mon, May 28, 2018 at 08:18:52PM +0200, Stephan Holljes wrote:
> Signed-off-by: Stephan Holljes <klaxa1337@googlemail.com>
> ---
>  ffserver.c | 14 +++++++++++---
>  1 file changed, 11 insertions(+), 3 deletions(-)
> 
> diff --git a/ffserver.c b/ffserver.c
> index 39e1c32..fc2a1a4 100644
> --- a/ffserver.c
> +++ b/ffserver.c
> @@ -133,7 +133,7 @@ void *read_thread(void *arg)
>          pkt.pos = -1;
>          
>          // current pts
> -        pts = pkt.pts; //av_rescale_q(pkt.pts, in_stream->time_base, tb);
> +        pts = pkt.pts;
>          
>          // current stream "uptime"
>          now = av_gettime_relative() - start;
> @@ -200,6 +200,9 @@ void write_segment(struct Client *c)
>      struct Segment *seg;
>      int ret;
>      int pkt_count = 0;

> +    AVRational tb;
> +    tb.num = 1;
> +    tb.den = AV_TIME_BASE;

AVRational tb = {1, AV_TIME_BASE}


[...]
diff mbox

Patch

diff --git a/ffserver.c b/ffserver.c
index 39e1c32..fc2a1a4 100644
--- a/ffserver.c
+++ b/ffserver.c
@@ -133,7 +133,7 @@  void *read_thread(void *arg)
         pkt.pos = -1;
         
         // current pts
-        pts = pkt.pts; //av_rescale_q(pkt.pts, in_stream->time_base, tb);
+        pts = pkt.pts;
         
         // current stream "uptime"
         now = av_gettime_relative() - start;
@@ -200,6 +200,9 @@  void write_segment(struct Client *c)
     struct Segment *seg;
     int ret;
     int pkt_count = 0;
+    AVRational tb;
+    tb.num = 1;
+    tb.den = AV_TIME_BASE;
     pthread_mutex_lock(&c->buffer_lock);
     if (av_fifo_size(c->buffer) > 0) {
         AVFormatContext *fmt_ctx;
@@ -249,8 +252,13 @@  void write_segment(struct Client *c)
             if (ret < 0)
                 break;
             
-            pkt.dts = seg->ts[pkt_count];
-            pkt.pts = seg->ts[pkt_count+1];
+            pkt.dts = av_rescale_q_rnd(seg->ts[pkt_count], tb,
+                                                        c->ofmt_ctx->streams[pkt.stream_index]->time_base,
+                                                               AV_ROUND_NEAR_INF|AV_ROUND_PASS_MINMAX);
+            pkt.pts = av_rescale_q_rnd(seg->ts[pkt_count+1], tb,
+                                                        c->ofmt_ctx->streams[pkt.stream_index]->time_base,
+                                                               AV_ROUND_NEAR_INF|AV_ROUND_PASS_MINMAX);
+            pkt.pos = -1;
             pkt_count += 2;
             ret = av_write_frame(c->ofmt_ctx, &pkt);
             av_packet_unref(&pkt);