Auto merge of #22522 - ferjm:av.playback.improvements, r=Manishearth

HTMLMediaElement backoff protocol and other improvements to a/v playback

- [X] `./mach build -d` does not report any errors
- [X] `./mach test-tidy` does not report any errors

This PR implements a backoff protocol to keep us from dropping frames whenever it's possible. It also add some other improvements like:
- Clean up the implementation a little bit by adding all fetch request related state to `HTMLMediaElementFetchContext`.
- Make sure that we ignore responses from old requests.
- Set the stream to seekable iff there's support for range requests. This will likely change when we add the media cache.
- Implements part of [step 8 of the seek spec](https://html.spec.whatwg.org/multipage/media.html#dom-media-seek) where we bail out if the stream is not seekable.

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/22522)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2019-01-11 08:00:39 -05:00 committed by GitHub
commit b49e7517a3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 240 additions and 100 deletions

10
Cargo.lock generated
View file

@ -3507,7 +3507,7 @@ dependencies = [
[[package]]
name = "servo-media"
version = "0.1.0"
source = "git+https://github.com/servo/media#35014baeb603b56b1b8b4de75919c58f7390cc30"
source = "git+https://github.com/servo/media#c8cc491c850b18393586500233cc55e29800146c"
dependencies = [
"servo-media-audio 0.1.0 (git+https://github.com/servo/media)",
"servo-media-gstreamer 0.1.0 (git+https://github.com/servo/media)",
@ -3517,7 +3517,7 @@ dependencies = [
[[package]]
name = "servo-media-audio"
version = "0.1.0"
source = "git+https://github.com/servo/media#35014baeb603b56b1b8b4de75919c58f7390cc30"
source = "git+https://github.com/servo/media#c8cc491c850b18393586500233cc55e29800146c"
dependencies = [
"boxfnonce 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"byte-slice-cast 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
@ -3534,7 +3534,7 @@ dependencies = [
[[package]]
name = "servo-media-gstreamer"
version = "0.1.0"
source = "git+https://github.com/servo/media#35014baeb603b56b1b8b4de75919c58f7390cc30"
source = "git+https://github.com/servo/media#c8cc491c850b18393586500233cc55e29800146c"
dependencies = [
"byte-slice-cast 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"glib 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
@ -3553,7 +3553,7 @@ dependencies = [
[[package]]
name = "servo-media-player"
version = "0.1.0"
source = "git+https://github.com/servo/media#35014baeb603b56b1b8b4de75919c58f7390cc30"
source = "git+https://github.com/servo/media#c8cc491c850b18393586500233cc55e29800146c"
dependencies = [
"ipc-channel 0.11.2 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
@ -3640,7 +3640,7 @@ dependencies = [
[[package]]
name = "servo_media_derive"
version = "0.1.0"
source = "git+https://github.com/servo/media#35014baeb603b56b1b8b4de75919c58f7390cc30"
source = "git+https://github.com/servo/media#c8cc491c850b18393586500233cc55e29800146c"
dependencies = [
"proc-macro2 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
"quote 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",