- From: wolenetz via GitHub <sysbot+gh@w3.org>
- Date: Thu, 22 Sep 2016 22:43:05 +0000
- To: public-html-media@w3.org
wolenetz has just created a new issue for https://github.com/w3c/media-source: == Clarify that overlapped video coded frames need their duration adjusted in the track buffer == Imaging this scenario: SourceBuffer.appendBuffer({video initialization segment}); SourceBuffer.appendBuffer({video coded frame keyframe DTS=PTS=0, duration = 30ms}); SourceBuffer.appendBuffer({video coded frame keyframe DTS=PTS=20, duration = 30ms}); video track buffer per v1 spec would contain: frames [0,30)[20,50). Note the overlap. A subsequent SourceBuffer.remove(20,30) would remove the coded frame [20,50), resulting in track buffer containing: [0,30). This may be confusing to web authors and implementors, in that an overlapped video frame, the duration isn't adjusted in the track buffer, and rendering that frame might or might not observe the duration. Further, if it *doesn't* observe that duration, rather it respects the overlapping video frame's PTS, then it could be confusing when a removal of the overlapping frame makes the originally overlapped frame's presentation interval "spring back" to 30ms in this example. I suggest that we clarify in the spec the behavior really should be to adjust the duration of the overlapped frame (similar to that in audio splice frame). Text might be: Current: * If track buffer contains video coded frames: * Let remove window timestamp equal the overlapped frame presentation timestamp plus 1 microsecond. * If the presentation timestamp is less than the remove window timestamp, then remove overlapped frame from track buffer. Suggested new text: * If track buffer contains video coded frames: * Let remove window timestamp equal the overlapped frame presentation timestamp plus 1 microsecond. * If the presentation timestamp is less than the remove window timestamp, * then remove overlapped frame from track buffer. * otherwise, update the overlapped frame in the track buffer's to have coded frame duration set to difference between presentation timestamp and the overlapped frame presentation timestamp. Chrome currently does the "otherwise" case for certain byte streams (webm) when those byte streams don't explicitly set a precise coded frame duration (e.g., a SimpleBlock frame at the end of a cluster), so the duration is initially estimated. Such estimated durations are "fixed up" on overlapped appends to them, but that leaves the non-estimated-duration webm blocks, as well as any non-webm coded frames to suffer from having overlapping presentation intervals in the same track buffer in the scenario, above. This clarification might best be done at this point in VNext, given the V1 spec is nearing PR/REC. Please view or discuss this issue at https://github.com/w3c/media-source/issues/166 using your GitHub account
Received on Thursday, 22 September 2016 22:43:12 UTC