Am 20.02.20 um 04:24 schrieb James Almer: > On 2/19/2020 11:24 PM, Jeyapal, Karthick wrote: >> >> On 2/20/20 7:19 AM, James Almer wrote: >>> On 2/19/2020 9:33 PM, Jeyapal, Karthick wrote: >>>> >>>> On 2/19/20 7:05 PM, James Almer wrote: >>>>> On 2/19/2020 8:50 AM, Jeyapal, Karthick wrote: >>>>>> >>>>>> On 2/19/20 4:21 PM, Thilo Borgmann wrote: >>>>>>> Am 19.02.20 um 06:18 schrieb Jeyapal, Karthick: >>>>>>>> >>>>>>>> On 2/18/20 9:43 PM, James Almer wrote: >>>>>>>>> Signed-off-by: James Almer <jamr...@gmail.com> >>>>>>>>> --- >>>>>>>>> libavformat/dashenc.c | 5 +++++ >>>>>>>>> 1 file changed, 5 insertions(+) >>>>>>>>> >>>>>>>>> diff --git a/libavformat/dashenc.c b/libavformat/dashenc.c >>>>>>>>> index b910cc22d0..045d2f4df6 100644 >>>>>>>>> --- a/libavformat/dashenc.c >>>>>>>>> +++ b/libavformat/dashenc.c >>>>>>>>> @@ -1395,6 +1395,11 @@ static int dash_init(AVFormatContext *s) >>>>>>>>> c->frag_type = FRAG_TYPE_EVERY_FRAME; >>>>>>>>> } >>>>>>>>> >>>>>>>>> + if (c->ldash && !c->write_prft) { >>>>>>>>> + av_log(s, AV_LOG_INFO, "Enabling Producer Reference Time >>>>>>>>> element for Low Latency mode\n"); >>>>>>>>> + c->write_prft = 1; >>>>>>>>> + } >>>>>>>>> + >>>>>>>> PRFT elements has a significant bitrate overhead, especially in >>>>>>>> streaming mode when each frame is a moof fragment. >>>>>>>> In terms of percentage of stream's bitrate this overhead will be a >>>>>>>> significant % for lower bitrate streams(such as audio streams). >>>>>>>> For any application which does not need PRFT this is an unnecessary >>>>>>>> wastage of bits. >>>>>>>> Hence, I would advise against enabling PRFT without user control. >>>>>>> >>>>>>> Latest to-become spec for low latency mode declares it mandatory [1]. >>>>>> I see. Now I understand the motive behind this change. >>>>>>> >>>>>>> I see your point, though. What significance would this actually have, >>>>>>> can you provide some numbers / examples? >>>>>> Sorry. I worked on this bitrate overhead optimizations around a year >>>>>> back. Hence, I don’t have the numbers with and without PRFT handy. >>>>>> But I do have the final overhead numbers (without PRFT) for an audio >>>>>> stream. >>>>>> CMAF Muxer overhead (for an AAC-LC codec) by Sampling frequency >>>>>> 16000 Hz - 14 Kbps >>>>>> 24000 Hz - 20 Kbps >>>>>> 32000 Hz - 28 Kbps >>>>>> 48000 Hz - 40 Kbps >>>>>> >>>>>> At 48KHz, the overhead due to CMAF was 40 Kbps which was significant by >>>>>> itself. >>>>>> My random guess is that PRFT would add another 10Kbps - 20Kbps. But I >>>>>> could be wrong here, as I don’t remember exactly. >>>>> >>>>> prft is a 32 byte box per dash segment, and segment duration can be >>>>> configured. A 1 second long segment for a 96kbps 44kHz audio stream with >>>>> a single moof/mdat pair inside is about 12kb. 32 bytes aren't going to >>>>> affect it. >>>> Thanks for your clarification. If the prft is created only once per >>>> segment, then it is not a big overhead. >>>> I had encountered a case where pfrt was getting created once per fragment, >>>> and hence was worried. >>> >>> Actually, you're right, it's one per fragment. My mistake. But you can >>> control both fragment count per segment and frame count per fragment in >>> the dash muxer now, and for low latency dash one fragment per segment of >>> about 1 second each is recommended for audio streams. >> If that is the case, I would like to point out that not everybody might >> choose 1 second per fragment. >> Anyone interested in reduced latency and stability would go for 1 frame per >> fragment. >> In our tests(in production environments), 1 frame per fragment provides much >> smoother and stable behavior at low latency streaming than higher fragment >> sizes. >> And in such a case PRFT will add 12Kbps overhead for a 48Khz AAC-LC stream. >> Hence, I suggest we keep this behavior configurable. > > One audio frame per fragment is a considerable overhead by itself just > by the excess of moof atoms.
> But in any case, i guess i can skip this > patch for the time being, while i look for a good way to for example > configure prft in a per adaptation set basis, or just enable it for > video streams. I don't think so. We should not fail the spec on default because of one possible use case. Since we seem to have found that this can be a significant overhead, we should add an override option to violate the spec (and skip prft) - but in that case also print a warning. -Thilo > >>> >>>>> >>>>> The real overhead is in the CMAF fragmentation/segmentation. Each moof >>>>> box can be in the hundreds of bytes depending on frame count. The more >>>>> moof/mdat pairs (AKA CMAF Chunks) are used, the bigger the overhead. >>>>> Before my recent changes the dash muxer would always make one per frame >>>>> in streaming mode, which was excessive, especially for audio. But now >>>>> you can customize it in various ways. >>>>> >>>>>> >>>>>>> If that turns out to be actually significant, I don't know if we would >>>>>>> prefer an override option to disable it and produce non-conformant >>>>>>> manifests or live with the overhead. >>>>>> Yes. Having an option to control this behavior would be useful. >>>>>>> >>>>>>> -Thilo >>>>>>> >>>>>>> [1] >>>>>>> https://dashif.org/docs/DASH-IF-IOP-CR-Low-Latency-Live-Community-Review-Dec-2019.pdf > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe". > _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".