123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
- From: Paul Frazee <[email protected]>
- Date: Sat, 6 Jun 2020 10:30:45 -0500
- Subject: feat: add streaming-protocol registry to multibuffer_data_source
- blink::WebMediaPlayerImpl - which provides the <video> and <audio> behaviors - needs to know
- whether a data source will stream or fully buffer the response. It determines this behavior
- with MultibufferDataSource::AssumeFullyBuffered() which has http/s hardwired. An incorrect
- determination will cause the video/audio to fail playing.
- This patch adds a list of "streaming protocols" to the MultibufferDataSource in order to allow
- other protocols to register their streaming behavior. MultibufferDataSource::AssumeFullyBuffered()
- then refers to the list so that it can correctly determine the data source's settings.
- diff --git a/third_party/blink/renderer/platform/media/multi_buffer_data_source.cc b/third_party/blink/renderer/platform/media/multi_buffer_data_source.cc
- index 14b6e02f10cd3c9e666b23507355d42ffffa56f8..4542732d5fe1631d1f4eb519ecf9a0962f8f0565 100644
- --- a/third_party/blink/renderer/platform/media/multi_buffer_data_source.cc
- +++ b/third_party/blink/renderer/platform/media/multi_buffer_data_source.cc
- @@ -13,8 +13,10 @@
- #include "base/functional/callback_helpers.h"
- #include "base/location.h"
- #include "base/memory/raw_ptr.h"
- +#include "base/no_destructor.h"
- #include "base/numerics/safe_conversions.h"
- #include "base/task/single_thread_task_runner.h"
- +#include "base/strings/string_util.h"
- #include "media/base/media_log.h"
- #include "net/base/net_errors.h"
- #include "third_party/blink/renderer/platform/media/buffered_data_source_host_impl.h"
- @@ -63,8 +65,20 @@ const int kUpdateBufferSizeFrequency = 32;
- // How long to we delay a seek after a read?
- constexpr base::TimeDelta kSeekDelay = base::Milliseconds(20);
-
- +std::vector<std::string>* GetStreamingSchemes() {
- + static base::NoDestructor<std::vector<std::string>> streaming_schemes({
- + url::kHttpsScheme,
- + url::kHttpScheme
- + });
- + return streaming_schemes.get();
- +}
- +
- } // namespace
-
- +void AddStreamingScheme(const char* new_scheme) {
- + GetStreamingSchemes()->push_back(new_scheme);
- +}
- +
- class MultiBufferDataSource::ReadOperation {
- public:
- ReadOperation() = delete;
- @@ -156,7 +170,14 @@ bool MultiBufferDataSource::media_has_played() const {
-
- bool MultiBufferDataSource::AssumeFullyBuffered() const {
- DCHECK(url_data_);
- - return !url_data_->url().ProtocolIsInHTTPFamily();
- +
- + const std::string scheme = url_data_->url().Protocol().Ascii();
- + for (const std::string& streaming_scheme : *GetStreamingSchemes()) {
- + if (base::EqualsCaseInsensitiveASCII(scheme, streaming_scheme)) {
- + return false;
- + }
- + }
- + return true;
- }
-
- void MultiBufferDataSource::SetReader(
- diff --git a/third_party/blink/renderer/platform/media/multi_buffer_data_source.h b/third_party/blink/renderer/platform/media/multi_buffer_data_source.h
- index 5277d480ce3ac065501a986b323e8f3a983acd75..6666dd87cd8971c7ed05a4bc141e19b9be549e54 100644
- --- a/third_party/blink/renderer/platform/media/multi_buffer_data_source.h
- +++ b/third_party/blink/renderer/platform/media/multi_buffer_data_source.h
- @@ -17,6 +17,7 @@
- #include "media/base/data_source.h"
- #include "media/base/ranges.h"
- #include "media/base/tuneable.h"
- +#include "third_party/blink/public/platform/web_common.h"
- #include "third_party/blink/renderer/platform/media/url_index.h"
- #include "third_party/blink/renderer/platform/platform_export.h"
- #include "third_party/blink/renderer/platform/wtf/vector.h"
- @@ -34,6 +35,8 @@ namespace blink {
- class BufferedDataSourceHost;
- class MultiBufferReader;
-
- +void BLINK_PLATFORM_EXPORT AddStreamingScheme(const char* new_scheme);
- +
- // A data source capable of loading URLs and buffering the data using an
- // in-memory sliding window.
- //
|