OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/renderer/media/android/webmediaplayer_android.h" | 5 #include "content/renderer/media/android/webmediaplayer_android.h" |
6 | 6 |
7 #include <limits> | 7 #include <limits> |
8 | 8 |
9 #include "base/android/build_info.h" | 9 #include "base/android/build_info.h" |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
139 stream_texture_factory_(factory), | 139 stream_texture_factory_(factory), |
140 needs_external_surface_(false), | 140 needs_external_surface_(false), |
141 video_frame_provider_client_(NULL), | 141 video_frame_provider_client_(NULL), |
142 pending_playback_(false), | 142 pending_playback_(false), |
143 player_type_(MEDIA_PLAYER_TYPE_URL), | 143 player_type_(MEDIA_PLAYER_TYPE_URL), |
144 current_time_(0), | 144 current_time_(0), |
145 is_remote_(false), | 145 is_remote_(false), |
146 media_log_(media_log), | 146 media_log_(media_log), |
147 web_cdm_(NULL), | 147 web_cdm_(NULL), |
148 allow_stored_credentials_(false), | 148 allow_stored_credentials_(false), |
149 is_local_resource_(false), | |
149 weak_factory_(this) { | 150 weak_factory_(this) { |
150 DCHECK(player_manager_); | 151 DCHECK(player_manager_); |
151 DCHECK(cdm_manager_); | 152 DCHECK(cdm_manager_); |
152 | 153 |
153 DCHECK(main_thread_checker_.CalledOnValidThread()); | 154 DCHECK(main_thread_checker_.CalledOnValidThread()); |
154 | 155 |
155 player_id_ = player_manager_->RegisterMediaPlayer(this); | 156 player_id_ = player_manager_->RegisterMediaPlayer(this); |
156 | 157 |
157 #if defined(VIDEO_HOLE) | 158 #if defined(VIDEO_HOLE) |
158 force_use_overlay_embedded_video_ = CommandLine::ForCurrentProcess()-> | 159 force_use_overlay_embedded_video_ = CommandLine::ForCurrentProcess()-> |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
209 player_type_ = MEDIA_PLAYER_TYPE_MEDIA_SOURCE; | 210 player_type_ = MEDIA_PLAYER_TYPE_MEDIA_SOURCE; |
210 break; | 211 break; |
211 | 212 |
212 case LoadTypeMediaStream: | 213 case LoadTypeMediaStream: |
213 CHECK(false) << "WebMediaPlayerAndroid doesn't support MediaStream on " | 214 CHECK(false) << "WebMediaPlayerAndroid doesn't support MediaStream on " |
214 "this platform"; | 215 "this platform"; |
215 return; | 216 return; |
216 } | 217 } |
217 | 218 |
218 url_ = url; | 219 url_ = url; |
220 is_local_resource_ = IsLocalResource(); | |
219 int demuxer_client_id = 0; | 221 int demuxer_client_id = 0; |
220 if (player_type_ != MEDIA_PLAYER_TYPE_URL) { | 222 if (player_type_ != MEDIA_PLAYER_TYPE_URL) { |
221 RendererDemuxerAndroid* demuxer = | 223 RendererDemuxerAndroid* demuxer = |
222 RenderThreadImpl::current()->renderer_demuxer(); | 224 RenderThreadImpl::current()->renderer_demuxer(); |
223 demuxer_client_id = demuxer->GetNextDemuxerClientID(); | 225 demuxer_client_id = demuxer->GetNextDemuxerClientID(); |
224 | 226 |
225 media_source_delegate_.reset(new MediaSourceDelegate( | 227 media_source_delegate_.reset(new MediaSourceDelegate( |
226 demuxer, demuxer_client_id, media_loop_, media_log_)); | 228 demuxer, demuxer_client_id, media_loop_, media_log_)); |
227 | 229 |
228 if (player_type_ == MEDIA_PLAYER_TYPE_MEDIA_SOURCE) { | 230 if (player_type_ == MEDIA_PLAYER_TYPE_MEDIA_SOURCE) { |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
270 UpdateNetworkState(WebMediaPlayer::NetworkStateNetworkError); | 272 UpdateNetworkState(WebMediaPlayer::NetworkStateNetworkError); |
271 return; | 273 return; |
272 } | 274 } |
273 | 275 |
274 InitializePlayer( | 276 InitializePlayer( |
275 redirected_url, first_party_for_cookies, allow_stored_credentials, 0); | 277 redirected_url, first_party_for_cookies, allow_stored_credentials, 0); |
276 | 278 |
277 UpdateNetworkState(WebMediaPlayer::NetworkStateIdle); | 279 UpdateNetworkState(WebMediaPlayer::NetworkStateIdle); |
278 } | 280 } |
279 | 281 |
282 bool WebMediaPlayerAndroid::IsLocalResource() { | |
283 if (url_.SchemeIsFile() || url_.SchemeIsBlob()) | |
284 return true; | |
285 | |
286 if (url_.spec().find("//127.0.0.1/") != std::string::npos || // port 80 | |
qinmin
2014/08/26 03:44:17
use:
std::string host = url_.host();
if (!host.c
amogh.bihani
2014/08/26 05:31:14
Done.
| |
287 url_.spec().find("//localhost/") != std::string::npos || | |
288 url_.spec().find("//127.0.0.1:") != std::string::npos || // any port | |
289 url_.spec().find("//localhost:") != std::string::npos) { | |
290 return true; | |
291 } | |
292 | |
293 return false; | |
294 } | |
295 | |
280 void WebMediaPlayerAndroid::play() { | 296 void WebMediaPlayerAndroid::play() { |
281 DCHECK(main_thread_checker_.CalledOnValidThread()); | 297 DCHECK(main_thread_checker_.CalledOnValidThread()); |
282 #if defined(VIDEO_HOLE) | 298 #if defined(VIDEO_HOLE) |
283 if (hasVideo() && needs_external_surface_ && | 299 if (hasVideo() && needs_external_surface_ && |
284 !player_manager_->IsInFullscreen(frame_)) { | 300 !player_manager_->IsInFullscreen(frame_)) { |
285 DCHECK(!needs_establish_peer_); | 301 DCHECK(!needs_establish_peer_); |
286 player_manager_->RequestExternalSurface(player_id_, last_computed_rect_); | 302 player_manager_->RequestExternalSurface(player_id_, last_computed_rect_); |
287 } | 303 } |
288 #endif // defined(VIDEO_HOLE) | 304 #endif // defined(VIDEO_HOLE) |
289 | 305 |
(...skipping 382 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
672 return media_source_delegate_->VideoDecodedByteCount(); | 688 return media_source_delegate_->VideoDecodedByteCount(); |
673 NOTIMPLEMENTED(); | 689 NOTIMPLEMENTED(); |
674 return 0; | 690 return 0; |
675 } | 691 } |
676 | 692 |
677 void WebMediaPlayerAndroid::OnMediaMetadataChanged( | 693 void WebMediaPlayerAndroid::OnMediaMetadataChanged( |
678 const base::TimeDelta& duration, int width, int height, bool success) { | 694 const base::TimeDelta& duration, int width, int height, bool success) { |
679 DCHECK(main_thread_checker_.CalledOnValidThread()); | 695 DCHECK(main_thread_checker_.CalledOnValidThread()); |
680 bool need_to_signal_duration_changed = false; | 696 bool need_to_signal_duration_changed = false; |
681 | 697 |
682 if (url_.SchemeIs("file")) | 698 if (is_local_resource_) |
683 UpdateNetworkState(WebMediaPlayer::NetworkStateLoaded); | 699 UpdateNetworkState(WebMediaPlayer::NetworkStateLoaded); |
684 | 700 |
685 // Update duration, if necessary, prior to ready state updates that may | 701 // Update duration, if necessary, prior to ready state updates that may |
686 // cause duration() query. | 702 // cause duration() query. |
687 if (!ignore_metadata_duration_change_ && duration_ != duration) { | 703 if (!ignore_metadata_duration_change_ && duration_ != duration) { |
688 duration_ = duration; | 704 duration_ = duration; |
689 | 705 |
690 // Client readyState transition from HAVE_NOTHING to HAVE_METADATA | 706 // Client readyState transition from HAVE_NOTHING to HAVE_METADATA |
691 // already triggers a durationchanged event. If this is a different | 707 // already triggers a durationchanged event. If this is a different |
692 // transition, remember to signal durationchanged. | 708 // transition, remember to signal durationchanged. |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
830 | 846 |
831 // TODO(qinmin): This is a hack. We need the media element to stop showing the | 847 // TODO(qinmin): This is a hack. We need the media element to stop showing the |
832 // poster image by forcing it to call setDisplayMode(video). Should move the | 848 // poster image by forcing it to call setDisplayMode(video). Should move the |
833 // logic into HTMLMediaElement.cpp. | 849 // logic into HTMLMediaElement.cpp. |
834 client_->timeChanged(); | 850 client_->timeChanged(); |
835 } | 851 } |
836 | 852 |
837 void WebMediaPlayerAndroid::OnTimeUpdate(const base::TimeDelta& current_time) { | 853 void WebMediaPlayerAndroid::OnTimeUpdate(const base::TimeDelta& current_time) { |
838 DCHECK(main_thread_checker_.CalledOnValidThread()); | 854 DCHECK(main_thread_checker_.CalledOnValidThread()); |
839 current_time_ = current_time.InSecondsF(); | 855 current_time_ = current_time.InSecondsF(); |
856 if (is_local_resource_ && current_time_ <= duration()) | |
amogh.bihani
2014/08/22 09:02:45
I have used a bool instead of calling IsLocalResou
| |
857 buffered_[0].end = current_time_; | |
840 } | 858 } |
841 | 859 |
842 void WebMediaPlayerAndroid::OnConnectedToRemoteDevice( | 860 void WebMediaPlayerAndroid::OnConnectedToRemoteDevice( |
843 const std::string& remote_playback_message) { | 861 const std::string& remote_playback_message) { |
844 DCHECK(main_thread_checker_.CalledOnValidThread()); | 862 DCHECK(main_thread_checker_.CalledOnValidThread()); |
845 DCHECK(!media_source_delegate_); | 863 DCHECK(!media_source_delegate_); |
846 DrawRemotePlaybackText(remote_playback_message); | 864 DrawRemotePlaybackText(remote_playback_message); |
847 is_remote_ = true; | 865 is_remote_ = true; |
848 SetNeedsEstablishPeer(false); | 866 SetNeedsEstablishPeer(false); |
849 } | 867 } |
(...skipping 871 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1721 player_manager_->EnterFullscreen(player_id_, frame_); | 1739 player_manager_->EnterFullscreen(player_id_, frame_); |
1722 SetNeedsEstablishPeer(false); | 1740 SetNeedsEstablishPeer(false); |
1723 } | 1741 } |
1724 } | 1742 } |
1725 | 1743 |
1726 bool WebMediaPlayerAndroid::canEnterFullscreen() const { | 1744 bool WebMediaPlayerAndroid::canEnterFullscreen() const { |
1727 return player_manager_->CanEnterFullscreen(frame_); | 1745 return player_manager_->CanEnterFullscreen(frame_); |
1728 } | 1746 } |
1729 | 1747 |
1730 } // namespace content | 1748 } // namespace content |
OLD | NEW |