[Webkit-unassigned] [Bug 183331] New: [webrtc] Receiving an IDR frame under packet loss conditions can cause unrecoverable video distortions
bugzilla-daemon at webkit.org
bugzilla-daemon at webkit.org
Mon Mar 5 06:49:39 PST 2018
https://bugs.webkit.org/show_bug.cgi?id=183331
Bug ID: 183331
Summary: [webrtc] Receiving an IDR frame under packet loss
conditions can cause unrecoverable video distortions
Product: WebKit
Version: Safari 11
Hardware: All
OS: All
Status: NEW
Severity: Major
Priority: P2
Component: WebRTC
Assignee: webkit-unassigned at lists.webkit.org
Reporter: andj2223 at gmail.com
CC: youennf at gmail.com
Using Safari on the desktop, do the following:
1. Visit the example url at <redacted> and log in with <redacted> username/password. (Youenn, check your email for this info, and any other devs that want it just let me know.)
2. Once you're logged in, you should see a character spinning around. Packet loss is being simulated at 10% on the server, so there is no need for you to do so locally.
3. Press alt+i. This will send an IDR to you. You may notice corruption/distortion right away, but if you don't, just keep pressing alt+i. It should only take 6-7 keypresses to reproduce the distortion. You can confirm that your keypress is being registered by looking for the "!!! REQUESTING IDR !!!" message in the web inspector console.
Actual behavior: This distortion is not corrected within a reasonable time, and stays around for quite a while.
Expected behavior: Either no distortion at all, or very brief distortion that gets corrected.
This ends up being quite a serious issue, because any packet loss that occurs during an IDR can cause permanent corruption and distortions in the video stream.
Notes:
* Note I use out-of-band SPS/PPS with this example via the SDP sprop-parameter-sets parameter. The problem also occurs with in-band SPS/PPS. The purpose of delivering SPS/PPS out-of-band over a reliable transport for this repro is to completely eliminate SPS/PPS nalu packet corruption as a potential source of the problem, so we can focus on where the real issue is -- probably a problem in the code that handles lost packets of an IDR slice.
* The problem also occurs on iOS devices, but there isn't a convenient hotkey to use to send IDR on iOS. To replicate the problem on iOS, perform steps 1-2 on a desktop and leave the page open, then perform steps 1-2 on an iOS device. Now, with both devices consuming the same stream, you can press Alt+i on the desktop and the IDR will be sent to the iOS device, where you should notice the same kind of corruption happening.
* The problem does not occur when there is not packet loss.
* The issue also occurs in Chrome, so the problem may be within libwebrtc.
* There is also a slightly related issue filed on the webrtc project, https://bugs.chromium.org/p/webrtc/issues/detail?id=8423 HOWEVER, I believe they are currently a bit confused about the real source of the problem -- They seem to think the issue is being caused by lost SPS/PPS, whereas I'm using an out-of-band SPS/PPS here. The problem is therefore more likely caused by a mishandling of lost IDR frame packets and doesn't have anything to do with lost SPS/PPS. So the 8423 issue is useful reading, but can also be a bit confusing due to the "lost SPS/PPS" (unintentional) red herring. I've updated 8423 with notes trying to convince them to look more deeply into the lost IDR packet problem.
--
You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-unassigned/attachments/20180305/033c838d/attachment-0001.html>
More information about the webkit-unassigned
mailing list