| Index: media/blink/webmediaplayer_impl.cc
|
| diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc
|
| index b81e1516cc35c783f35e81cf62f359024bb992f7..ac71b8f97d4f18b53fd4a11399cbfe3522a5b23b 100644
|
| --- a/media/blink/webmediaplayer_impl.cc
|
| +++ b/media/blink/webmediaplayer_impl.cc
|
| @@ -235,7 +235,6 @@ WebMediaPlayerImpl::WebMediaPlayerImpl(
|
| overlay_surface_id_(SurfaceManager::kNoSurfaceID),
|
| suppress_destruction_errors_(false),
|
| suspend_enabled_(params->allow_suspend()),
|
| - use_fallback_path_(false),
|
| is_encrypted_(false),
|
| preroll_attempt_pending_(false),
|
| observer_(params->media_observer()),
|
| @@ -405,8 +404,8 @@ void WebMediaPlayerImpl::DoLoad(LoadType load_type,
|
| // Set subresource URL for crash reporting.
|
| base::debug::SetCrashKeyValue("subresource_url", gurl.spec());
|
|
|
| - if (use_fallback_path_)
|
| - fallback_url_ = gurl;
|
| + // Used for HLS playback.
|
| + loaded_url_ = gurl;
|
|
|
| load_type_ = load_type;
|
|
|
| @@ -816,9 +815,10 @@ blink::WebTimeRanges WebMediaPlayerImpl::Seekable() const {
|
| const bool is_finite_stream = data_source_ && data_source_->IsStreaming() &&
|
| std::isfinite(seekable_end);
|
|
|
| - // Do not change the seekable range when using the fallback path.
|
| - // The MediaPlayerRenderer will take care of dropping invalid seeks.
|
| - const bool force_seeks_to_zero = !use_fallback_path_ && is_finite_stream;
|
| + // Do not change the seekable range when using the MediaPlayerRenderer. It
|
| + // will take care of dropping invalid seeks.
|
| + const bool force_seeks_to_zero =
|
| + !using_media_player_renderer_ && is_finite_stream;
|
|
|
| // TODO(dalecurtis): Technically this allows seeking on media which return an
|
| // infinite duration so long as DataSource::IsStreaming() is false. While not
|
| @@ -1615,10 +1615,6 @@ void WebMediaPlayerImpl::SetDeviceScaleFactor(float scale_factor) {
|
| cast_impl_.SetDeviceScaleFactor(scale_factor);
|
| }
|
|
|
| -void WebMediaPlayerImpl::SetUseFallbackPath(bool use_fallback_path) {
|
| - use_fallback_path_ = use_fallback_path;
|
| -}
|
| -
|
| void WebMediaPlayerImpl::SetPoster(const blink::WebURL& poster) {
|
| cast_impl_.setPoster(poster);
|
| }
|
| @@ -1630,18 +1626,15 @@ void WebMediaPlayerImpl::DataSourceInitialized(bool success) {
|
|
|
| #if defined(OS_ANDROID)
|
| // We can't play HLS URLs with WebMediaPlayerImpl, so in cases where they are
|
| - // encountered, instruct the HTML media element to create a new WebMediaPlayer
|
| - // instance with the correct URL to trigger the creation of WMPI with a
|
| - // MediaPlayerRendererFactory instead.
|
| + // encountered, instruct the HTML media element to use the MediaPlayerRenderer
|
| + // instead.
|
| //
|
| - // TODO(tguilbert): Allow 'hotswapping' renderer factories to prevent reloads
|
| - // and/or rely on demuxer extracted MediaContainerNames. See crbug.com/663503.
|
| - if (data_source_ && !use_fallback_path_) {
|
| + // TODO(tguilbert): Detect the presence of HLS based on demuxing results,
|
| + // rather than the URL string. See crbug.com/663503.
|
| + if (data_source_) {
|
| const GURL url_after_redirects = data_source_->GetUrlAfterRedirects();
|
| if (MediaCodecUtil::IsHLSURL(url_after_redirects)) {
|
| - client_->RequestReload(url_after_redirects);
|
| - // |this| may be destructed, do nothing after this.
|
| - return;
|
| + renderer_factory_selector_->SetUseMediaPlayer(true);
|
| }
|
| }
|
| #endif
|
| @@ -1687,7 +1680,6 @@ void WebMediaPlayerImpl::OnSurfaceRequested(
|
| const SurfaceCreatedCB& set_surface_cb) {
|
| DCHECK(main_task_runner_->BelongsToCurrentThread());
|
| DCHECK(surface_manager_);
|
| - DCHECK(!use_fallback_path_);
|
|
|
| // A null callback indicates that the decoder is going away.
|
| if (set_surface_cb.is_null()) {
|
| @@ -1737,9 +1729,20 @@ void WebMediaPlayerImpl::StartPipeline() {
|
| BindToCurrentLoop(base::Bind(
|
| &WebMediaPlayerImpl::OnEncryptedMediaInitData, AsWeakPtr()));
|
|
|
| - if (use_fallback_path_) {
|
| + if (renderer_factory_selector_->GetCurrentFactory()
|
| + ->GetRequiredMediaResourceType() == MediaResource::Type::URL) {
|
| + if (data_source_)
|
| + loaded_url_ = data_source_->GetUrlAfterRedirects();
|
| +
|
| + // MediaPlayerRendererClient factory is the only factory that a
|
| + // MediaResource::Type::URL for the moment. This might no longer be true
|
| + // when we remove WebMediaPlayerCast.
|
| + //
|
| + // TODO(tguilbert/avayvod): Update this flag when removing |cast_impl_|.
|
| + using_media_player_renderer_ = true;
|
| +
|
| demuxer_.reset(
|
| - new MediaUrlDemuxer(media_task_runner_, fallback_url_,
|
| + new MediaUrlDemuxer(media_task_runner_, loaded_url_,
|
| frame_->GetDocument().FirstPartyForCookies()));
|
| pipeline_controller_.Start(demuxer_.get(), this, false, false);
|
| return;
|
|
|