{"action":"created","issue":{"url":"https://api.github.com/repos/google/shaka-player/issues/215","labels_url":"https://api.github.com/repos/google/shaka-player/issues/215/labels{/name}","comments_url":"https://api.github.com/repos/google/shaka-player/issues/215/comments","events_url":"https://api.github.com/repos/google/shaka-player/issues/215/events","html_url":"https://github.com/google/shaka-player/issues/215","id":113068063,"number":215,"title":"recover from failed decode","user":{"login":"nickdesaulniers","id":1823839,"avatar_url":"https://avatars.githubusercontent.com/u/1823839?v=3","gravatar_id":"","url":"https://api.github.com/users/nickdesaulniers","html_url":"https://github.com/nickdesaulniers","followers_url":"https://api.github.com/users/nickdesaulniers/followers","following_url":"https://api.github.com/users/nickdesaulniers/following{/other_user}","gists_url":"https://api.github.com/users/nickdesaulniers/gists{/gist_id}","starred_url":"https://api.github.com/users/nickdesaulniers/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nickdesaulniers/subscriptions","organizations_url":"https://api.github.com/users/nickdesaulniers/orgs","repos_url":"https://api.github.com/users/nickdesaulniers/repos","events_url":"https://api.github.com/users/nickdesaulniers/events{/privacy}","received_events_url":"https://api.github.com/users/nickdesaulniers/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/google/shaka-player/labels/question","name":"question","color":"cc317c"}],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":14,"created_at":"2015-10-23T17:52:49Z","updated_at":"2015-10-23T21:58:35Z","closed_at":null,"body":"While live streaming, gpac's DashCast sometimes produces an invalid segment.  I'll file an issue with them, but it would be useful if the client could recover from a segment that failed to decode.\r\n\r\n<img width=\"1440\" alt=\"screen shot 2015-10-23 at 10 52 02 am 1\" src=\"https://cloud.githubusercontent.com/assets/1823839/10700665/287d6278-7974-11e5-8e3e-9547457a1dab.png\">\r\n"},"comment":{"url":"https://api.github.com/repos/google/shaka-player/issues/comments/150702798","html_url":"https://github.com/google/shaka-player/issues/215#issuecomment-150702798","issue_url":"https://api.github.com/repos/google/shaka-player/issues/215","id":150702798,"user":{"login":"wolenetz","id":11578819,"avatar_url":"https://avatars.githubusercontent.com/u/11578819?v=3","gravatar_id":"","url":"https://api.github.com/users/wolenetz","html_url":"https://github.com/wolenetz","followers_url":"https://api.github.com/users/wolenetz/followers","following_url":"https://api.github.com/users/wolenetz/following{/other_user}","gists_url":"https://api.github.com/users/wolenetz/gists{/gist_id}","starred_url":"https://api.github.com/users/wolenetz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wolenetz/subscriptions","organizations_url":"https://api.github.com/users/wolenetz/orgs","repos_url":"https://api.github.com/users/wolenetz/repos","events_url":"https://api.github.com/users/wolenetz/events{/privacy}","received_events_url":"https://api.github.com/users/wolenetz/received_events","type":"User","site_admin":false},"created_at":"2015-10-23T21:58:35Z","updated_at":"2015-10-23T21:58:35Z","body":"appendStream() has essentially invokes the segment parser loop in a loop (like looping appendBuffer() with minor changes to make sure updatestart/end happen at most once per appendStream()). As such, the spec language requires appendStream's loop to abort if the segment parser loop aborted (which happens just after it runs the append error algorithm, just like in appendBuffer()). Outside of the built-in loop and using ReadableStream instead of an ArrayBuffer[View], appendStream() differs from appendBuffer() in that the former can run the coded frame eviction algorithm more than once (and that any such runs within the asynch loop portion do not result in QuotaExceededErr, rather append error algorithm without decode error, if not enough frames could be evicted).\r\n\r\nIn short, if GC within appendStream()'s asynch loop can't evict enough to make room, the appendStream() is aborted, but the HTMLMediaElement's fetching/load algorithms aren't aborted. But if decode err indeed occurred within appendStream()'s asynch loop, the result should be very similar to appendBuffer() of same media hitting decode error."}}