On 6/11/21, 9:31 PM, "Kevin LaFlamme" <ke...@aiera.com> wrote:

>Does my last explanation make sense or if not could you point me to
>where this reasoning is incorrect?
Your reasoning is perfectly fine. Since I haven't heard any objections to your 
reply, I have pushed this patch. Thanks.

>
>Kevin LaFlamme
>Director of Engineering (Front End)
>774.265.0382 (m)
>aiera.com
>On Jun 8, 2021, 8:52 PM -0400, Kevin LaFlamme <ke...@aiera.com>, wrote:
>> I just realized there’s probably a more straightforward explanation:
>>
>> The scenario you brought up is already happening for all segments after
>> the first one, and this changes just makes the first one do the same
>> thing.
>>
>> The following scenario happens even without this change:
>>
>> Say you have a stream with "-streaming" and "-use_template" set and a
>> segment duration of 10 seconds. While the first segment is being
>> written there is no manifest, but then the first segment and manifest
>> are written and the segment segment starts to be written. At 15 seconds
>> in a client requests the manifest. It wants to be 2 seconds behind the
>> live edge (13 second seek position) so it calculates which segment name
>> it needs, which is the second one, and makes a request for it even
>> though it's only partially written. And this could currently happen for
>> any segment index > 1.
>>
>> With the proposed change this same thing just now happens on the first
>> segment as well.
>>
>> I'm definitely happy to try a different approach to fix the underlying
>> issue if I'm misunderstanding something or this reasoning is incorrect,
>> but this "seems" right to me from my understanding of the spec and the
>> behaviors I've witnessed so far.
>>
>> Kevin LaFlamme
>> Director of Engineering (Front End)
>> 774.265.0382 (m)
>> aiera.com
>> On Jun 8, 2021, 4:03 PM -0400, Kevin LaFlamme <ke...@aiera.com>, wrote:
>> > To serve it in a truly streaming way does require some special purpose 
>> > server or configuration, but >the `@availabilityTimeComplete` field that 
>> > is written into the manifest is supposed to indicate to the >client making 
>> > the request whether or not the segment file is complete at the time it 
>> > becomes available. >In streaming mode, this is set to false so the client 
>> > should expect that it can get a partial segment >between the available 
>> > start time and the segment duration.
>> >
>> > So as each box is written to the file, it should be safe for the HTTP 
>> > server to send the partial >segment file that is currently on disk. And 
>> > the DASH spec specifically indicates whether or not to expect >a partial 
>> > file for the segment being requested. If the client can’t handle a partial 
>> > file and is still making >an attempt to request it before it’s fully 
>> > available (which is calculable from the information in the >manifest), the 
>> > client wouldn’t be respecting the DASH spec.
>> >
>> > Kevin LaFlamme
>> > Director of Engineering (Front End)
>> > 774.265.0382 (m)
>> > aiera.com
>> > On Jun 8, 2021, 3:34 PM -0400, Timo Rothenpieler <t...@rothenpieler.org>, 
>> > wrote:
>> > > On 08.06.2021 21:24, Kevin LaFlamme wrote:
>> > > > For streaming mode with fragmented MP4 the intention is to have the 
>> > > > client read a partial file >since it’s broken up into sequential boxes 
>> > > > that are playable independently. This doesn’t change the >segment 
>> > > > files themselves or how they are written, it just writes a full index 
>> > > > file ahead of time.
>> > > >
>> > > > Even currently, the manifest gets written after the first segment is 
>> > > > written and the player can >immediately attempt to start reading the 
>> > > > second segment before it’s fully written.
>> > > >
>> > > > This is the same thing that the “-lhls” is doing in the block below, 
>> > > > writing out the HLS manifest >immediately so that it contains 
>> > > > X-EXT-PREFETCH fields for the partial segment files.
>> > > >
>> > > > Currently, if you have a low latency DASH stream with “-ldash” and 
>> > > > “-streaming” and the player >joins in the middle of the stream 
>> > > > everything works and it starts playing from the middle of the current 
>> > > > >segment. This means even with 10 second segments you can have latency 
>> > > > < 1sec of the live edge. >However, this doesn’t work for the very 
>> > > > first segment because the manifest isn’t available to the player >yet.
>> > > >
>> > > > I have a low-latency player where I’m seeing this issue right now and 
>> > > > this addresses the >problem, and seems consistent with the “-lhls” 
>> > > > handling below, but happy to make changes if there is >something else 
>> > > > I’m missing.
>> > >
>> > > Yes, I'm aware that that's how it's supposed to work in theory.
>> > > But does that work with any HTTP server?
>> > > Do they really manage to stream the file while it's being written to?
This feature works with most of the popular CDNs. And yes, they do manage a 
file as it is being written into.

>> > > Or does this need special software to serve the file? And in turn, will
>> > > it break for a user just pointing apache/nginx at such a list?

To start with, -streaming feature in dashenc, will not work with a standard 
apache/nginx.
This feature needs a http server that handles a streaming.
This change is just a bugfix to -streaming feature. 

regards,
Karthick
>> > >
>> > >
>> > > _______________________________________________
>> > > ffmpeg-devel mailing list
>> > > ffmpeg-devel@ffmpeg.org
>> > >
>> > > 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".

Reply via email to