12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- 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/public/platform/media/multi_buffer_data_source.h b/third_party/blink/public/platform/media/multi_buffer_data_source.h
- index fd2441add0c816c5031ed0e9321d2be7e0937161..c324d855b26f6dcb63d127d7ddafa509cb1074e4 100644
- --- a/third_party/blink/public/platform/media/multi_buffer_data_source.h
- +++ b/third_party/blink/public/platform/media/multi_buffer_data_source.h
- @@ -33,6 +33,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.
- //
- 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 ba3e8d75ce49614e26dd77692166a11b614a5d9c..4c3170ecb94716ec2869c363381759cbf08f3ae6 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
- @@ -10,8 +10,10 @@
- #include "base/callback_helpers.h"
- #include "base/cxx17_backports.h"
- #include "base/location.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/public/platform/media/buffered_data_source_host_impl.h"
- @@ -60,8 +62,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;
- @@ -153,7 +167,14 @@ bool MultiBufferDataSource::media_has_played() const {
-
- bool MultiBufferDataSource::AssumeFullyBuffered() const {
- DCHECK(url_data_);
- - return !url_data_->url().SchemeIsHTTPOrHTTPS();
- +
- + const std::string scheme = url_data_->url().scheme();
- + for (const std::string& streaming_scheme : *GetStreamingSchemes()) {
- + if (base::LowerCaseEqualsASCII(scheme, streaming_scheme)) {
- + return false;
- + }
- + }
- + return true;
- }
-
- void MultiBufferDataSource::SetReader(MultiBufferReader* reader) {
|