[FFmpeg-devel] [PATCH] hlsenc: intialize only on ref_pkt and drop all packets

Michael Niedermayer michael at niedermayer.cc
Mon Feb 13 14:59:39 EET 2017


On Mon, Feb 13, 2017 at 08:56:19AM +0100, Miroslav Slugeň wrote:
> Dne 12.2.2017 v 23:35 Michael Niedermayer napsal(a):
> >On Sun, Feb 12, 2017 at 07:31:43PM +0100, Miroslav Slugeň wrote:
> >>This patch will fix cutting hls segments into exactly same length.
> >>Because it will intialize only on first ref_packet, which is video
> >>frame, not audio frame (old behavior)
> >>
> >>It will also drop all packets without PTS, drop all packets before
> >>initialization and drop all packets before first intialization
> >>packet PTS.
> >>
> >>Now it should be possible to create segments at exactly same length
> >>if we use new -force_key_frames hls:time_in_seconds parameter.
> >>
> >>This is required to support adaptive HLS.
> >>
> >>-- 
> >>Miroslav Slugeň
> >>
> >>
> >>
> >>
> >>
> >>
> >>
> >>
> >>
> >>
> >>  hlsenc.c |   24 ++++++++++++++++++++----
> >>  1 file changed, 20 insertions(+), 4 deletions(-)
> >>7f784939c938c7697be2178647828a36815fc731  0001-hlsenc-intialize-only-on-ref_pkt-and-drop-all-packet.patch
> >> From a59a7dbe6fdcab64c1402adb8f11cc31400f4516 Mon Sep 17 00:00:00 2001
> >>From: Miroslav Slugen <thunder.m at email.cz>
> >>Date: Sun, 12 Feb 2017 19:25:54 +0100
> >>Subject: [PATCH 1/1] hlsenc: intialize only on ref_pkt and drop all packets
> >>  before initialized
> >>
> >>---
> >>  libavformat/hlsenc.c | 24 ++++++++++++++++++++----
> >>  1 file changed, 20 insertions(+), 4 deletions(-)
> >>
> >>diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c
> >>index ad5205a..226dd89 100644
> >>--- a/libavformat/hlsenc.c
> >>+++ b/libavformat/hlsenc.c
> >>@@ -1278,10 +1278,6 @@ static int hls_write_packet(AVFormatContext *s, AVPacket *pkt)
> >>          oc = hls->avf;
> >>          stream_index = pkt->stream_index;
> >>      }
> >>-    if (hls->start_pts == AV_NOPTS_VALUE) {
> >>-        hls->start_pts = pkt->pts;
> >>-        hls->end_pts   = pkt->pts;
> >>-    }
> >>      if (hls->has_video) {
> >>          can_split = st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO &&
> >>@@ -1292,6 +1288,11 @@ static int hls_write_packet(AVFormatContext *s, AVPacket *pkt)
> >>          is_ref_pkt = can_split = 0;
> >>      if (is_ref_pkt) {
> >>+        if (hls->start_pts == AV_NOPTS_VALUE) {
> >>+            hls->start_pts = pkt->pts;
> >>+            hls->end_pts   = pkt->pts;
> >>+        }
> >>+
> >>          if (hls->new_start) {
> >>              hls->new_start = 0;
> >>              hls->duration = (double)(pkt->pts - hls->end_pts)
> >>@@ -1371,6 +1372,21 @@ static int hls_write_packet(AVFormatContext *s, AVPacket *pkt)
> >>          }
> >>      }
> >>+    if (pkt->pts == AV_NOPTS_VALUE) {
> >>+        av_log(s, AV_LOG_WARNING, "packet has no PTS, dropping packet from stream: %d\n", pkt->stream_index);
> >>+        return 0;
> >>+    }
> >>+
> >>+    if (hls->start_pts == AV_NOPTS_VALUE) {
> >>+        av_log(s, AV_LOG_WARNING, "stream not initialized yet, dropping packet from stream: %d\n", pkt->stream_index);
> >>+        return 0;
> >>+    }
> >>+
> >>+    if (pkt->pts + pkt->duration <= hls->start_pts) {
> >>+        av_log(s, AV_LOG_WARNING, "packet has PTS < START PTS (%"PRId64" < %"PRId64"), dropping packet from stream: %d\n", pkt->pts, hls->start_pts, pkt->stream_index);
> >>+        return 0;
> >>+    }
> >This triggers for subtitle streams, for example:
> >
> >./ffmpeg -i matrixbench_mpeg2.mpg -i fate-suite/sub/MovText_capability_tester.mp4  -f hls  -hls_segment_filename  /tmp/file.%d.ts -t 10   /tmp/file.m3u8
> >
> >
> >[...]
> >
> >
> >
> >_______________________________________________
> >ffmpeg-devel mailing list
> >ffmpeg-devel at ffmpeg.org
> >http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

> Otherwise patch is ok? Should i just check that stream is subtitles
> and add exception for it?

i did not review the patch, just tested and found the issue listed
above

I dont know in what other cases these conditions trigger, but
discarding packets in a muxer looks odd (which is why i tested it a
bit)

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

There will always be a question for which you do not know the correct answer.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20170213/df150ab5/attachment.sig>


More information about the ffmpeg-devel mailing list