Changeset 181259 in webkit
- Timestamp:
- Mar 8, 2015 9:55:11 PM (9 years ago)
- Location:
- trunk/Source
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r181256 r181259 1 2015-03-08 Dean Jackson <dino@apple.com> 2 3 [iOS Media] Video buffer progress missing on iPhones 4 https://bugs.webkit.org/show_bug.cgi?id=142462 5 6 Reviewed by Eric Carlson. 7 8 The fullscreen controller on the iPhone idiom was using 9 the media duration as its maximum loaded time, meaning the 10 download progress was missing (it looked like everything 11 was already downloaded). The fix is to calculate 12 what the maximum buffered time is from the HTMLMediaElement, 13 and send that to the fullscreen controller. 14 15 * Modules/mediacontrols/mediaControlsiOS.js: 16 (ControllerIOS.prototype.drawTimelineBackground): While implementing 17 the native function I noticed that the JS controls forgot that 18 the buffered time ranges are ordered, and thus they don't need 19 to search through the array. The last range will be the highest. 20 21 * html/HTMLMediaElement.cpp: 22 (WebCore::HTMLMediaElement::maxBufferedTime): New helper function 23 to calculate the highest buffered time in the media source. 24 * html/HTMLMediaElement.h: 25 26 * platform/ios/WebVideoFullscreenInterface.h: New setBufferedTime method. 27 * platform/ios/WebVideoFullscreenInterfaceAVKit.h: 28 29 * platform/ios/WebVideoFullscreenInterfaceAVKit.mm: 30 (WebVideoFullscreenInterfaceAVKit::setDuration): No longer set 31 the loadedTimeRanges. 32 (WebVideoFullscreenInterfaceAVKit::setBufferedTime): Calculate a normalized 33 value of the maximum loaded/buffered time, and tell the platform controller 34 to show that range. 35 36 * platform/ios/WebVideoFullscreenModelVideoElement.mm: 37 (WebVideoFullscreenModelVideoElement::updateForEventName): Send the maximum 38 buffered time. 39 1 40 2015-03-08 Chris Dumez <cdumez@apple.com> 2 41 -
trunk/Source/WebCore/Modules/mediacontrols/mediaControlsiOS.js
r181091 r181259 308 308 var played = this.video.currentTime / this.video.duration; 309 309 var buffered = 0; 310 for (var i = 0, end = this.video.buffered.length; i < end; ++i) 311 buffered = Math.max(this.video.buffered.end(i), buffered); 310 var bufferedRanges = this.video.buffered; 311 if (bufferedRanges && bufferedRanges.length) 312 buffered = Math.max(bufferedRanges.end(bufferedRanges.length - 1), buffered); 312 313 313 314 buffered /= this.video.duration; -
trunk/Source/WebCore/html/HTMLMediaElement.cpp
r181153 r181259 4378 4378 } 4379 4379 4380 double HTMLMediaElement::maxBufferedTime() const 4381 { 4382 RefPtr<TimeRanges> bufferedRanges = buffered(); 4383 unsigned numRanges = bufferedRanges->length(); 4384 if (!numRanges) 4385 return 0; 4386 4387 return bufferedRanges->end(numRanges - 1, ASSERT_NO_EXCEPTION); 4388 } 4389 4380 4390 PassRefPtr<TimeRanges> HTMLMediaElement::played() 4381 4391 { -
trunk/Source/WebCore/html/HTMLMediaElement.h
r181169 r181259 447 447 bool isDisablingSleep() const { return m_sleepDisabler.get(); } 448 448 449 double maxBufferedTime() const; 450 449 451 protected: 450 452 HTMLMediaElement(const QualifiedName&, Document&, bool); -
trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterface.h
r179480 r181259 48 48 virtual void setDuration(double) = 0; 49 49 virtual void setCurrentTime(double currentTime, double anchorTime) = 0; 50 virtual void setBufferedTime(double bufferedTime) = 0; 50 51 virtual void setRate(bool isPlaying, float playbackRate) = 0; 51 52 virtual void setVideoDimensions(bool hasVideo, float width, float height) = 0; -
trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.h
r181173 r181259 77 77 WEBCORE_EXPORT virtual void setDuration(double) override; 78 78 WEBCORE_EXPORT virtual void setCurrentTime(double currentTime, double anchorTime) override; 79 WEBCORE_EXPORT virtual void setBufferedTime(double bufferedTime) override; 79 80 WEBCORE_EXPORT virtual void setRate(bool isPlaying, float playbackRate) override; 80 81 WEBCORE_EXPORT virtual void setVideoDimensions(bool hasVideo, float width, float height) override; -
trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm
r181173 r181259 722 722 playerController.maxTime = duration; 723 723 playerController.contentDurationWithinEndTimes = duration; 724 playerController.loadedTimeRanges = @[@0, @(duration)]; 725 724 726 725 // FIXME: we take this as an indication that playback is ready. 727 726 playerController.canPlay = YES; … … 744 743 anchorTimeStamp:anchorTimeStamp rate:0]; 745 744 [strongThis->m_playerController setTiming:timing]; 745 }); 746 } 747 748 void WebVideoFullscreenInterfaceAVKit::setBufferedTime(double bufferedTime) 749 { 750 RefPtr<WebVideoFullscreenInterfaceAVKit> strongThis(this); 751 752 dispatch_async(dispatch_get_main_queue(), [strongThis, bufferedTime] { 753 WebAVPlayerController* playerController = strongThis->m_playerController.get(); 754 double duration = playerController.contentDuration; 755 double normalizedBufferedTime; 756 if (!duration) 757 normalizedBufferedTime = 0; 758 else 759 normalizedBufferedTime = bufferedTime / duration; 760 playerController.loadedTimeRanges = @[@0, @(normalizedBufferedTime)]; 746 761 }); 747 762 } -
trunk/Source/WebCore/platform/ios/WebVideoFullscreenModelVideoElement.mm
r179768 r181259 121 121 || eventName == eventNames().timeupdateEvent) { 122 122 m_videoFullscreenInterface->setCurrentTime(m_videoElement->currentTime(), [[NSProcessInfo processInfo] systemUptime]); 123 m_videoFullscreenInterface->setBufferedTime(m_videoElement->maxBufferedTime()); 123 124 // FIXME: 130788 - find a better event to update seekable ranges from. 124 125 m_videoFullscreenInterface->setSeekableRanges(*m_videoElement->seekable()); -
trunk/Source/WebKit2/ChangeLog
r181252 r181259 1 2015-03-08 Dean Jackson <dino@apple.com> 2 3 [iOS Media] Video buffer progress missing on iPhones 4 https://bugs.webkit.org/show_bug.cgi?id=142462 5 6 Reviewed by Eric Carlson. 7 8 Coordinate the SetBufferedTime message between the Web and UI 9 processes. 10 11 * UIProcess/ios/WebVideoFullscreenManagerProxy.messages.in: New message SetBufferedTime. 12 * WebProcess/ios/WebVideoFullscreenManager.h: 13 * WebProcess/ios/WebVideoFullscreenManager.mm: 14 (WebKit::WebVideoFullscreenManager::setBufferedTime): 15 1 16 2015-03-08 Sam Weinig <sam@webkit.org> 2 17 -
trunk/Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.messages.in
r181173 r181259 25 25 ResetMediaState() 26 26 SetCurrentTime(double currentTime, double hostTime) 27 SetBufferedTime(double bufferedTime) 27 28 SetVideoDimensions(bool hasVideo, unsigned width, unsigned height) 28 29 SetSeekableRangesVector(Vector<std::pair<double, double>> ranges); -
trunk/Source/WebKit2/WebProcess/ios/WebVideoFullscreenManager.h
r181173 r181259 72 72 virtual void setDuration(double) override; 73 73 virtual void setCurrentTime(double currentTime, double anchorTime) override; 74 virtual void setBufferedTime(double bufferedTime) override; 74 75 virtual void setRate(bool isPlaying, float playbackRate) override; 75 76 virtual void setVideoDimensions(bool hasVideo, float width, float height) override; -
trunk/Source/WebKit2/WebProcess/ios/WebVideoFullscreenManager.mm
r181173 r181259 135 135 } 136 136 137 void WebVideoFullscreenManager::setBufferedTime(double bufferedTime) 138 { 139 m_page->send(Messages::WebVideoFullscreenManagerProxy::SetBufferedTime(bufferedTime), m_page->pageID()); 140 } 141 137 142 void WebVideoFullscreenManager::setRate(bool isPlaying, float playbackRate) 138 143 {
Note: See TracChangeset
for help on using the changeset viewer.