From 2d96f7ba5b107c82151dfb0647d4a1203f55a320 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Tue, 31 Jan 2017 13:31:16 +0100 Subject: [PATCH 001/180] Increase version number --- SRGLetterbox.xcodeproj/project.pbxproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/SRGLetterbox.xcodeproj/project.pbxproj b/SRGLetterbox.xcodeproj/project.pbxproj index 882b4df6b..adf3eeb67 100644 --- a/SRGLetterbox.xcodeproj/project.pbxproj +++ b/SRGLetterbox.xcodeproj/project.pbxproj @@ -925,7 +925,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 2; DEBUG_INFORMATION_FORMAT = dwarf; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; @@ -946,7 +946,7 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MARKETING_VERSION = 0.1; + MARKETING_VERSION = 0.2; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -979,7 +979,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 2; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; @@ -994,7 +994,7 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MARKETING_VERSION = 0.1; + MARKETING_VERSION = 0.2; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; From 834c475c6ebc608f9307f68344a046789d6fdc4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Tue, 31 Jan 2017 14:46:43 +0100 Subject: [PATCH 002/180] Improve readme introduction --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0b61aab81..da683328f 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ## About -The SRG Letterbox library provides the official SRG SSR media player experience, packed into a single library. It provides: +The SRG Letterbox library defines the official SRG SSR media player experience, packed into a single library, providing: * A service to manage application-wide playback. This service supports on-demand, live and DVR audio / video streams * A player view with the official SRG SSR look and feel. The design is standard and cannot be altered. You can bind your own custom overlays to the default player controls, though From 7d02d76ceb9bcb68b6dde129b14839db7d8bf814 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Bertholon Date: Tue, 31 Jan 2017 19:32:11 +0100 Subject: [PATCH 003/180] Update documentation with full screen --- Documentation/Getting-started.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Documentation/Getting-started.md b/Documentation/Getting-started.md index e30882c1a..9ddacde78 100644 --- a/Documentation/Getting-started.md +++ b/Documentation/Getting-started.md @@ -60,12 +60,16 @@ Within the block, you can apply any `UIView` or layout change, as you would in a ## Picture in picture -To respond to picture and picture events, mostly for restoring your interface, you must implement the `SRGLetterboxPictureInPictureDelegate` delegate methods. Refer to the demo implementation for a concrete example. If no delegate is set, picture in picture will not be available, and the corresponding button will not be displayed. +To respond to picture and picture events, mostly for restoring your interface, you must implement the `SRGLetterboxPictureInPictureDelegate` delegate methods. Refer to the demo implementation for a concrete example, with the modal view controller. If no delegate is set, picture in picture will not be available, and the corresponding button will not be displayed. ## Airplay Airplay works out of the box and does not require any code. +## Full screen + +The `SRGLetterboxView` view can presents a full screen button on the interface and manage the full screen state, if, and only if the `letterboxView:toggleFullScreen:animated:withCompletionHandler:` delegate method is implemented. If no delegate is set, full screen feature will not be available, and the corresponding button will not be displayed. Because `SRGLetterboxView` can be added anywhere in the view hierarchy, you have the responsibility to layout it to the full screen state in this method. Refer to the demo implementation for a concrete example, with the modal view controller. + ## Statistics If your project has started an [SRG Analytics](https://github.com/SRGSSR/srganalytics-ios) tracker, stream playback statistics will automatically be sent. \ No newline at end of file From 2d60511b1279ee337e1fa167ec761ce66cbfe661 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Wed, 1 Feb 2017 07:17:29 +0100 Subject: [PATCH 004/180] Slightly improve documentation --- Documentation/Getting-started.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Documentation/Getting-started.md b/Documentation/Getting-started.md index 9ddacde78..2721f4e83 100644 --- a/Documentation/Getting-started.md +++ b/Documentation/Getting-started.md @@ -60,7 +60,9 @@ Within the block, you can apply any `UIView` or layout change, as you would in a ## Picture in picture -To respond to picture and picture events, mostly for restoring your interface, you must implement the `SRGLetterboxPictureInPictureDelegate` delegate methods. Refer to the demo implementation for a concrete example, with the modal view controller. If no delegate is set, picture in picture will not be available, and the corresponding button will not be displayed. +To respond to picture and picture events, mostly for restoring your interface, you must implement the `SRGLetterboxPictureInPictureDelegate` delegate methods. If no delegate is set, picture in picture will not be available, and the corresponding button will not be displayed. + +Refer to the demo for a concrete example, implementing restoration both for a view controller presented modally and for a view controller pushed into a navigation controller. ## Airplay @@ -68,7 +70,9 @@ Airplay works out of the box and does not require any code. ## Full screen -The `SRGLetterboxView` view can presents a full screen button on the interface and manage the full screen state, if, and only if the `letterboxView:toggleFullScreen:animated:withCompletionHandler:` delegate method is implemented. If no delegate is set, full screen feature will not be available, and the corresponding button will not be displayed. Because `SRGLetterboxView` can be added anywhere in the view hierarchy, you have the responsibility to layout it to the full screen state in this method. Refer to the demo implementation for a concrete example, with the modal view controller. +The `SRGLetterboxView` view presents a full screen button on its overlay interface, allowing to toggle between normal and full screen display. This button is displayed if and only if the `-letterboxView:toggleFullScreen:animated:withCompletionHandler:` delegate method is implemented. Since `SRGLetterboxView` can be added anywhere to the view hierarchy, you are responsible of managing the full screen layout, as well as the transition animation between the normal and full screen states. + +Refer to the modal view controller demo implementation for a concrete example. ## Statistics From b3762722e3e3fd364bc0efb99833da525d7280c7 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Bertholon Date: Wed, 1 Feb 2017 18:48:38 +0100 Subject: [PATCH 005/180] Add HockeyApp in demo project --- Cartfile | 3 +++ Cartfile.resolved | 3 ++- Demo/Info.plist | 2 ++ Demo/Sources/Application/AppDelegate.m | 7 +++++++ SRGLetterbox.xcodeproj/project.pbxproj | 10 ++++++++-- 5 files changed, 22 insertions(+), 3 deletions(-) diff --git a/Cartfile b/Cartfile index 88ee90d8a..fa08f4b87 100644 --- a/Cartfile +++ b/Cartfile @@ -7,3 +7,6 @@ github "SRGSSR/srganalytics-ios" "develop" github "SRGSSR/srgdataprovider-ios" "develop" github "SRGSSR/srglogger-ios" "develop" github "SRGSSR/SRGMediaPlayer-iOS" "develop" + +# For the demo app +github "bitstadium/HockeySDK-iOS" diff --git a/Cartfile.resolved b/Cartfile.resolved index 5f03df499..0b29c9104 100644 --- a/Cartfile.resolved +++ b/Cartfile.resolved @@ -1,5 +1,6 @@ github "comScore/ComScore-iOS-SDK" "92f34897cd7659d56bb5a3e9e85b808cf3758bda" github "SRGSSR/FXReachability" "3cad7998f717145c90ff97eef552053d66063339" +github "bitstadium/HockeySDK-iOS" "4.1.3" github "Mantle/Mantle" "2.1.0" github "SnapKit/Masonry" "v1.0.2" github "ibireme/YYWebImage" "1.0.5" @@ -7,5 +8,5 @@ github "ashaman/libextobjc" "e24f2be3af2cf7fc88a78295f116ef98d0832bcf" github "SRGSSR/srglogger-ios" "9a911766b46432d9a21d8b04fd4325b537b6e7b2" github "SRGSSR/SRGMediaPlayer-iOS" "7f14810089e69cf01494fc77dc659dc44895487d" github "SRGSSR/ASValueTrackingSlider" "840137273ef2b66abfd3db304e4ac7c93ab31568" -github "SRGSSR/srgdataprovider-ios" "8c709ff74674aecd225750bd795313a48e229eef" +github "SRGSSR/srgdataprovider-ios" "ce6f3f1bf3a90b41382708dba30c30f6ff96d79a" github "SRGSSR/srganalytics-ios" "ea545eac25d20761e8a32ec0fa7a927d90c4691c" diff --git a/Demo/Info.plist b/Demo/Info.plist index 17f52a32e..e6f0c76a8 100644 --- a/Demo/Info.plist +++ b/Demo/Info.plist @@ -20,6 +20,8 @@ $(CURRENT_PROJECT_VERSION) LSRequiresIPhoneOS + NSPhotoLibraryUsageDescription + For HockeyApp Feedbacks UIBackgroundModes audio diff --git a/Demo/Sources/Application/AppDelegate.m b/Demo/Sources/Application/AppDelegate.m index 6c93bf1b8..732a9a8e5 100644 --- a/Demo/Sources/Application/AppDelegate.m +++ b/Demo/Sources/Application/AppDelegate.m @@ -13,6 +13,8 @@ #import #import +#import + @interface AppDelegate () @property (nonatomic) Class restorationClass; @@ -56,6 +58,11 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( DemosViewController *demosViewController = [[DemosViewController alloc] init]; self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:demosViewController]; + + [[BITHockeyManager sharedHockeyManager] configureWithIdentifier:@"7bf489539f6e44739133ae456c41dc2c"]; + [[BITHockeyManager sharedHockeyManager] startManager]; + [[BITHockeyManager sharedHockeyManager].authenticator authenticateInstallation]; + return YES; } diff --git a/SRGLetterbox.xcodeproj/project.pbxproj b/SRGLetterbox.xcodeproj/project.pbxproj index adf3eeb67..5977906a7 100644 --- a/SRGLetterbox.xcodeproj/project.pbxproj +++ b/SRGLetterbox.xcodeproj/project.pbxproj @@ -7,6 +7,8 @@ objects = { /* Begin PBXBuildFile section */ + 081322F31E42503D00639174 /* HockeySDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 081322F21E42503D00639174 /* HockeySDK.framework */; }; + 081322F41E42503D00639174 /* HockeySDK.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 081322F21E42503D00639174 /* HockeySDK.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 087EB60C1E290A14005DD80B /* SRGLetterboxService.h in Headers */ = {isa = PBXBuildFile; fileRef = 087EB60A1E290A14005DD80B /* SRGLetterboxService.h */; settings = {ATTRIBUTES = (Public, ); }; }; 087EB60D1E290A14005DD80B /* SRGLetterboxService.m in Sources */ = {isa = PBXBuildFile; fileRef = 087EB60B1E290A14005DD80B /* SRGLetterboxService.m */; }; 087EB6101E290AC4005DD80B /* SRGLetterboxController.h in Headers */ = {isa = PBXBuildFile; fileRef = 087EB60E1E290AC4005DD80B /* SRGLetterboxController.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -195,6 +197,7 @@ 6FAB3B6E1E2905CA00CC2197 /* Mantle.framework in Embed Frameworks */, 6FAB3B7A1E2905CA00CC2197 /* SRGMediaPlayer.framework in Embed Frameworks */, 6FAB3B9D1E291A9700CC2197 /* YYWebImage.framework in Embed Frameworks */, + 081322F41E42503D00639174 /* HockeySDK.framework in Embed Frameworks */, 6FAB3B701E2905CA00CC2197 /* SRGAnalytics_DataProvider.framework in Embed Frameworks */, 6FAB3B6C1E2905CA00CC2197 /* libextobjc.framework in Embed Frameworks */, 08FA0D251E30F954000C94EF /* FXReachability.framework in Embed Frameworks */, @@ -230,6 +233,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 081322F21E42503D00639174 /* HockeySDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = HockeySDK.framework; path = Carthage/Build/iOS/HockeySDK.framework; sourceTree = ""; }; 087EB60A1E290A14005DD80B /* SRGLetterboxService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SRGLetterboxService.h; sourceTree = ""; }; 087EB60B1E290A14005DD80B /* SRGLetterboxService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SRGLetterboxService.m; sourceTree = ""; }; 087EB60E1E290AC4005DD80B /* SRGLetterboxController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SRGLetterboxController.h; sourceTree = ""; }; @@ -317,6 +321,7 @@ 6FAB3B641E2905B400CC2197 /* SRGLetterbox.framework in Frameworks */, 08FA0CAA1E2E32D6000C94EF /* Masonry.framework in Frameworks */, 6FAB3B771E2905CA00CC2197 /* SRGLogger.framework in Frameworks */, + 081322F31E42503D00639174 /* HockeySDK.framework in Frameworks */, 6FAB3B731E2905CA00CC2197 /* SRGAnalytics.framework in Frameworks */, 6FAB3B6D1E2905CA00CC2197 /* Mantle.framework in Frameworks */, 6FAB3B791E2905CA00CC2197 /* SRGMediaPlayer.framework in Frameworks */, @@ -473,6 +478,7 @@ 6FAB3B071E28FB1400CC2197 /* ComScore.framework */, 08FA0CDB1E2E8CCC000C94EF /* CoreText.framework */, 08FA0D1F1E30F820000C94EF /* FXReachability.framework */, + 081322F21E42503D00639174 /* HockeySDK.framework */, 6FAB3B081E28FB1400CC2197 /* libextobjc.framework */, 6FAB3B091E28FB1400CC2197 /* Mantle.framework */, 08FA0CA81E2E325F000C94EF /* Masonry.framework */, @@ -925,7 +931,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 0; DEBUG_INFORMATION_FORMAT = dwarf; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; @@ -979,7 +985,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 0; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; From 1d6176de95b96046e26b1f5cfc600d001eed4c0e Mon Sep 17 00:00:00 2001 From: Pierre-Yves Bertholon Date: Wed, 1 Feb 2017 18:49:37 +0100 Subject: [PATCH 006/180] Update build number --- SRGLetterbox.xcodeproj/project.pbxproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SRGLetterbox.xcodeproj/project.pbxproj b/SRGLetterbox.xcodeproj/project.pbxproj index 5977906a7..175c6c36b 100644 --- a/SRGLetterbox.xcodeproj/project.pbxproj +++ b/SRGLetterbox.xcodeproj/project.pbxproj @@ -931,7 +931,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0; + CURRENT_PROJECT_VERSION = 3; DEBUG_INFORMATION_FORMAT = dwarf; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; @@ -985,7 +985,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0; + CURRENT_PROJECT_VERSION = 3; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; From 58177b0a7a18812055aaa05fb3fcdb05832d44a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Tue, 31 Jan 2017 15:57:43 +0100 Subject: [PATCH 007/180] Redistribute public methods between service and controller. Rename notifications --- .../Sources/Service/SRGLetterboxController.h | 77 +++++++++++++++++- .../Sources/Service/SRGLetterboxController.m | 15 ++++ .../Sources/Service/SRGLetterboxService.h | 78 +------------------ .../Sources/Service/SRGLetterboxService.m | 32 +++----- Framework/Sources/Views/SRGLetterboxView.m | 8 +- Tests/Sources/LetterboxServiceTestCase.m | 76 +++++++++--------- 6 files changed, 144 insertions(+), 142 deletions(-) diff --git a/Framework/Sources/Service/SRGLetterboxController.h b/Framework/Sources/Service/SRGLetterboxController.h index 245d80db5..7bcc9e24d 100644 --- a/Framework/Sources/Service/SRGLetterboxController.h +++ b/Framework/Sources/Service/SRGLetterboxController.h @@ -10,16 +10,63 @@ NS_ASSUME_NONNULL_BEGIN -// Standard seek intervals +/** + * Standard seek intervals + */ OBJC_EXTERN const NSInteger SRGLetterboxBackwardSeekInterval; OBJC_EXTERN const NSInteger SRGLetterboxForwardSeekInterval; +/** + * Notification sent when playback metadata is updated (use the dictionary keys below to get previous and new values) + */ +OBJC_EXTERN NSString * const SRGLetterboxMetadataDidChangeNotification; + +/** + * Current metadata + */ +OBJC_EXTERN NSString * const SRGLetterboxPreviousURNKey; +OBJC_EXTERN NSString * const SRGLetterboxMediaKey; +OBJC_EXTERN NSString * const SRGLetterboxMediaCompositionKey; +OBJC_EXTERN NSString * const SRGLetterboxPreferredQualityKey; + +/** + * Previous metadata + */ +OBJC_EXTERN NSString * const SRGLetterboxPreviousURNKey; +OBJC_EXTERN NSString * const SRGLetterboxPreviousMediaKey; +OBJC_EXTERN NSString * const SRGLetterboxPreviousMediaCompositionKey; +OBJC_EXTERN NSString * const SRGLetterboxPreferredQualityKey; + +/** + * Notification sent when an error has been encountered. Use the `error` property to get the error itself + */ +OBJC_EXTERN NSString * const SRGLetterboxPlaybackDidFailNotification; + /** * Lightweight `SRGMediaPlayerController` subclass. This class exposes only standard Letterbox functionalities, and inhibits * some `SRGMediaPlayerController` behaviors. */ @interface SRGLetterboxController : SRGMediaPlayerController +/** + * Play the specified Uniform Resource Name + * + * @discussion Does nothing if the urn is the one currently being played + */ +- (void)playURN:(SRGMediaURN *)URN withPreferredQuality:(SRGQuality)preferredQuality; + +/** + * Play the specified media + * + * @discussion Does nothing if the media is the one currently being played + */ +- (void)playMedia:(SRGMedia *)media withPreferredQuality:(SRGQuality)preferredQuality; + +/** + * Reset playback, stopping a playback request if any has been made + */ +- (void)reset; + /** * Return YES iff the player can seek backward from a standard amount of seconds * @@ -53,6 +100,34 @@ OBJC_EXTERN const NSInteger SRGLetterboxForwardSeekInterval; @end +/** + * Playback information. Changes are notified through `SRGLetterboxMetadataDidChangeNotification` and + * `SRGLetterboxPlaybackDidFailNotification` + */ +@interface SRGLetterboxController (PlaybackInformation) + +/** + * URN + */ +@property (nonatomic, readonly, nullable) SRGMediaURN *URN; + +/** + * Media information + */ +@property (nonatomic, readonly, nullable) SRGMedia *media; + +/** + * Media composition + */ +@property (nonatomic, readonly, nullable) SRGMediaComposition *mediaComposition; + +/** + * Error if any has been encountered + */ +@property (nonatomic, readonly) NSError *error; + +@end + /** * Only playback of media compositions is available on the Letterbox controller */ diff --git a/Framework/Sources/Service/SRGLetterboxController.m b/Framework/Sources/Service/SRGLetterboxController.m index af5f12787..38afe2b6f 100644 --- a/Framework/Sources/Service/SRGLetterboxController.m +++ b/Framework/Sources/Service/SRGLetterboxController.m @@ -9,6 +9,21 @@ const NSInteger SRGLetterboxBackwardSeekInterval = 30.; const NSInteger SRGLetterboxForwardSeekInterval = 30.; +NSString * const SRGLetterboxMetadataDidChangeNotification = @"SRGLetterboxMetadataDidChangeNotification"; + +NSString * const SRGLetterboxServiceURNKey = @"SRGLetterboxServiceURNKey"; +NSString * const SRGLetterboxMediaKey = @"SRGLetterboxMediaKey"; +NSString * const SRGLetterboxMediaCompositionKey = @"SRGLetterboxMediaCompositionKey"; +NSString * const SRGLetterboxPreferredQualityKey = @"SRGLetterboxPreferredQualityKey"; + +NSString * const SRGLetterboxPreviousURNKey = @"SRGLetterboxPreviousURNKey"; +NSString * const SRGLetterboxPreviousMediaKey = @"SRGLetterboxPreviousMediaKey"; +NSString * const SRGLetterboxPreviousMediaCompositionKey = @"SRGLetterboxPreviousMediaCompositionKey"; +NSString * const SRGLetterboxPreferredQualityKey = @"SRGLetterboxPreferredQualityKey"; + +NSString * const SRGLetterboxPlaybackDidFailNotification = @"SRGLetterboxPlaybackDidFailNotification"; + + @interface SRGLetterboxController () // For successive seeks, update the target time (previous seeks are cancelled). This makes it possible to seek faster diff --git a/Framework/Sources/Service/SRGLetterboxService.h b/Framework/Sources/Service/SRGLetterboxService.h index 9377f8159..4deff4271 100644 --- a/Framework/Sources/Service/SRGLetterboxService.h +++ b/Framework/Sources/Service/SRGLetterboxService.h @@ -46,39 +46,12 @@ NS_ASSUME_NONNULL_BEGIN @end -/** - * Notification sent when playback metadata is updated (use the dictionary keys below to get previous and new values) - */ -OBJC_EXTERN NSString * const SRGLetterboxServiceMetadataDidChangeNotification; - -/** - * Current metadata - */ -OBJC_EXTERN NSString * const SRGLetterboxServicePreviousURNKey; -OBJC_EXTERN NSString * const SRGLetterboxServiceMediaKey; -OBJC_EXTERN NSString * const SRGLetterboxServiceMediaCompositionKey; -OBJC_EXTERN NSString * const SRGLetterboxServicePreferredQualityKey; - -/** - * Previous metadata - */ -OBJC_EXTERN NSString * const SRGLetterboxServicePreviousURNKey; -OBJC_EXTERN NSString * const SRGLetterboxServicePreviousMediaKey; -OBJC_EXTERN NSString * const SRGLetterboxServicePreviousMediaCompositionKey; -OBJC_EXTERN NSString * const SRGLetterboxServicePreviousPreferredQualityKey; - -/** - * Notification sent when an error has been encountered. Use the `error` property to get the error itself - */ -OBJC_EXTERN NSString * const SRGLetterboxServicePlaybackDidFailNotification; - /** * Service responsible for media playback. The service itself is a singleton which manages main playback throughout the * application (and associated features like picture in picture, Airplay or control center integration). * - * @discussion The analytics tracker singleton instance must be started before the singleton instance is accessed for - * the first time, otherwise an exception will be thrown in debug builds. Please refer to `SRGAnalyticsTracker` - * documentation for more information + * @discussion Your target must support the 'Audio, Airplay, and Picture in Picture' capabilities, otherwise an exception + * will be thrown when the service is accessed for the first time */ @interface SRGLetterboxService : NSObject @@ -100,59 +73,12 @@ OBJC_EXTERN NSString * const SRGLetterboxServicePlaybackDidFailNotification; */ @property (nonatomic, readonly) SRGLetterboxController *controller; -/** - * Play the specified Uniform Resource Name - * - * @discussion Does nothing if the urn is the one currently being played - */ -- (void)playURN:(SRGMediaURN *)URN withPreferredQuality:(SRGQuality)preferredQuality; - -/** - * Play the specified media - * - * @discussion Does nothing if the media is the one currently being played - */ -- (void)playMedia:(SRGMedia *)media withPreferredQuality:(SRGQuality)preferredQuality; - /** * Transfers playback from the specified existing controller to the service. The service media player controller * is replaced */ - (void)resumeFromController:(SRGLetterboxController *)controller; -/** - * Reset playback, stopping a playback request if any has been made - */ -- (void)reset; - -@end - -/** - * Playback information. Changes are notified through `SRGLetterboxServiceMetadataDidChangeNotification` and - * `SRGLetterboxServicePlaybackDidFailNotification` - */ -@interface SRGLetterboxService (PlaybackInformation) - -/** - * URN - */ -@property (nonatomic, readonly, nullable) SRGMediaURN *URN; - -/** - * Media information - */ -@property (nonatomic, readonly, nullable) SRGMedia *media; - -/** - * Media composition - */ -@property (nonatomic, readonly, nullable) SRGMediaComposition *mediaComposition; - -/** - * Error if any has been encountered - */ -@property (nonatomic, readonly) NSError *error; - @end /** diff --git a/Framework/Sources/Service/SRGLetterboxService.m b/Framework/Sources/Service/SRGLetterboxService.m index d222a04e2..cb1a87503 100644 --- a/Framework/Sources/Service/SRGLetterboxService.m +++ b/Framework/Sources/Service/SRGLetterboxService.m @@ -18,20 +18,6 @@ static void *s_kvoContext = &s_kvoContext; -NSString * const SRGLetterboxServiceMetadataDidChangeNotification = @"SRGLetterboxServiceMetadataDidChangeNotification"; - -NSString * const SRGLetterboxServiceURNKey = @"SRGLetterboxServiceURNKey"; -NSString * const SRGLetterboxServiceMediaKey = @"SRGLetterboxServiceMediaKey"; -NSString * const SRGLetterboxServiceMediaCompositionKey = @"SRGLetterboxServiceMediaCompositionKey"; -NSString * const SRGLetterboxServicePreferredQualityKey = @"SRGLetterboxServicePreferredQualityKey"; - -NSString * const SRGLetterboxServicePreviousURNKey = @"SRGLetterboxServicePreviousURNKey"; -NSString * const SRGLetterboxServicePreviousMediaKey = @"SRGLetterboxServicePreviousMediaKey"; -NSString * const SRGLetterboxServicePreviousMediaCompositionKey = @"SRGLetterboxServicePreviousMediaCompositionKey"; -NSString * const SRGLetterboxServicePreviousPreferredQualityKey = @"SRGLetterboxServicePreviousPreferredQualityKey"; - -NSString * const SRGLetterboxServicePlaybackDidFailNotification = @"SRGLetterboxServicePlaybackDidFailNotification"; - __attribute__((constructor)) static void SRGLetterboxServiceInit(void) { // Setup for Airplay, picture in picture and control center integration @@ -234,28 +220,28 @@ - (void)updateWithURN:(SRGMediaURN *)URN media:(SRGMedia *)media mediaCompositio userInfo[SRGLetterboxServiceURNKey] = URN; } if (media) { - userInfo[SRGLetterboxServiceMediaKey] = media; + userInfo[SRGLetterboxMediaKey] = media; } if (mediaComposition) { - userInfo[SRGLetterboxServiceMediaCompositionKey] = mediaComposition; + userInfo[SRGLetterboxMediaCompositionKey] = mediaComposition; } if (preferredQuality) { - userInfo[SRGLetterboxServicePreferredQualityKey] = @(preferredQuality); + userInfo[SRGLetterboxPreferredQualityKey] = @(preferredQuality); } if (previousURN) { - userInfo[SRGLetterboxServicePreviousURNKey] = previousURN; + userInfo[SRGLetterboxPreviousURNKey] = previousURN; } if (previousMedia) { - userInfo[SRGLetterboxServicePreviousMediaKey] = previousMedia; + userInfo[SRGLetterboxPreviousMediaKey] = previousMedia; } if (previousMediaComposition) { - userInfo[SRGLetterboxServicePreviousMediaCompositionKey] = previousMediaComposition; + userInfo[SRGLetterboxPreviousMediaCompositionKey] = previousMediaComposition; } if (previousPreferredQuality) { - userInfo[SRGLetterboxServicePreviousPreferredQualityKey] = @(previousPreferredQuality); + userInfo[SRGLetterboxPreferredQualityKey] = @(previousPreferredQuality); } - [[NSNotificationCenter defaultCenter] postNotificationName:SRGLetterboxServiceMetadataDidChangeNotification object:self userInfo:[userInfo copy]]; + [[NSNotificationCenter defaultCenter] postNotificationName:SRGLetterboxMetadataDidChangeNotification object:self userInfo:[userInfo copy]]; } #pragma mark Playback @@ -368,7 +354,7 @@ - (void)reportError:(NSError *)error NSUnderlyingErrorKey : error }]; } - [[NSNotificationCenter defaultCenter] postNotificationName:SRGLetterboxServicePlaybackDidFailNotification object:self]; + [[NSNotificationCenter defaultCenter] postNotificationName:SRGLetterboxPlaybackDidFailNotification object:self]; } #pragma mark Control center and lock screen integration diff --git a/Framework/Sources/Views/SRGLetterboxView.m b/Framework/Sources/Views/SRGLetterboxView.m index b5065f7b4..04feffccf 100644 --- a/Framework/Sources/Views/SRGLetterboxView.m +++ b/Framework/Sources/Views/SRGLetterboxView.m @@ -170,11 +170,11 @@ - (void)willMoveToWindow:(UIWindow *)newWindow [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mediaMetadataDidChange:) - name:SRGLetterboxServiceMetadataDidChangeNotification + name:SRGLetterboxMetadataDidChangeNotification object:[SRGLetterboxService sharedService]]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mediaPlaybackDidFail:) - name:SRGLetterboxServicePlaybackDidFailNotification + name:SRGLetterboxPlaybackDidFailNotification object:[SRGLetterboxService sharedService]]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playbackStateDidChange:) @@ -211,10 +211,10 @@ - (void)willMoveToWindow:(UIWindow *)newWindow [letterboxController removePeriodicTimeObserver:self.periodicTimeObserver]; [[NSNotificationCenter defaultCenter] removeObserver:self - name:SRGLetterboxServiceMetadataDidChangeNotification + name:SRGLetterboxMetadataDidChangeNotification object:[SRGLetterboxService sharedService]]; [[NSNotificationCenter defaultCenter] removeObserver:self - name:SRGLetterboxServicePlaybackDidFailNotification + name:SRGLetterboxPlaybackDidFailNotification object:[SRGLetterboxService sharedService]]; [[NSNotificationCenter defaultCenter] removeObserver:self name:SRGMediaPlayerPlaybackStateDidChangeNotification diff --git a/Tests/Sources/LetterboxServiceTestCase.m b/Tests/Sources/LetterboxServiceTestCase.m index 42a983e4c..f247818ff 100644 --- a/Tests/Sources/LetterboxServiceTestCase.m +++ b/Tests/Sources/LetterboxServiceTestCase.m @@ -80,16 +80,16 @@ - (void)testPlaybackMetadata [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:service.controller handler:^BOOL(NSNotification * _Nonnull notification) { return [notification.userInfo[SRGMediaPlayerPlaybackStateKey] integerValue] == SRGMediaPlayerPlaybackStatePlaying; }]; - [self expectationForNotification:SRGLetterboxServiceMetadataDidChangeNotification object:service handler:^BOOL(NSNotification * _Nonnull notification) { - XCTAssertEqualObjects(notification.userInfo[SRGLetterboxServiceMediaKey], media); - XCTAssertNil(notification.userInfo[SRGLetterboxServicePreviousMediaCompositionKey]); + [self expectationForNotification:SRGLetterboxMetadataDidChangeNotification object:service handler:^BOOL(NSNotification * _Nonnull notification) { + XCTAssertEqualObjects(notification.userInfo[SRGLetterboxMediaKey], media); + XCTAssertNil(notification.userInfo[SRGLetterboxPreviousMediaCompositionKey]); - if (! notification.userInfo[SRGLetterboxServiceMediaCompositionKey]) { - XCTAssertNil(notification.userInfo[SRGLetterboxServicePreviousMediaKey]); + if (! notification.userInfo[SRGLetterboxMediaCompositionKey]) { + XCTAssertNil(notification.userInfo[SRGLetterboxPreviousMediaKey]); return NO; } else { - XCTAssertEqualObjects(notification.userInfo[SRGLetterboxServicePreviousMediaKey], media); + XCTAssertEqualObjects(notification.userInfo[SRGLetterboxPreviousMediaKey], media); return YES; } }]; @@ -134,7 +134,7 @@ - (void)testSameMediaPlaybackWhileAlreadyPlaying [self waitForExpectationsWithTimeout:20. handler:nil]; // Expect no change when trying to play the same media - id metadataObserver = [[NSNotificationCenter defaultCenter] addObserverForName:SRGLetterboxServiceMetadataDidChangeNotification object:service queue:nil usingBlock:^(NSNotification * _Nonnull note) { + id metadataObserver = [[NSNotificationCenter defaultCenter] addObserverForName:SRGLetterboxMetadataDidChangeNotification object:service queue:nil usingBlock:^(NSNotification * _Nonnull note) { XCTFail(@"Expect no metadata update when playing the same media"); }]; id eventObserver = [[NSNotificationCenter defaultCenter] addObserverForName:SRGMediaPlayerPlaybackStateDidChangeNotification object:service.controller queue:nil usingBlock:^(NSNotification * _Nonnull note) { @@ -185,7 +185,7 @@ - (void)testSameMediaPlaybackWhilePaused [self waitForExpectationsWithTimeout:20. handler:nil]; // Expect only a player state change notification, no metadata change notification - id metadataObserver = [[NSNotificationCenter defaultCenter] addObserverForName:SRGLetterboxServiceMetadataDidChangeNotification object:service queue:nil usingBlock:^(NSNotification * _Nonnull note) { + id metadataObserver = [[NSNotificationCenter defaultCenter] addObserverForName:SRGLetterboxMetadataDidChangeNotification object:service queue:nil usingBlock:^(NSNotification * _Nonnull note) { XCTFail(@"Expect no metadata update when playing the same media"); }]; @@ -220,8 +220,8 @@ - (void)testMediaChange [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:service.controller handler:^BOOL(NSNotification * _Nonnull notification) { return [notification.userInfo[SRGMediaPlayerPlaybackStateKey] integerValue] == SRGMediaPlayerPlaybackStatePlaying; }]; - [self expectationForNotification:SRGLetterboxServiceMetadataDidChangeNotification object:service handler:^BOOL(NSNotification * _Nonnull notification) { - return notification.userInfo[SRGLetterboxServiceMediaCompositionKey] != nil; + [self expectationForNotification:SRGLetterboxMetadataDidChangeNotification object:service handler:^BOOL(NSNotification * _Nonnull notification) { + return notification.userInfo[SRGLetterboxMediaCompositionKey] != nil; }]; [[SRGLetterboxService sharedService] playMedia:media1 withPreferredQuality:SRGQualityNone]; @@ -251,17 +251,17 @@ - (void)testMediaChange [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:service.controller handler:^BOOL(NSNotification * _Nonnull notification) { return [notification.userInfo[SRGMediaPlayerPlaybackStateKey] integerValue] == SRGMediaPlayerPlaybackStatePlaying; }]; - [self expectationForNotification:SRGLetterboxServiceMetadataDidChangeNotification object:service handler:^BOOL(NSNotification * _Nonnull notification) { - XCTAssertEqualObjects(notification.userInfo[SRGLetterboxServiceMediaKey], media2); + [self expectationForNotification:SRGLetterboxMetadataDidChangeNotification object:service handler:^BOOL(NSNotification * _Nonnull notification) { + XCTAssertEqualObjects(notification.userInfo[SRGLetterboxMediaKey], media2); - if (! notification.userInfo[SRGLetterboxServiceMediaCompositionKey]) { - XCTAssertEqualObjects(notification.userInfo[SRGLetterboxServicePreviousMediaKey], media1); - XCTAssertEqualObjects(notification.userInfo[SRGLetterboxServicePreviousMediaCompositionKey], mediaComposition1); + if (! notification.userInfo[SRGLetterboxMediaCompositionKey]) { + XCTAssertEqualObjects(notification.userInfo[SRGLetterboxPreviousMediaKey], media1); + XCTAssertEqualObjects(notification.userInfo[SRGLetterboxPreviousMediaCompositionKey], mediaComposition1); return NO; } else { - XCTAssertEqualObjects(notification.userInfo[SRGLetterboxServicePreviousMediaKey], media2); - XCTAssertNil(notification.userInfo[SRGLetterboxServicePreviousMediaCompositionKey]); + XCTAssertEqualObjects(notification.userInfo[SRGLetterboxPreviousMediaKey], media2); + XCTAssertNil(notification.userInfo[SRGLetterboxPreviousMediaCompositionKey]); return YES; } }]; @@ -291,8 +291,8 @@ - (void)testPlayFromURN [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:service.controller handler:^BOOL(NSNotification * _Nonnull notification) { return [notification.userInfo[SRGMediaPlayerPlaybackStateKey] integerValue] == SRGMediaPlayerPlaybackStatePlaying; }]; - [self expectationForNotification:SRGLetterboxServiceMetadataDidChangeNotification object:service handler:^BOOL(NSNotification * _Nonnull notification) { - return notification.userInfo[SRGLetterboxServiceMediaCompositionKey] != nil; + [self expectationForNotification:SRGLetterboxMetadataDidChangeNotification object:service handler:^BOOL(NSNotification * _Nonnull notification) { + return notification.userInfo[SRGLetterboxMediaCompositionKey] != nil; }]; [service playURN:URN withPreferredQuality:SRGQualityNone]; @@ -319,20 +319,20 @@ - (void)testReset [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:service.controller handler:^BOOL(NSNotification * _Nonnull notification) { return [notification.userInfo[SRGMediaPlayerPlaybackStateKey] integerValue] == SRGMediaPlayerPlaybackStatePlaying; }]; - [self expectationForNotification:SRGLetterboxServiceMetadataDidChangeNotification object:service handler:^BOOL(NSNotification * _Nonnull notification) { - return notification.userInfo[SRGLetterboxServiceMediaCompositionKey] != nil; + [self expectationForNotification:SRGLetterboxMetadataDidChangeNotification object:service handler:^BOOL(NSNotification * _Nonnull notification) { + return notification.userInfo[SRGLetterboxMediaCompositionKey] != nil; }]; [[SRGLetterboxService sharedService] playMedia:media withPreferredQuality:SRGQualityNone]; [self waitForExpectationsWithTimeout:20. handler:nil]; - [self expectationForNotification:SRGLetterboxServiceMetadataDidChangeNotification object:service handler:^BOOL(NSNotification * _Nonnull notification) { - XCTAssertEqualObjects(notification.userInfo[SRGLetterboxServicePreviousMediaKey], media); - XCTAssertNil(notification.userInfo[SRGLetterboxServiceMediaKey]); + [self expectationForNotification:SRGLetterboxMetadataDidChangeNotification object:service handler:^BOOL(NSNotification * _Nonnull notification) { + XCTAssertEqualObjects(notification.userInfo[SRGLetterboxPreviousMediaKey], media); + XCTAssertNil(notification.userInfo[SRGLetterboxMediaKey]); - XCTAssertNotNil(notification.userInfo[SRGLetterboxServicePreviousMediaCompositionKey]); - XCTAssertNil(notification.userInfo[SRGLetterboxServiceMediaCompositionKey]); + XCTAssertNotNil(notification.userInfo[SRGLetterboxPreviousMediaCompositionKey]); + XCTAssertNil(notification.userInfo[SRGLetterboxMediaCompositionKey]); return YES; }]; @@ -369,12 +369,12 @@ - (void)testResumeWithIdleService [self waitForExpectationsWithTimeout:20. handler:nil]; - [self expectationForNotification:SRGLetterboxServiceMetadataDidChangeNotification object:nil handler:^BOOL(NSNotification * _Nonnull notification) { - XCTAssertNil(notification.userInfo[SRGLetterboxServicePreviousMediaKey]); - XCTAssertNotNil(notification.userInfo[SRGLetterboxServiceMediaKey]); + [self expectationForNotification:SRGLetterboxMetadataDidChangeNotification object:nil handler:^BOOL(NSNotification * _Nonnull notification) { + XCTAssertNil(notification.userInfo[SRGLetterboxPreviousMediaKey]); + XCTAssertNotNil(notification.userInfo[SRGLetterboxMediaKey]); - XCTAssertNil(notification.userInfo[SRGLetterboxServicePreviousMediaCompositionKey]); - XCTAssertEqualObjects(notification.userInfo[SRGLetterboxServiceMediaCompositionKey], mediaComposition); + XCTAssertNil(notification.userInfo[SRGLetterboxPreviousMediaCompositionKey]); + XCTAssertEqualObjects(notification.userInfo[SRGLetterboxMediaCompositionKey], mediaComposition); return YES; }]; @@ -405,8 +405,8 @@ - (void)testResumeWithPlayingService SRGLetterboxService *service = [SRGLetterboxService sharedService]; // Wait until the media composition is available - [self expectationForNotification:SRGLetterboxServiceMetadataDidChangeNotification object:service handler:^BOOL(NSNotification * _Nonnull notification) { - return notification.userInfo[SRGLetterboxServiceMediaCompositionKey] != nil; + [self expectationForNotification:SRGLetterboxMetadataDidChangeNotification object:service handler:^BOOL(NSNotification * _Nonnull notification) { + return notification.userInfo[SRGLetterboxMediaCompositionKey] != nil; }]; [[SRGLetterboxService sharedService] playMedia:media1 withPreferredQuality:SRGQualityNone]; @@ -441,12 +441,12 @@ - (void)testResumeWithPlayingService }]; [self expectationForElapsedTimeInterval:3. withHandler:nil]; - [self expectationForNotification:SRGLetterboxServiceMetadataDidChangeNotification object:nil handler:^BOOL(NSNotification * _Nonnull notification) { - XCTAssertEqualObjects(notification.userInfo[SRGLetterboxServicePreviousMediaKey], media1); - XCTAssertNotNil(notification.userInfo[SRGLetterboxServiceMediaKey]); + [self expectationForNotification:SRGLetterboxMetadataDidChangeNotification object:nil handler:^BOOL(NSNotification * _Nonnull notification) { + XCTAssertEqualObjects(notification.userInfo[SRGLetterboxPreviousMediaKey], media1); + XCTAssertNotNil(notification.userInfo[SRGLetterboxMediaKey]); - XCTAssertEqualObjects(notification.userInfo[SRGLetterboxServicePreviousMediaCompositionKey], mediaComposition1); - XCTAssertEqualObjects(notification.userInfo[SRGLetterboxServiceMediaCompositionKey], mediaComposition2); + XCTAssertEqualObjects(notification.userInfo[SRGLetterboxPreviousMediaCompositionKey], mediaComposition1); + XCTAssertEqualObjects(notification.userInfo[SRGLetterboxMediaCompositionKey], mediaComposition2); return YES; }]; From c9299a7ad041bbd5e6541bf140f8ce5735983f30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Wed, 1 Feb 2017 07:31:05 +0100 Subject: [PATCH 008/180] Move picture in picture support to the controller --- Demo/Sources/Application/AppDelegate.h | 2 +- Demo/Sources/Application/AppDelegate.m | 2 +- .../Sources/Service/SRGLetterboxController.h | 103 +++++++++--------- .../Sources/Service/SRGLetterboxService.h | 64 +---------- 4 files changed, 60 insertions(+), 111 deletions(-) diff --git a/Demo/Sources/Application/AppDelegate.h b/Demo/Sources/Application/AppDelegate.h index 814d33756..262f3eb07 100644 --- a/Demo/Sources/Application/AppDelegate.h +++ b/Demo/Sources/Application/AppDelegate.h @@ -9,7 +9,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface AppDelegate : UIResponder +@interface AppDelegate : UIResponder @property (nonatomic) UIWindow *window; diff --git a/Demo/Sources/Application/AppDelegate.m b/Demo/Sources/Application/AppDelegate.m index 732a9a8e5..5eb2ae400 100644 --- a/Demo/Sources/Application/AppDelegate.m +++ b/Demo/Sources/Application/AppDelegate.m @@ -66,7 +66,7 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( return YES; } -#pragma mark SRGLetterboxServicePictureInPictureDelegate protocol +#pragma mark SRGLetterboxPictureInPictureDelegate protocol - (BOOL)letterboxShouldRestoreUserInterfaceForPictureInPicture { diff --git a/Framework/Sources/Service/SRGLetterboxController.h b/Framework/Sources/Service/SRGLetterboxController.h index 7bcc9e24d..b49e5d1e1 100644 --- a/Framework/Sources/Service/SRGLetterboxController.h +++ b/Framework/Sources/Service/SRGLetterboxController.h @@ -43,10 +43,47 @@ OBJC_EXTERN NSString * const SRGLetterboxPreferredQualityKey; OBJC_EXTERN NSString * const SRGLetterboxPlaybackDidFailNotification; /** - * Lightweight `SRGMediaPlayerController` subclass. This class exposes only standard Letterbox functionalities, and inhibits - * some `SRGMediaPlayerController` behaviors. + * Delegate protocol for picture in picture implementation */ -@interface SRGLetterboxController : SRGMediaPlayerController +@protocol SRGLetterboxPictureInPictureDelegate + +/** + * Called when picture in picture might need user interface restoration. Return YES if this is the case (most notably + * if the player view from which picture in picture was initiated is not visible anymore) + */ +- (BOOL)letterboxShouldRestoreUserInterfaceForPictureInPicture; + +/** + * Called when a restoration process takes place + * + * @parameter completionHandler A completion block which MUST be called at the VERY END of the restoration process + * (e.g. after at the end of a modal presentation animation). Failing to do so leads to + * undefined behavior. The completion block must be called with `restored` set to `YES` + * iff the restoration was successful + */ +- (void)letterboxRestoreUserInterfaceForPictureInPictureWithCompletionHandler:(void (^)(BOOL restored))completionHandler; + +@optional + +/** + * Called when picture in picture has been started + */ +- (void)letterboxDidStartPictureInPicture; + +/** + * Called when picture in picture stopped + */ +- (void)letterboxDidStopPictureInPicture; + +@end + +/** + * Letterbox media player controller, managing playback, as well as automatic metadata retrieval. Applications + * can use the metadata available from this controller to display additional playback information (e.g. title + * or description of the content). The controller can be used in isolation for playback without display, but + * is usually best used bound to a Letterbox view + */ +@interface SRGLetterboxController : NSObject /** * Play the specified Uniform Resource Name @@ -129,52 +166,20 @@ OBJC_EXTERN NSString * const SRGLetterboxPlaybackDidFailNotification; @end /** - * Only playback of media compositions is available on the Letterbox controller - */ -@interface SRGLetterboxController (Unavailable) - -- (void)prepareToPlayURL:(NSURL *)URL - atTime:(CMTime)time - withSegments:(nullable NSArray> *)segments - userInfo:(nullable NSDictionary *)userInfo - completionHandler:(nullable void (^)(void))completionHandler NS_UNAVAILABLE; - -- (void)prepareToPlayURL:(NSURL *)URL withCompletionHandler:(nullable void (^)(void))completionHandler NS_UNAVAILABLE; - -- (void)playURL:(NSURL *)URL - atTime:(CMTime)time - withSegments:(nullable NSArray> *)segments - userInfo:(nullable NSDictionary *)userInfo NS_UNAVAILABLE; - -- (void)prepareToPlayURL:(NSURL *)URL - atIndex:(NSInteger)index - inSegments:(NSArray> *)segments - withUserInfo:(nullable NSDictionary *)userInfo - completionHandler:(nullable void (^)(void))completionHandler NS_UNAVAILABLE; - -- (void)playURL:(NSURL *)URL - atIndex:(NSInteger)index - inSegments:(NSArray> *)segments - withUserInfo:(nullable NSDictionary *)userInfo NS_UNAVAILABLE; - -- (void)playURL:(NSURL *)URL - atTime:(CMTime)time - withSegments:(nullable NSArray> *)segments -analyticsLabels:(nullable NSDictionary *)analyticsLabels - userInfo:(nullable NSDictionary *)userInfo NS_UNAVAILABLE; - -- (void)prepareToPlayURL:(NSURL *)URL - atIndex:(NSInteger)index - inSegments:(NSArray> *)segments - withAnalyticsLabels:(nullable NSDictionary *)analyticsLabels - userInfo:(nullable NSDictionary *)userInfo - completionHandler:(nullable void (^)(void))completionHandler NS_UNAVAILABLE; - -- (void)playURL:(NSURL *)URL - atIndex:(NSInteger)index - inSegments:(NSArray> *)segments -withAnalyticsLabels:(nullable NSDictionary *)analyticsLabels - userInfo:(nullable NSDictionary *)userInfo NS_UNAVAILABLE; + * Picture in picture support. Implement `SRGLetterboxPictureInPictureDelegate` methods to integrate Letterbox picture in picture + * support within your application + */ +@interface SRGLetterboxController (PictureInPicture) + +/** + * Picture in picture delegate. Picture in picture won't be available if not set + */ +@property (nonatomic, weak) id pictureInPictureDelegate; + +/** + * Return YES iff picture in picture is active + */ +@property (nonatomic, readonly, getter=isPictureInPictureActive) BOOL pictureInPictureActive; @end diff --git a/Framework/Sources/Service/SRGLetterboxService.h b/Framework/Sources/Service/SRGLetterboxService.h index 4deff4271..cdc235d45 100644 --- a/Framework/Sources/Service/SRGLetterboxService.h +++ b/Framework/Sources/Service/SRGLetterboxService.h @@ -12,48 +12,13 @@ NS_ASSUME_NONNULL_BEGIN /** - * Delegate protocol for picture in picture implementation - */ -@protocol SRGLetterboxServicePictureInPictureDelegate - -/** - * Called when picture in picture might need user interface restoration. Return YES if this is the case (most notably - * if the player view from which picture in picture was initiated is not visible anymore) - */ -- (BOOL)letterboxShouldRestoreUserInterfaceForPictureInPicture; - -/** - * Called when a restoration process takes place - * - * @parameter completionHandler A completion block which MUST be called at the VERY END of the restoration process - * (e.g. after at the end of a modal presentation animation). Failing to do so leads to - * undefined behavior. The completion block must be called with `restored` set to `YES` - * iff the restoration was successful - */ -- (void)letterboxRestoreUserInterfaceForPictureInPictureWithCompletionHandler:(void (^)(BOOL restored))completionHandler; - -@optional - -/** - * Called when picture in picture has been started - */ -- (void)letterboxDidStartPictureInPicture; - -/** - * Called when picture in picture stopped - */ -- (void)letterboxDidStopPictureInPicture; - -@end - -/** - * Service responsible for media playback. The service itself is a singleton which manages main playback throughout the - * application (and associated features like picture in picture, Airplay or control center integration). + * Service responsible for main media playback of a Letterbox controller throughout the application. The main controller + * is automatically integrated with the control center and enabled for external playback via Airplay * * @discussion Your target must support the 'Audio, Airplay, and Picture in Picture' capabilities, otherwise an exception * will be thrown when the service is accessed for the first time */ -@interface SRGLetterboxService : NSObject +@interface SRGLetterboxService : NSObject /** * The singleton instance @@ -61,15 +26,7 @@ NS_ASSUME_NONNULL_BEGIN + (SRGLetterboxService *)sharedService; /** - * Picture in picture delegate. Picture in picture won't be available if not set - */ -@property (nonatomic, weak) id pictureInPictureDelegate; - -/** - * The controller responsible for playback - * - * @discussion To play medias, use `-playMedia:withDataProvider:preferredQuality:` below. Playing medias directly - * on the controller leads to undefined behavior + * The controller responsible for main playback */ @property (nonatomic, readonly) SRGLetterboxController *controller; @@ -81,19 +38,6 @@ NS_ASSUME_NONNULL_BEGIN @end -/** - * Picture in picture support. Implement `SRGLetterboxServicePictureInPictureDelegate` methods to integrate Letterbox picture in picture - * support within your application - */ -@interface SRGLetterboxService (PictureInPicture) - -/** - * Return YES iff picture in picture is active - */ -@property (nonatomic, readonly, getter=isPictureInPictureActive) BOOL pictureInPictureActive; - -@end - /** * Mirroring */ From 1a08ff1b27860d3827d1f33254551045f9fb22ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Wed, 1 Feb 2017 07:57:23 +0100 Subject: [PATCH 009/180] Move code around --- .../Service/SRGLetterboxController+Private.h | 15 + .../Sources/Service/SRGLetterboxController.h | 5 +- .../Sources/Service/SRGLetterboxController.m | 246 ++++++++++++++- .../Sources/Service/SRGLetterboxService.h | 4 +- .../Sources/Service/SRGLetterboxService.m | 290 ++---------------- SRGLetterbox.xcodeproj/project.pbxproj | 2 + 6 files changed, 293 insertions(+), 269 deletions(-) create mode 100644 Framework/Sources/Service/SRGLetterboxController+Private.h diff --git a/Framework/Sources/Service/SRGLetterboxController+Private.h b/Framework/Sources/Service/SRGLetterboxController+Private.h new file mode 100644 index 000000000..293cfb87a --- /dev/null +++ b/Framework/Sources/Service/SRGLetterboxController+Private.h @@ -0,0 +1,15 @@ +// +// Copyright (c) SRG SSR. All rights reserved. +// +// License information is available from the LICENSE file. +// + +#import "SRGLetterboxCOntroller.h" + +@interface LetterboxController (Private) + +@property (nonatomic, readonly) SRGMediaPlayerController *mediaPlayerController; + +@end + + diff --git a/Framework/Sources/Service/SRGLetterboxController.h b/Framework/Sources/Service/SRGLetterboxController.h index b49e5d1e1..a80c9c8e8 100644 --- a/Framework/Sources/Service/SRGLetterboxController.h +++ b/Framework/Sources/Service/SRGLetterboxController.h @@ -4,9 +4,8 @@ // License information is available from the LICENSE file. // -#import -#import -#import +#import +#import NS_ASSUME_NONNULL_BEGIN diff --git a/Framework/Sources/Service/SRGLetterboxController.m b/Framework/Sources/Service/SRGLetterboxController.m index 38afe2b6f..06a059a9e 100644 --- a/Framework/Sources/Service/SRGLetterboxController.m +++ b/Framework/Sources/Service/SRGLetterboxController.m @@ -6,6 +6,16 @@ #import "SRGLetterboxController.h" +#import "NSBundle+SRGLetterbox.h" +#import "SRGDataProvider+SRGLetterbox.h" +#import "SRGLetterboxError.h" + +#import +#import +#import +#import +#import + const NSInteger SRGLetterboxBackwardSeekInterval = 30.; const NSInteger SRGLetterboxForwardSeekInterval = 30.; @@ -19,13 +29,22 @@ NSString * const SRGLetterboxPreviousURNKey = @"SRGLetterboxPreviousURNKey"; NSString * const SRGLetterboxPreviousMediaKey = @"SRGLetterboxPreviousMediaKey"; NSString * const SRGLetterboxPreviousMediaCompositionKey = @"SRGLetterboxPreviousMediaCompositionKey"; -NSString * const SRGLetterboxPreferredQualityKey = @"SRGLetterboxPreferredQualityKey"; +NSString * const SRGLetterboxPreviousPreferredQualityKey = @"SRGLetterboxPreviousPreferredQualityKey"; NSString * const SRGLetterboxPlaybackDidFailNotification = @"SRGLetterboxPlaybackDidFailNotification"; - @interface SRGLetterboxController () +@property (nonatomic) SRGMediaPlayerController *mediaPlayerController; + +@property (nonatomic) SRGMediaURN *URN; +@property (nonatomic) SRGMedia *media; +@property (nonatomic) SRGMediaComposition *mediaComposition; +@property (nonatomic) SRGQuality preferredQuality; +@property (nonatomic) NSError *error; + +@property (nonatomic) SRGRequestQueue *requestQueue; + // For successive seeks, update the target time (previous seeks are cancelled). This makes it possible to seek faster // to a desired location @property (nonatomic) CMTime seekTargetTime; @@ -39,12 +58,17 @@ @implementation SRGLetterboxController - (instancetype)init { if (self = [super init]) { + self.mediaPlayerController = [[SRGMediaPlayerController alloc] init]; self.seekTargetTime = kCMTimeInvalid; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(reachabilityDidChange:) + name:FXReachabilityStatusDidChangeNotification + object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playbackStateDidChange:) name:SRGMediaPlayerPlaybackStateDidChangeNotification - object:self]; + object:self.mediaPlayerController]; } return self; } @@ -54,6 +78,173 @@ - (void)dealloc [[NSNotificationCenter defaultCenter] removeObserver:self]; } +#pragma mark Getters and setters + +- (BOOL)isPictureInPictureActive +{ + return self.mediaPlayerController.pictureInPictureController.pictureInPictureActive; +} + +#pragma mark Data + +// Pass in which data is available, the method will ensure that the data is consistent based on the most comprehensive +// information available (media composition first, then media, finally URN). Less comprehensive data will be ignored +- (void)updateWithURN:(SRGMediaURN *)URN media:(SRGMedia *)media mediaComposition:(SRGMediaComposition *)mediaComposition preferredQuality:(SRGQuality)preferredQuality +{ + if (mediaComposition) { + media = [mediaComposition mediaForSegment:mediaComposition.mainSegment ?: mediaComposition.mainChapter]; + } + + if (media) { + URN = media.URN; + } + + SRGMediaURN *previousURN = self.URN; + SRGMedia *previousMedia = self.media; + SRGMediaComposition *previousMediaComposition = self.mediaComposition; + SRGQuality previousPreferredQuality = self.preferredQuality; + + self.URN = URN; + self.media = media; + self.mediaComposition = mediaComposition; + self.preferredQuality = preferredQuality; + + if (! media || ! URN) { + self.error = nil; + + [self.mediaPlayerController reset]; + [self.requestQueue cancel]; + [self.imageOperation cancel]; + } + + NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; + if (URN) { + userInfo[SRGLetterboxServiceURNKey] = URN; + } + if (media) { + userInfo[SRGLetterboxMediaKey] = media; + } + if (mediaComposition) { + userInfo[SRGLetterboxMediaCompositionKey] = mediaComposition; + } + if (preferredQuality) { + userInfo[SRGLetterboxPreferredQualityKey] = @(preferredQuality); + } + if (previousURN) { + userInfo[SRGLetterboxPreviousURNKey] = previousURN; + } + if (previousMedia) { + userInfo[SRGLetterboxPreviousMediaKey] = previousMedia; + } + if (previousMediaComposition) { + userInfo[SRGLetterboxPreviousMediaCompositionKey] = previousMediaComposition; + } + if (previousPreferredQuality) { + userInfo[SRGLetterboxPreferredQualityKey] = @(previousPreferredQuality); + } + + [[NSNotificationCenter defaultCenter] postNotificationName:SRGLetterboxMetadataDidChangeNotification object:self userInfo:[userInfo copy]]; +} + +#pragma mark Playback + +- (void)playURN:(SRGMediaURN *)URN withPreferredQuality:(SRGQuality)preferredQuality +{ + [self playURN:URN media:nil withPreferredQuality:preferredQuality]; +} + +- (void)playMedia:(SRGMedia *)media withPreferredQuality:(SRGQuality)preferredQuality +{ + [self playURN:nil media:media withPreferredQuality:preferredQuality]; +} + +- (void)playURN:(SRGMediaURN *)URN media:(SRGMedia *)media withPreferredQuality:(SRGQuality)preferredQuality +{ + if (media) { + URN = media.URN; + } + + // If already playing the media, does nothing + if (self.mediaPlayerController.playbackState != SRGMediaPlayerPlaybackStateIdle && [self.media.URN isEqual:URN]) { + return; + } + + [self updateWithURN:URN media:media mediaComposition:nil preferredQuality:preferredQuality]; + + // Perform media-dependent updates + [self.mediaPlayerController reloadPlayerConfiguration]; + + self.requestQueue = [[SRGRequestQueue alloc] initWithStateChangeBlock:^(BOOL finished, NSError * _Nullable error) { + if (finished) { + [self reportError:error]; + } + }]; + + void (^mediaCompositionCompletionBlock)(SRGMediaComposition * _Nullable, NSError * _Nullable) = ^(SRGMediaComposition * _Nullable mediaComposition, NSError * _Nullable error) { + if (error) { + [self.requestQueue reportError:error]; + return; + } + + [self updateWithURN:nil media:nil mediaComposition:mediaComposition preferredQuality:preferredQuality]; + + SRGRequest *playRequest = [self.mediaPlayerController playMediaComposition:mediaComposition withPreferredProtocol:SRGProtocolNone preferredQuality:preferredQuality userInfo:nil resume:NO completionHandler:^(NSError * _Nonnull error) { + [self.requestQueue reportError:error]; + }]; + + if (playRequest) { + [self.requestQueue addRequest:playRequest resume:YES]; + } + else { + NSError *error = [NSError errorWithDomain:SRGLetterboxErrorDomain + code:SRGLetterboxErrorCodeNotFound + userInfo:@{ NSLocalizedDescriptionKey : NSLocalizedString(@"The media cannot be played", nil) }]; + [self.requestQueue reportError:error]; + } + }; + + SRGDataProvider *dataProvider = [[SRGDataProvider alloc] initWithServiceURL:[SRGDataProvider serviceURL] + businessUnitIdentifier:SRGDataProviderBusinessUnitIdentifierForVendor(URN.vendor)]; + + if (URN.mediaType == SRGMediaTypeVideo) { + SRGRequest *mediaCompositionRequest = [dataProvider mediaCompositionForVideoWithUid:URN.uid completionBlock:mediaCompositionCompletionBlock]; + [self.requestQueue addRequest:mediaCompositionRequest resume:YES]; + } + else if (URN.mediaType == SRGMediaTypeAudio) { + SRGRequest *mediaCompositionRequest = [dataProvider mediaCompositionForAudioWithUid:URN.uid completionBlock:mediaCompositionCompletionBlock]; + [self.requestQueue addRequest:mediaCompositionRequest resume:YES]; + } +} + +- (void)reset +{ + [self updateWithURN:nil media:nil mediaComposition:nil preferredQuality:SRGQualityNone]; +} + +- (void)reportError:(NSError *)error +{ + if (! error) { + return; + } + + // Use a friendly error message for network errors (might be a connection loss, incorrect proxy settings, etc.) + if ([error.domain isEqualToString:(NSString *)kCFErrorDomainCFNetwork] || [error.domain isEqualToString:NSURLErrorDomain]) { + self.error = [NSError errorWithDomain:SRGLetterboxErrorDomain + code:SRGLetterboxErrorCodeNetwork + userInfo:@{ NSLocalizedDescriptionKey : SRGLetterboxLocalizedString(@"A network issue has been encountered. Please check your Internet connection and network settings", @"Message displayed when a network error has been encountered"), + NSUnderlyingErrorKey : error }]; + } + // Use a friendly error message for all other reasons + else { + self.error = [NSError errorWithDomain:SRGLetterboxErrorDomain + code:SRGLetterboxErrorCodeNotPlayable + userInfo:@{ NSLocalizedDescriptionKey : SRGLetterboxLocalizedString(@"The media cannot be played", @"Message displayed when a media cannot be played for some reason (the user should not know about)"), + NSUnderlyingErrorKey : error }]; + } + + [[NSNotificationCenter defaultCenter] postNotificationName:SRGLetterboxPlaybackDidFailNotification object:self]; +} + #pragma mark Standard seeks - (BOOL)canSeekBackward @@ -134,8 +325,57 @@ - (void)seekForwardFromTime:(CMTime)time withCompletionHandler:(void (^)(BOOL fi }]; } +#pragma mark AVPictureInPictureControllerDelegate protocol + +- (void)pictureInPictureControllerDidStartPictureInPicture:(AVPictureInPictureController *)pictureInPictureController +{ + if ([self.pictureInPictureDelegate respondsToSelector:@selector(letterboxDidStartPictureInPicture)]) { + [self.pictureInPictureDelegate letterboxDidStartPictureInPicture]; + } +} + +- (void)pictureInPictureController:(AVPictureInPictureController *)pictureInPictureController restoreUserInterfaceForPictureInPictureStopWithCompletionHandler:(void (^)(BOOL))completionHandler +{ + // It is very important that the completion handler is called at the very end of the process, otherwise silly + // things might happen during the restoration (most notably player rate set to 0) + + // If stopping picture in picture because of a reset, don't restore anything + if (self.mediaPlayerController.playbackState == SRGMediaPlayerPlaybackStateIdle) { + completionHandler(YES); + return; + } + + if ([self.pictureInPictureDelegate letterboxShouldRestoreUserInterfaceForPictureInPicture]) { + [self.pictureInPictureDelegate letterboxRestoreUserInterfaceForPictureInPictureWithCompletionHandler:^(BOOL restored) { + completionHandler(restored); + }]; + } + else { + completionHandler(YES); + } +} + +- (void)pictureInPictureControllerDidStopPictureInPicture:(AVPictureInPictureController *)pictureInPictureController +{ + if ([self.pictureInPictureDelegate respondsToSelector:@selector(letterboxDidStopPictureInPicture)]) { + [self.pictureInPictureDelegate letterboxDidStopPictureInPicture]; + } +} + #pragma mark Notifications +- (void)reachabilityDidChange:(NSNotification *)notification +{ + if ([FXReachability sharedInstance].reachable) { + if (self.media) { + [self playMedia:self.media withPreferredQuality:self.preferredQuality]; + } + else if (self.URN) { + [self playURN:self.URN withPreferredQuality:self.preferredQuality]; + } + } +} + - (void)playbackStateDidChange:(NSNotification *)notification { SRGMediaPlayerPlaybackState playbackState = [notification.userInfo[SRGMediaPlayerPlaybackStateKey] integerValue]; diff --git a/Framework/Sources/Service/SRGLetterboxService.h b/Framework/Sources/Service/SRGLetterboxService.h index cdc235d45..bca247b71 100644 --- a/Framework/Sources/Service/SRGLetterboxService.h +++ b/Framework/Sources/Service/SRGLetterboxService.h @@ -13,10 +13,10 @@ NS_ASSUME_NONNULL_BEGIN /** * Service responsible for main media playback of a Letterbox controller throughout the application. The main controller - * is automatically integrated with the control center and enabled for external playback via Airplay + * is automatically integrated with the control center and enabled for external playback * * @discussion Your target must support the 'Audio, Airplay, and Picture in Picture' capabilities, otherwise an exception - * will be thrown when the service is accessed for the first time + * will be thrown at runtime (this check is not performed for test targets) */ @interface SRGLetterboxService : NSObject diff --git a/Framework/Sources/Service/SRGLetterboxService.m b/Framework/Sources/Service/SRGLetterboxService.m index cb1a87503..4458e348f 100644 --- a/Framework/Sources/Service/SRGLetterboxService.m +++ b/Framework/Sources/Service/SRGLetterboxService.m @@ -6,20 +6,28 @@ #import "SRGLetterboxService.h" -#import "NSBundle+SRGLetterbox.h" -#import "SRGDataProvider+SRGLetterbox.h" -#import "SRGLetterboxError.h" +#import "SRGLetterboxController+Private.h" #import "UIDevice+SRGLetterbox.h" -#import -#import +#import +#import #import -#import static void *s_kvoContext = &s_kvoContext; __attribute__((constructor)) static void SRGLetterboxServiceInit(void) { + // Ignore in test bundles or when compiling for Interface Builder rendering (since cannot be set for them) + NSString *bundlePath = [NSBundle mainBundle].bundlePath; + if (! [bundlePath.pathExtension isEqualToString:@"xctest"] && ! [bundlePath hasSuffix:@"Xcode/Overlays"]) { + NSArray *backgroundModes = [NSBundle mainBundle].infoDictionary[@"UIBackgroundModes"]; + if (! [backgroundModes containsObject:@"audio"]) { + @throw [NSException exceptionWithName:NSInternalInconsistencyException + reason:@"You must enable the 'Audio, Airplay, and Picture in Picture' flag of your target background modes (under the Capabilities tab) before attempting to use the Letterbox service" + userInfo:nil]; + } + } + // Setup for Airplay, picture in picture and control center integration [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; @@ -28,17 +36,9 @@ @interface SRGLetterboxService () @property (nonatomic, weak) id periodicTimeObserver; - -@property (nonatomic) SRGMediaURN *URN; -@property (nonatomic) SRGMedia *media; -@property (nonatomic) SRGMediaComposition *mediaComposition; -@property (nonatomic) SRGQuality preferredQuality; -@property (nonatomic) NSError *error; +@property (nonatomic, getter=isMirroredOnExternalScreen) BOOL mirroredOnExternalScreen; @property (nonatomic) YYWebImageOperation *imageOperation; -@property (nonatomic) SRGRequestQueue *requestQueue; - -@property (nonatomic, getter=isMirroredOnExternalScreen) BOOL mirroredOnExternalScreen; @end @@ -61,17 +61,6 @@ + (SRGLetterboxService *)sharedService - (instancetype)init { if (self = [super init]) { - // Ignore in test bundles or when compiling for Interface Builder rendering (since cannot be set for them) - NSString *bundlePath = [NSBundle mainBundle].bundlePath; - if (! [bundlePath.pathExtension isEqualToString:@"xctest"] && ! [bundlePath hasSuffix:@"Xcode/Overlays"]) { - NSArray *backgroundModes = [NSBundle mainBundle].infoDictionary[@"UIBackgroundModes"]; - if (! [backgroundModes containsObject:@"audio"]) { - @throw [NSException exceptionWithName:NSInternalInconsistencyException - reason:@"You must enable the 'Audio, Airplay, and Picture in Picture' flag of your target background modes (under the Capabilities tab) before attempting to use the Letterbox service" - userInfo:nil]; - } - } - self.controller = [[SRGLetterboxController alloc] init]; [[NSNotificationCenter defaultCenter] addObserver:self @@ -86,10 +75,6 @@ - (instancetype)init selector:@selector(applicationDidBecomeActive:) name:UIApplicationDidBecomeActiveNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(reachabilityDidChange:) - name:FXReachabilityStatusDidChangeNotification - object:nil]; [self setupRemoteCommandCenter]; } @@ -162,11 +147,6 @@ - (void)setController:(SRGLetterboxController *)controller } } -- (BOOL)isPictureInPictureActive -{ - return self.controller.pictureInPictureController.pictureInPictureActive; -} - - (void)setMirroredOnExternalScreen:(BOOL)mirroredOnExternalScreen { if (_mirroredOnExternalScreen == mirroredOnExternalScreen) { @@ -177,143 +157,6 @@ - (void)setMirroredOnExternalScreen:(BOOL)mirroredOnExternalScreen [self.controller reloadPlayerConfiguration]; } -#pragma mark Data - -// Pass in which data is available, the method will ensure that the data is consistent based on the most comprehensive -// information available (media composition first, then media, finally URN). Less comprehensive data will be ignored -- (void)updateWithURN:(SRGMediaURN *)URN media:(SRGMedia *)media mediaComposition:(SRGMediaComposition *)mediaComposition preferredQuality:(SRGQuality)preferredQuality -{ - if (mediaComposition) { - media = [mediaComposition mediaForSegment:mediaComposition.mainSegment ?: mediaComposition.mainChapter]; - } - - if (media) { - URN = media.URN; - } - - SRGMediaURN *previousURN = self.URN; - SRGMedia *previousMedia = self.media; - SRGMediaComposition *previousMediaComposition = self.mediaComposition; - SRGQuality previousPreferredQuality = self.preferredQuality; - - self.URN = URN; - self.media = media; - self.mediaComposition = mediaComposition; - self.preferredQuality = preferredQuality; - - if (! media || ! URN) { - NSAssert(mediaComposition == nil, @"No media composition is expected when updating with no media or media uid"); - - self.error = nil; - - [self.controller reset]; - [self.requestQueue cancel]; - [self.imageOperation cancel]; - - [self updateRemoteCommandCenter]; - [self updateNowPlayingInformation]; - [self updateNowPlayingPlaybackInformation]; - } - - NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; - if (URN) { - userInfo[SRGLetterboxServiceURNKey] = URN; - } - if (media) { - userInfo[SRGLetterboxMediaKey] = media; - } - if (mediaComposition) { - userInfo[SRGLetterboxMediaCompositionKey] = mediaComposition; - } - if (preferredQuality) { - userInfo[SRGLetterboxPreferredQualityKey] = @(preferredQuality); - } - if (previousURN) { - userInfo[SRGLetterboxPreviousURNKey] = previousURN; - } - if (previousMedia) { - userInfo[SRGLetterboxPreviousMediaKey] = previousMedia; - } - if (previousMediaComposition) { - userInfo[SRGLetterboxPreviousMediaCompositionKey] = previousMediaComposition; - } - if (previousPreferredQuality) { - userInfo[SRGLetterboxPreferredQualityKey] = @(previousPreferredQuality); - } - - [[NSNotificationCenter defaultCenter] postNotificationName:SRGLetterboxMetadataDidChangeNotification object:self userInfo:[userInfo copy]]; -} - -#pragma mark Playback - -- (void)playURN:(SRGMediaURN *)URN withPreferredQuality:(SRGQuality)preferredQuality -{ - [self playURN:URN media:nil withPreferredQuality:preferredQuality]; -} - -- (void)playMedia:(SRGMedia *)media withPreferredQuality:(SRGQuality)preferredQuality -{ - [self playURN:nil media:media withPreferredQuality:preferredQuality]; -} - -- (void)playURN:(SRGMediaURN *)URN media:(SRGMedia *)media withPreferredQuality:(SRGQuality)preferredQuality -{ - if (media) { - URN = media.URN; - } - - // If already playing the media, does nothing - if (self.controller.playbackState != SRGMediaPlayerPlaybackStateIdle && [self.media.URN isEqual:URN]) { - return; - } - - [self updateWithURN:URN media:media mediaComposition:nil preferredQuality:preferredQuality]; - - // Perform media-dependent updates - [self.controller reloadPlayerConfiguration]; - - self.requestQueue = [[SRGRequestQueue alloc] initWithStateChangeBlock:^(BOOL finished, NSError * _Nullable error) { - if (finished) { - [self reportError:error]; - } - }]; - - void (^mediaCompositionCompletionBlock)(SRGMediaComposition * _Nullable, NSError * _Nullable) = ^(SRGMediaComposition * _Nullable mediaComposition, NSError * _Nullable error) { - if (error) { - [self.requestQueue reportError:error]; - return; - } - - [self updateWithURN:nil media:nil mediaComposition:mediaComposition preferredQuality:preferredQuality]; - - SRGRequest *playRequest = [self.controller playMediaComposition:mediaComposition withPreferredProtocol:SRGProtocolNone preferredQuality:preferredQuality userInfo:nil resume:NO completionHandler:^(NSError * _Nonnull error) { - [self.requestQueue reportError:error]; - }]; - - if (playRequest) { - [self.requestQueue addRequest:playRequest resume:YES]; - } - else { - NSError *error = [NSError errorWithDomain:SRGLetterboxErrorDomain - code:SRGLetterboxErrorCodeNotFound - userInfo:@{ NSLocalizedDescriptionKey : NSLocalizedString(@"The media cannot be played", nil) }]; - [self.requestQueue reportError:error]; - } - }; - - SRGDataProvider *dataProvider = [[SRGDataProvider alloc] initWithServiceURL:[SRGDataProvider serviceURL] - businessUnitIdentifier:SRGDataProviderBusinessUnitIdentifierForVendor(URN.vendor)]; - - if (URN.mediaType == SRGMediaTypeVideo) { - SRGRequest *mediaCompositionRequest = [dataProvider mediaCompositionForVideoWithUid:URN.uid completionBlock:mediaCompositionCompletionBlock]; - [self.requestQueue addRequest:mediaCompositionRequest resume:YES]; - } - else if (URN.mediaType == SRGMediaTypeAudio) { - SRGRequest *mediaCompositionRequest = [dataProvider mediaCompositionForAudioWithUid:URN.uid completionBlock:mediaCompositionCompletionBlock]; - [self.requestQueue addRequest:mediaCompositionRequest resume:YES]; - } -} - - (void)resumeFromController:(SRGLetterboxController *)controller { // FIXME: We soon will have Letterbox controller retrieve media information. Media and URN will therefore be @@ -328,35 +171,6 @@ - (void)resumeFromController:(SRGLetterboxController *)controller [self.controller reloadPlayerConfiguration]; } -- (void)reset -{ - [self updateWithURN:nil media:nil mediaComposition:nil preferredQuality:SRGQualityNone]; -} - -- (void)reportError:(NSError *)error -{ - if (! error) { - return; - } - - // Use a friendly error message for network errors (might be a connection loss, incorrect proxy settings, etc.) - if ([error.domain isEqualToString:(NSString *)kCFErrorDomainCFNetwork] || [error.domain isEqualToString:NSURLErrorDomain]) { - self.error = [NSError errorWithDomain:SRGLetterboxErrorDomain - code:SRGLetterboxErrorCodeNetwork - userInfo:@{ NSLocalizedDescriptionKey : SRGLetterboxLocalizedString(@"A network issue has been encountered. Please check your Internet connection and network settings", @"Message displayed when a network error has been encountered"), - NSUnderlyingErrorKey : error }]; - } - // Use a friendly error message for all other reasons - else { - self.error = [NSError errorWithDomain:SRGLetterboxErrorDomain - code:SRGLetterboxErrorCodeNotPlayable - userInfo:@{ NSLocalizedDescriptionKey : SRGLetterboxLocalizedString(@"The media cannot be played", @"Message displayed when a media cannot be played for some reason (the user should not know about)"), - NSUnderlyingErrorKey : error }]; - } - - [[NSNotificationCenter defaultCenter] postNotificationName:SRGLetterboxPlaybackDidFailNotification object:self]; -} - #pragma mark Control center and lock screen integration - (void)setupRemoteCommandCenter @@ -384,11 +198,12 @@ - (void)setupRemoteCommandCenter - (void)updateRemoteCommandCenter { MPRemoteCommandCenter *commandCenter = [MPRemoteCommandCenter sharedCommandCenter]; + SRGMediaPlayerController *mediaPlayerController = self.controller.mediaPlayerController; // Videos can only be controlled when the device has been locked (mostly for Airplay playback). We don't allow // video playback while the app is fully in background for the moment (except if Airplay is enabled) - if (self.controller.playbackState != SRGMediaPlayerPlaybackStateIdle - && (self.controller.mediaType == SRGMediaTypeAudio + if (mediaPlayerController.playbackState != SRGMediaPlayerPlaybackStateIdle + && (mediaPlayerController.mediaType == SRGMediaTypeAudio || [UIApplication sharedApplication].applicationState != UIApplicationStateBackground || [AVAudioSession srg_isAirplayActive] || [UIDevice srg_isLocked])) { @@ -411,7 +226,8 @@ - (void)updateNowPlayingInformation { NSMutableDictionary *nowPlayingInfo = [NSMutableDictionary dictionary]; - switch (self.media.mediaType) { + SRGMedia *media = self.controller.media; + switch (media.mediaType) { case SRGMediaTypeAudio: { nowPlayingInfo[MPMediaItemPropertyMediaType] = @(MPMediaTypeAnyAudio); break; @@ -428,10 +244,10 @@ - (void)updateNowPlayingInformation } } - nowPlayingInfo[MPMediaItemPropertyTitle] = self.media.title; - nowPlayingInfo[MPMediaItemPropertyAlbumTitle] = self.media.lead; + nowPlayingInfo[MPMediaItemPropertyTitle] = media.title; + nowPlayingInfo[MPMediaItemPropertyAlbumTitle] = media.lead; - NSURL *imageURL = [self.media imageURLForDimension:SRGImageDimensionWidth withValue:256.f * [UIScreen mainScreen].scale]; + NSURL *imageURL = [media imageURLForDimension:SRGImageDimensionWidth withValue:256.f * [UIScreen mainScreen].scale]; self.imageOperation = [[YYWebImageManager sharedManager] requestImageWithURL:imageURL options:0 progress:nil transform:nil completion:^(UIImage * _Nullable image, NSURL * _Nonnull url, YYWebImageFromType from, YYWebImageStage stage, NSError * _Nullable error) { if (image) { nowPlayingInfo[MPMediaItemPropertyArtwork] = [[MPMediaItemArtwork alloc] initWithImage:image]; @@ -446,25 +262,26 @@ - (void)updateNowPlayingInformation // Playback information which requires more frequent updates - (void)updateNowPlayingPlaybackInformation { + SRGMediaPlayerController *mediaPlayerController = self.controller.mediaPlayerController; NSMutableDictionary *nowPlayingInfo = [[MPNowPlayingInfoCenter defaultCenter].nowPlayingInfo mutableCopy]; - nowPlayingInfo[MPNowPlayingInfoPropertyElapsedPlaybackTime] = @(CMTimeGetSeconds(self.controller.player.currentTime)); - nowPlayingInfo[MPMediaItemPropertyPlaybackDuration] = @(CMTimeGetSeconds(self.controller.player.currentItem.duration)); + nowPlayingInfo[MPNowPlayingInfoPropertyElapsedPlaybackTime] = @(CMTimeGetSeconds(mediaPlayerController.player.currentTime)); + nowPlayingInfo[MPMediaItemPropertyPlaybackDuration] = @(CMTimeGetSeconds(mediaPlayerController.player.currentItem.duration)); [MPNowPlayingInfoCenter defaultCenter].nowPlayingInfo = [nowPlayingInfo copy]; } - (void)play:(id)sender { - [self.controller play]; + [self.controller.mediaPlayerController play]; } - (void)pause:(id)sender { - [self.controller pause]; + [self.controller.mediaPlayerController pause]; } - (void)togglePlayPause:(id)sender { - [self.controller togglePlayPause]; + [self.controller.mediaPlayerController togglePlayPause]; } - (void)seekForward:(id)sender @@ -477,43 +294,6 @@ - (void)seekBackward:(id)sender [self.controller seekBackwardWithCompletionHandler:nil]; } -#pragma mark AVPictureInPictureControllerDelegate protocol - -- (void)pictureInPictureControllerDidStartPictureInPicture:(AVPictureInPictureController *)pictureInPictureController -{ - if ([self.pictureInPictureDelegate respondsToSelector:@selector(letterboxDidStartPictureInPicture)]) { - [self.pictureInPictureDelegate letterboxDidStartPictureInPicture]; - } -} - -- (void)pictureInPictureController:(AVPictureInPictureController *)pictureInPictureController restoreUserInterfaceForPictureInPictureStopWithCompletionHandler:(void (^)(BOOL))completionHandler -{ - // It is very important that the completion handler is called at the very end of the process, otherwise silly - // things might happen during the restoration (most notably player rate set to 0) - - // If stopping picture in picture because of a reset, don't restore anything - if (self.controller.playbackState == SRGMediaPlayerPlaybackStateIdle) { - completionHandler(YES); - return; - } - - if ([self.pictureInPictureDelegate letterboxShouldRestoreUserInterfaceForPictureInPicture]) { - [self.pictureInPictureDelegate letterboxRestoreUserInterfaceForPictureInPictureWithCompletionHandler:^(BOOL restored) { - completionHandler(restored); - }]; - } - else { - completionHandler(YES); - } -} - -- (void)pictureInPictureControllerDidStopPictureInPicture:(AVPictureInPictureController *)pictureInPictureController -{ - if ([self.pictureInPictureDelegate respondsToSelector:@selector(letterboxDidStopPictureInPicture)]) { - [self.pictureInPictureDelegate letterboxDidStopPictureInPicture]; - } -} - #pragma mark Notifications - (void)playbackStateDidChange:(NSNotification *)notification @@ -563,18 +343,6 @@ - (void)applicationDidBecomeActive:(NSNotification *)notification [self updateRemoteCommandCenter]; } -- (void)reachabilityDidChange:(NSNotification *)notification -{ - if ([FXReachability sharedInstance].reachable) { - if (self.media) { - [self playMedia:self.media withPreferredQuality:self.preferredQuality]; - } - else if (self.URN) { - [self playURN:self.URN withPreferredQuality:self.preferredQuality]; - } - } -} - #pragma mark KVO - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context diff --git a/SRGLetterbox.xcodeproj/project.pbxproj b/SRGLetterbox.xcodeproj/project.pbxproj index 175c6c36b..45d412d5a 100644 --- a/SRGLetterbox.xcodeproj/project.pbxproj +++ b/SRGLetterbox.xcodeproj/project.pbxproj @@ -275,6 +275,7 @@ 6F4855AE1E3A66AB00B0141C /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; 6F4855AF1E3A66B100B0141C /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = ""; }; 6F4855B01E3A66B800B0141C /* rm-CH */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "rm-CH"; path = "rm-CH.lproj/Localizable.strings"; sourceTree = ""; }; + 6F721E141E41BAD8003B698D /* SRGLetterboxController+Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SRGLetterboxController+Private.h"; sourceTree = ""; }; 6F8C35AE1E3A30920011E81E /* Designables */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Designables; sourceTree = ""; }; 6FAB3B001E28F77E00CC2197 /* SRGLetterboxView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SRGLetterboxView.h; sourceTree = ""; }; 6FAB3B011E28F77E00CC2197 /* SRGLetterboxView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SRGLetterboxView.m; sourceTree = ""; }; @@ -388,6 +389,7 @@ 087EB60F1E290AC4005DD80B /* SRGLetterboxController.m */, 087EB60A1E290A14005DD80B /* SRGLetterboxService.h */, 087EB60B1E290A14005DD80B /* SRGLetterboxService.m */, + 6F721E141E41BAD8003B698D /* SRGLetterboxController+Private.h */, ); path = Service; sourceTree = ""; From cc4d752168527f4eb3410f5f05f187033dc90952 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Wed, 1 Feb 2017 08:26:54 +0100 Subject: [PATCH 010/180] Move towards compiling code --- .../Sources/Service/SRGLetterboxController.m | 29 ++-- .../Sources/Service/SRGLetterboxService.m | 143 ++---------------- 2 files changed, 29 insertions(+), 143 deletions(-) diff --git a/Framework/Sources/Service/SRGLetterboxController.m b/Framework/Sources/Service/SRGLetterboxController.m index 06a059a9e..6707deb55 100644 --- a/Framework/Sources/Service/SRGLetterboxController.m +++ b/Framework/Sources/Service/SRGLetterboxController.m @@ -11,7 +11,6 @@ #import "SRGLetterboxError.h" #import -#import #import #import #import @@ -69,6 +68,10 @@ - (instancetype)init selector:@selector(playbackStateDidChange:) name:SRGMediaPlayerPlaybackStateDidChangeNotification object:self.mediaPlayerController]; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(playbackDidFail:) + name:SRGMediaPlayerPlaybackDidFailNotification + object:self.mediaPlayerController]; } return self; } @@ -114,7 +117,6 @@ - (void)updateWithURN:(SRGMediaURN *)URN media:(SRGMedia *)media mediaCompositio [self.mediaPlayerController reset]; [self.requestQueue cancel]; - [self.imageOperation cancel]; } NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; @@ -271,7 +273,7 @@ - (void)seekForwardWithCompletionHandler:(nullable void (^)(BOOL finished))compl - (CMTime)seekStartTime { - return CMTIME_IS_VALID(self.seekTargetTime) ? self.seekTargetTime : self.player.currentTime; + return CMTIME_IS_VALID(self.seekTargetTime) ? self.seekTargetTime : self.mediaPlayerController.player.currentTime; } - (BOOL)canSeekBackwardFromTime:(CMTime)time @@ -280,7 +282,8 @@ - (BOOL)canSeekBackwardFromTime:(CMTime)time return NO; } - return (self.streamType == SRGMediaPlayerStreamTypeOnDemand || self.streamType == SRGMediaPlayerStreamTypeDVR); + SRGMediaPlayerStreamType streamType = self.mediaPlayerController.streamType; + return (streamType == SRGMediaPlayerStreamTypeOnDemand || streamType == SRGMediaPlayerStreamTypeDVR); } - (BOOL)canSeekForwardFromTime:(CMTime)time @@ -289,8 +292,9 @@ - (BOOL)canSeekForwardFromTime:(CMTime)time return NO; } - return (self.streamType == SRGMediaPlayerStreamTypeOnDemand && CMTimeGetSeconds(time) + SRGLetterboxForwardSeekInterval < CMTimeGetSeconds(self.player.currentItem.duration)) - || (self.streamType == SRGMediaPlayerStreamTypeDVR && !self.live); + SRGMediaPlayerController *mediaPlayerController = self.mediaPlayerController; + return (mediaPlayerController.streamType == SRGMediaPlayerStreamTypeOnDemand && CMTimeGetSeconds(time) + SRGLetterboxForwardSeekInterval < CMTimeGetSeconds(mediaPlayerController.player.currentItem.duration)) + || (mediaPlayerController.streamType == SRGMediaPlayerStreamTypeDVR && !mediaPlayerController.live); } - (void)seekBackwardFromTime:(CMTime)time withCompletionHandler:(void (^)(BOOL finished))completionHandler @@ -301,9 +305,9 @@ - (void)seekBackwardFromTime:(CMTime)time withCompletionHandler:(void (^)(BOOL f } self.seekTargetTime = CMTimeSubtract(time, CMTimeMakeWithSeconds(SRGLetterboxBackwardSeekInterval, NSEC_PER_SEC)); - [self seekEfficientlyToTime:self.seekTargetTime withCompletionHandler:^(BOOL finished) { + [self.mediaPlayerController seekEfficientlyToTime:self.seekTargetTime withCompletionHandler:^(BOOL finished) { if (finished) { - [self play]; + [self.mediaPlayerController play]; } completionHandler ? completionHandler(finished) : nil; }]; @@ -317,9 +321,9 @@ - (void)seekForwardFromTime:(CMTime)time withCompletionHandler:(void (^)(BOOL fi } self.seekTargetTime = CMTimeAdd(time, CMTimeMakeWithSeconds(SRGLetterboxForwardSeekInterval, NSEC_PER_SEC)); - [self seekEfficientlyToTime:self.seekTargetTime withCompletionHandler:^(BOOL finished) { + [self.mediaPlayerController seekEfficientlyToTime:self.seekTargetTime withCompletionHandler:^(BOOL finished) { if (finished) { - [self play]; + [self.mediaPlayerController play]; } completionHandler ? completionHandler(finished) : nil; }]; @@ -384,4 +388,9 @@ - (void)playbackStateDidChange:(NSNotification *)notification } } +- (void)playbackDidFail:(NSNotification *)notification +{ + [self reportError:notification.userInfo[SRGMediaPlayerErrorKey]]; +} + @end diff --git a/Framework/Sources/Service/SRGLetterboxService.m b/Framework/Sources/Service/SRGLetterboxService.m index 4458e348f..6de4ec178 100644 --- a/Framework/Sources/Service/SRGLetterboxService.m +++ b/Framework/Sources/Service/SRGLetterboxService.m @@ -13,8 +13,6 @@ #import #import -static void *s_kvoContext = &s_kvoContext; - __attribute__((constructor)) static void SRGLetterboxServiceInit(void) { // Ignore in test bundles or when compiling for Interface Builder rendering (since cannot be set for them) @@ -35,6 +33,8 @@ @interface SRGLetterboxService () +@property (nonatomic) SRGLetterboxController *controller; + @property (nonatomic, weak) id periodicTimeObserver; @property (nonatomic, getter=isMirroredOnExternalScreen) BOOL mirroredOnExternalScreen; @@ -63,10 +63,6 @@ - (instancetype)init if (self = [super init]) { self.controller = [[SRGLetterboxController alloc] init]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(audioSessionWasInterrupted:) - name:AVAudioSessionInterruptionNotification - object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidEnterBackground:) name:UIApplicationDidEnterBackgroundNotification @@ -81,72 +77,13 @@ - (instancetype)init return self; } -#pragma mark Getters and setters - -- (void)setController:(SRGLetterboxController *)controller +- (void)dealloc { - if (_controller) { - _controller.playerConfigurationBlock = ^(AVPlayer *player) { - player.allowsExternalPlayback = NO; - }; - [_controller reloadPlayerConfiguration]; - - [_controller removeObserver:self forKeyPath:@keypath(_controller.pictureInPictureController.pictureInPictureActive) context:s_kvoContext]; - - [[NSNotificationCenter defaultCenter] removeObserver:self - name:SRGMediaPlayerPlaybackStateDidChangeNotification - object:_controller]; - [[NSNotificationCenter defaultCenter] removeObserver:self - name:SRGMediaPlayerPlaybackDidFailNotification - object:_controller]; - - [_controller removePeriodicTimeObserver:self.periodicTimeObserver]; - } - - _controller = controller; - - [self updateRemoteCommandCenter]; - [self updateNowPlayingInformation]; - [self updateNowPlayingPlaybackInformation]; - - if (controller) { - controller.playerConfigurationBlock = ^(AVPlayer *player) { - // Allow external playback - player.allowsExternalPlayback = YES; - player.usesExternalPlaybackWhileExternalScreenIsActive = ! self.mirroredOnExternalScreen; - - // Only update the audio session if needed to avoid audio hiccups - NSString *mode = (self.media.mediaType == SRGMediaTypeVideo) ? AVAudioSessionModeMoviePlayback : AVAudioSessionModeDefault; - if (! [[AVAudioSession sharedInstance].mode isEqualToString:mode]) { - [[AVAudioSession sharedInstance] setMode:mode error:NULL]; - } - }; - - [_controller addObserver:self forKeyPath:@keypath(_controller.pictureInPictureController.pictureInPictureActive) options:0 context:s_kvoContext]; - - @weakify(self) - controller.pictureInPictureControllerCreationBlock = ^(AVPictureInPictureController *pictureInPictureController) { - @strongify(self) - - pictureInPictureController.delegate = self; - }; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(playbackStateDidChange:) - name:SRGMediaPlayerPlaybackStateDidChangeNotification - object:controller]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(playbackDidFail:) - name:SRGMediaPlayerPlaybackDidFailNotification - object:controller]; - - self.periodicTimeObserver = [controller addPeriodicTimeObserverForInterval:CMTimeMakeWithSeconds(1., NSEC_PER_SEC) queue:NULL usingBlock:^(CMTime time) { - [self updateNowPlayingPlaybackInformation]; - [self updateRemoteCommandCenter]; - }]; - } + [[NSNotificationCenter defaultCenter] removeObserver:self]; } +#pragma mark Getters and setters + - (void)setMirroredOnExternalScreen:(BOOL)mirroredOnExternalScreen { if (_mirroredOnExternalScreen == mirroredOnExternalScreen) { @@ -154,21 +91,12 @@ - (void)setMirroredOnExternalScreen:(BOOL)mirroredOnExternalScreen } _mirroredOnExternalScreen = mirroredOnExternalScreen; - [self.controller reloadPlayerConfiguration]; + [self.controller.mediaPlayerController reloadPlayerConfiguration]; } - (void)resumeFromController:(SRGLetterboxController *)controller { - // FIXME: We soon will have Letterbox controller retrieve media information. Media and URN will therefore be - // available to provide to the update method. In the meantime, resuming will not work if no media - // composition is available - SRGMediaComposition *mediaComposition = controller.mediaComposition; - [self updateWithURN:nil media:nil mediaComposition:mediaComposition preferredQuality:self.preferredQuality]; - - self.controller = controller; - // Perform media-dependent updates - [self.controller reloadPlayerConfiguration]; } #pragma mark Control center and lock screen integration @@ -298,40 +226,11 @@ - (void)seekBackward:(id)sender - (void)playbackStateDidChange:(NSNotification *)notification { - if (self.controller.playbackState == SRGMediaPlayerPlaybackStatePreparing) { + if (self.controller.mediaPlayerController.playbackState == SRGMediaPlayerPlaybackStatePreparing) { [self updateNowPlayingInformation]; } } -- (void)playbackDidFail:(NSNotification *)notification -{ - [self reportError:notification.userInfo[SRGMediaPlayerErrorKey]]; -} - -- (void)audioSessionWasInterrupted:(NSNotification *)notification -{ - AVAudioSessionInterruptionType interruptionType = [notification.userInfo[AVAudioSessionInterruptionTypeKey] integerValue]; - AVAudioSessionInterruptionOptions interruptionOption = [notification.userInfo[AVAudioSessionInterruptionOptionKey] integerValue]; - - // The system interrupted the audio session - if (interruptionType == AVAudioSessionInterruptionTypeBegan) { - if (self.controller.streamType == SRGMediaPlayerStreamTypeLive) { - [self.controller stop]; - } - else { - [self.controller pause]; - } - } - // Interruption ended, resume if needed - else if (interruptionType == AVAudioSessionInterruptionTypeEnded) { - // Restart audio if suggested - if (interruptionOption == AVAudioSessionInterruptionOptionShouldResume - && self.controller.mediaType == SRGMediaPlayerMediaTypeAudio) { - [self.controller play]; - } - } -} - // Update commands while transitioning from / to the background (since control availability might be affected) - (void)applicationDidEnterBackground:(NSNotification *)notification { @@ -343,36 +242,14 @@ - (void)applicationDidBecomeActive:(NSNotification *)notification [self updateRemoteCommandCenter]; } -#pragma mark KVO - -- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context -{ - if (context == s_kvoContext) { - if ([keyPath isEqualToString:@keypath(SRGLetterboxController.new, pictureInPictureController.pictureInPictureActive)]) { - // When enabling Airplay from the control center while picture in picture is active, picture in picture will be - // stopped without the usual restoration and stop delegate methods being called. KVO observe changes and call - // those methods manually - if (self.controller.player.externalPlaybackActive) { - [self pictureInPictureController:self.controller.pictureInPictureController restoreUserInterfaceForPictureInPictureStopWithCompletionHandler:^(BOOL restored) {}]; - [self pictureInPictureControllerDidStopPictureInPicture:self.controller.pictureInPictureController]; - } - } - } - else { - [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; - } -} - #pragma mark Description - (NSString *)description { - return [NSString stringWithFormat:@"<%@: %p; media: %@; mediaComposition: %@; error: %@>", + return [NSString stringWithFormat:@"<%@: %p; controller: %@>", [self class], self, - self.media, - self.mediaComposition, - self.error]; + self.controller]; } @end From a1f95049e3e5130259102446c93614e5aeccdbe8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Wed, 1 Feb 2017 09:18:38 +0100 Subject: [PATCH 011/180] Remove unneeded quality information --- .../Service/SRGLetterboxController+Private.h | 2 +- .../Sources/Service/SRGLetterboxController.h | 2 - .../Sources/Service/SRGLetterboxController.m | 38 +++++++------------ 3 files changed, 15 insertions(+), 27 deletions(-) diff --git a/Framework/Sources/Service/SRGLetterboxController+Private.h b/Framework/Sources/Service/SRGLetterboxController+Private.h index 293cfb87a..44ed3c9e8 100644 --- a/Framework/Sources/Service/SRGLetterboxController+Private.h +++ b/Framework/Sources/Service/SRGLetterboxController+Private.h @@ -6,7 +6,7 @@ #import "SRGLetterboxCOntroller.h" -@interface LetterboxController (Private) +@interface SRGLetterboxController (Private) @property (nonatomic, readonly) SRGMediaPlayerController *mediaPlayerController; diff --git a/Framework/Sources/Service/SRGLetterboxController.h b/Framework/Sources/Service/SRGLetterboxController.h index a80c9c8e8..aa557767e 100644 --- a/Framework/Sources/Service/SRGLetterboxController.h +++ b/Framework/Sources/Service/SRGLetterboxController.h @@ -26,7 +26,6 @@ OBJC_EXTERN NSString * const SRGLetterboxMetadataDidChangeNotification; OBJC_EXTERN NSString * const SRGLetterboxPreviousURNKey; OBJC_EXTERN NSString * const SRGLetterboxMediaKey; OBJC_EXTERN NSString * const SRGLetterboxMediaCompositionKey; -OBJC_EXTERN NSString * const SRGLetterboxPreferredQualityKey; /** * Previous metadata @@ -34,7 +33,6 @@ OBJC_EXTERN NSString * const SRGLetterboxPreferredQualityKey; OBJC_EXTERN NSString * const SRGLetterboxPreviousURNKey; OBJC_EXTERN NSString * const SRGLetterboxPreviousMediaKey; OBJC_EXTERN NSString * const SRGLetterboxPreviousMediaCompositionKey; -OBJC_EXTERN NSString * const SRGLetterboxPreferredQualityKey; /** * Notification sent when an error has been encountered. Use the `error` property to get the error itself diff --git a/Framework/Sources/Service/SRGLetterboxController.m b/Framework/Sources/Service/SRGLetterboxController.m index 6707deb55..296ed2db2 100644 --- a/Framework/Sources/Service/SRGLetterboxController.m +++ b/Framework/Sources/Service/SRGLetterboxController.m @@ -23,12 +23,10 @@ NSString * const SRGLetterboxServiceURNKey = @"SRGLetterboxServiceURNKey"; NSString * const SRGLetterboxMediaKey = @"SRGLetterboxMediaKey"; NSString * const SRGLetterboxMediaCompositionKey = @"SRGLetterboxMediaCompositionKey"; -NSString * const SRGLetterboxPreferredQualityKey = @"SRGLetterboxPreferredQualityKey"; NSString * const SRGLetterboxPreviousURNKey = @"SRGLetterboxPreviousURNKey"; NSString * const SRGLetterboxPreviousMediaKey = @"SRGLetterboxPreviousMediaKey"; NSString * const SRGLetterboxPreviousMediaCompositionKey = @"SRGLetterboxPreviousMediaCompositionKey"; -NSString * const SRGLetterboxPreviousPreferredQualityKey = @"SRGLetterboxPreviousPreferredQualityKey"; NSString * const SRGLetterboxPlaybackDidFailNotification = @"SRGLetterboxPlaybackDidFailNotification"; @@ -92,7 +90,7 @@ - (BOOL)isPictureInPictureActive // Pass in which data is available, the method will ensure that the data is consistent based on the most comprehensive // information available (media composition first, then media, finally URN). Less comprehensive data will be ignored -- (void)updateWithURN:(SRGMediaURN *)URN media:(SRGMedia *)media mediaComposition:(SRGMediaComposition *)mediaComposition preferredQuality:(SRGQuality)preferredQuality +- (void)updateWithURN:(SRGMediaURN *)URN media:(SRGMedia *)media mediaComposition:(SRGMediaComposition *)mediaComposition { if (mediaComposition) { media = [mediaComposition mediaForSegment:mediaComposition.mainSegment ?: mediaComposition.mainChapter]; @@ -105,19 +103,10 @@ - (void)updateWithURN:(SRGMediaURN *)URN media:(SRGMedia *)media mediaCompositio SRGMediaURN *previousURN = self.URN; SRGMedia *previousMedia = self.media; SRGMediaComposition *previousMediaComposition = self.mediaComposition; - SRGQuality previousPreferredQuality = self.preferredQuality; self.URN = URN; self.media = media; self.mediaComposition = mediaComposition; - self.preferredQuality = preferredQuality; - - if (! media || ! URN) { - self.error = nil; - - [self.mediaPlayerController reset]; - [self.requestQueue cancel]; - } NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; if (URN) { @@ -129,9 +118,6 @@ - (void)updateWithURN:(SRGMediaURN *)URN media:(SRGMedia *)media mediaCompositio if (mediaComposition) { userInfo[SRGLetterboxMediaCompositionKey] = mediaComposition; } - if (preferredQuality) { - userInfo[SRGLetterboxPreferredQualityKey] = @(preferredQuality); - } if (previousURN) { userInfo[SRGLetterboxPreviousURNKey] = previousURN; } @@ -141,9 +127,6 @@ - (void)updateWithURN:(SRGMediaURN *)URN media:(SRGMedia *)media mediaCompositio if (previousMediaComposition) { userInfo[SRGLetterboxPreviousMediaCompositionKey] = previousMediaComposition; } - if (previousPreferredQuality) { - userInfo[SRGLetterboxPreferredQualityKey] = @(previousPreferredQuality); - } [[NSNotificationCenter defaultCenter] postNotificationName:SRGLetterboxMetadataDidChangeNotification object:self userInfo:[userInfo copy]]; } @@ -171,10 +154,7 @@ - (void)playURN:(SRGMediaURN *)URN media:(SRGMedia *)media withPreferredQuality: return; } - [self updateWithURN:URN media:media mediaComposition:nil preferredQuality:preferredQuality]; - - // Perform media-dependent updates - [self.mediaPlayerController reloadPlayerConfiguration]; + [self resetWithURN:URN media:media]; self.requestQueue = [[SRGRequestQueue alloc] initWithStateChangeBlock:^(BOOL finished, NSError * _Nullable error) { if (finished) { @@ -188,7 +168,7 @@ - (void)playURN:(SRGMediaURN *)URN media:(SRGMedia *)media withPreferredQuality: return; } - [self updateWithURN:nil media:nil mediaComposition:mediaComposition preferredQuality:preferredQuality]; + [self updateWithURN:nil media:nil mediaComposition:mediaComposition]; SRGRequest *playRequest = [self.mediaPlayerController playMediaComposition:mediaComposition withPreferredProtocol:SRGProtocolNone preferredQuality:preferredQuality userInfo:nil resume:NO completionHandler:^(NSError * _Nonnull error) { [self.requestQueue reportError:error]; @@ -220,7 +200,17 @@ - (void)playURN:(SRGMediaURN *)URN media:(SRGMedia *)media withPreferredQuality: - (void)reset { - [self updateWithURN:nil media:nil mediaComposition:nil preferredQuality:SRGQualityNone]; + [self resetWithURN:nil media:nil]; +} + +- (void)resetWithURN:(SRGMediaURN *)URN media:(SRGMedia *)media +{ + self.error = nil; + + [self.mediaPlayerController reset]; + [self.requestQueue cancel]; + + [self updateWithURN:URN media:media mediaComposition:nil]; } - (void)reportError:(NSError *)error From 67065dd1a96e666fd2159d026618d1536567a043 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Wed, 1 Feb 2017 09:58:26 +0100 Subject: [PATCH 012/180] Move picture in picture back to the service --- .../Sources/Service/SRGLetterboxController.h | 56 +------------------ .../Sources/Service/SRGLetterboxController.m | 44 --------------- .../Sources/Service/SRGLetterboxService.h | 56 ++++++++++++++++++- .../Sources/Service/SRGLetterboxService.m | 44 +++++++++++++++ 4 files changed, 100 insertions(+), 100 deletions(-) diff --git a/Framework/Sources/Service/SRGLetterboxController.h b/Framework/Sources/Service/SRGLetterboxController.h index aa557767e..bacc60683 100644 --- a/Framework/Sources/Service/SRGLetterboxController.h +++ b/Framework/Sources/Service/SRGLetterboxController.h @@ -4,7 +4,6 @@ // License information is available from the LICENSE file. // -#import #import NS_ASSUME_NONNULL_BEGIN @@ -39,48 +38,13 @@ OBJC_EXTERN NSString * const SRGLetterboxPreviousMediaCompositionKey; */ OBJC_EXTERN NSString * const SRGLetterboxPlaybackDidFailNotification; -/** - * Delegate protocol for picture in picture implementation - */ -@protocol SRGLetterboxPictureInPictureDelegate - -/** - * Called when picture in picture might need user interface restoration. Return YES if this is the case (most notably - * if the player view from which picture in picture was initiated is not visible anymore) - */ -- (BOOL)letterboxShouldRestoreUserInterfaceForPictureInPicture; - -/** - * Called when a restoration process takes place - * - * @parameter completionHandler A completion block which MUST be called at the VERY END of the restoration process - * (e.g. after at the end of a modal presentation animation). Failing to do so leads to - * undefined behavior. The completion block must be called with `restored` set to `YES` - * iff the restoration was successful - */ -- (void)letterboxRestoreUserInterfaceForPictureInPictureWithCompletionHandler:(void (^)(BOOL restored))completionHandler; - -@optional - -/** - * Called when picture in picture has been started - */ -- (void)letterboxDidStartPictureInPicture; - -/** - * Called when picture in picture stopped - */ -- (void)letterboxDidStopPictureInPicture; - -@end - /** * Letterbox media player controller, managing playback, as well as automatic metadata retrieval. Applications * can use the metadata available from this controller to display additional playback information (e.g. title * or description of the content). The controller can be used in isolation for playback without display, but * is usually best used bound to a Letterbox view */ -@interface SRGLetterboxController : NSObject +@interface SRGLetterboxController : NSObject /** * Play the specified Uniform Resource Name @@ -162,22 +126,4 @@ OBJC_EXTERN NSString * const SRGLetterboxPlaybackDidFailNotification; @end -/** - * Picture in picture support. Implement `SRGLetterboxPictureInPictureDelegate` methods to integrate Letterbox picture in picture - * support within your application - */ -@interface SRGLetterboxController (PictureInPicture) - -/** - * Picture in picture delegate. Picture in picture won't be available if not set - */ -@property (nonatomic, weak) id pictureInPictureDelegate; - -/** - * Return YES iff picture in picture is active - */ -@property (nonatomic, readonly, getter=isPictureInPictureActive) BOOL pictureInPictureActive; - -@end - NS_ASSUME_NONNULL_END diff --git a/Framework/Sources/Service/SRGLetterboxController.m b/Framework/Sources/Service/SRGLetterboxController.m index 296ed2db2..0f4725422 100644 --- a/Framework/Sources/Service/SRGLetterboxController.m +++ b/Framework/Sources/Service/SRGLetterboxController.m @@ -79,13 +79,6 @@ - (void)dealloc [[NSNotificationCenter defaultCenter] removeObserver:self]; } -#pragma mark Getters and setters - -- (BOOL)isPictureInPictureActive -{ - return self.mediaPlayerController.pictureInPictureController.pictureInPictureActive; -} - #pragma mark Data // Pass in which data is available, the method will ensure that the data is consistent based on the most comprehensive @@ -319,43 +312,6 @@ - (void)seekForwardFromTime:(CMTime)time withCompletionHandler:(void (^)(BOOL fi }]; } -#pragma mark AVPictureInPictureControllerDelegate protocol - -- (void)pictureInPictureControllerDidStartPictureInPicture:(AVPictureInPictureController *)pictureInPictureController -{ - if ([self.pictureInPictureDelegate respondsToSelector:@selector(letterboxDidStartPictureInPicture)]) { - [self.pictureInPictureDelegate letterboxDidStartPictureInPicture]; - } -} - -- (void)pictureInPictureController:(AVPictureInPictureController *)pictureInPictureController restoreUserInterfaceForPictureInPictureStopWithCompletionHandler:(void (^)(BOOL))completionHandler -{ - // It is very important that the completion handler is called at the very end of the process, otherwise silly - // things might happen during the restoration (most notably player rate set to 0) - - // If stopping picture in picture because of a reset, don't restore anything - if (self.mediaPlayerController.playbackState == SRGMediaPlayerPlaybackStateIdle) { - completionHandler(YES); - return; - } - - if ([self.pictureInPictureDelegate letterboxShouldRestoreUserInterfaceForPictureInPicture]) { - [self.pictureInPictureDelegate letterboxRestoreUserInterfaceForPictureInPictureWithCompletionHandler:^(BOOL restored) { - completionHandler(restored); - }]; - } - else { - completionHandler(YES); - } -} - -- (void)pictureInPictureControllerDidStopPictureInPicture:(AVPictureInPictureController *)pictureInPictureController -{ - if ([self.pictureInPictureDelegate respondsToSelector:@selector(letterboxDidStopPictureInPicture)]) { - [self.pictureInPictureDelegate letterboxDidStopPictureInPicture]; - } -} - #pragma mark Notifications - (void)reachabilityDidChange:(NSNotification *)notification diff --git a/Framework/Sources/Service/SRGLetterboxService.h b/Framework/Sources/Service/SRGLetterboxService.h index bca247b71..d230ab6aa 100644 --- a/Framework/Sources/Service/SRGLetterboxService.h +++ b/Framework/Sources/Service/SRGLetterboxService.h @@ -6,11 +6,47 @@ #import "SRGLetterboxController.h" +#import #import #import NS_ASSUME_NONNULL_BEGIN +/** + * Delegate protocol for picture in picture implementation + */ +@protocol SRGLetterboxPictureInPictureDelegate + +/** + * Called when picture in picture might need user interface restoration. Return YES if this is the case (most notably + * if the player view from which picture in picture was initiated is not visible anymore) + */ +- (BOOL)letterboxShouldRestoreUserInterfaceForPictureInPicture; + +/** + * Called when a restoration process takes place + * + * @parameter completionHandler A completion block which MUST be called at the VERY END of the restoration process + * (e.g. after at the end of a modal presentation animation). Failing to do so leads to + * undefined behavior. The completion block must be called with `restored` set to `YES` + * iff the restoration was successful + */ +- (void)letterboxRestoreUserInterfaceForPictureInPictureWithCompletionHandler:(void (^)(BOOL restored))completionHandler; + +@optional + +/** + * Called when picture in picture has been started + */ +- (void)letterboxDidStartPictureInPicture; + +/** + * Called when picture in picture stopped + */ +- (void)letterboxDidStopPictureInPicture; + +@end + /** * Service responsible for main media playback of a Letterbox controller throughout the application. The main controller * is automatically integrated with the control center and enabled for external playback @@ -18,7 +54,7 @@ NS_ASSUME_NONNULL_BEGIN * @discussion Your target must support the 'Audio, Airplay, and Picture in Picture' capabilities, otherwise an exception * will be thrown at runtime (this check is not performed for test targets) */ -@interface SRGLetterboxService : NSObject +@interface SRGLetterboxService : NSObject /** * The singleton instance @@ -38,6 +74,24 @@ NS_ASSUME_NONNULL_BEGIN @end +/** + * Picture in picture support. Implement `SRGLetterboxPictureInPictureDelegate` methods to integrate Letterbox picture in picture + * support within your application + */ +@interface SRGLetterboxService (PictureInPicture) + +/** + * Picture in picture delegate. Picture in picture won't be available if not set + */ +@property (nonatomic, weak) id pictureInPictureDelegate; + +/** + * Return YES iff picture in picture is active + */ +@property (nonatomic, readonly, getter=isPictureInPictureActive) BOOL pictureInPictureActive; + +@end + /** * Mirroring */ diff --git a/Framework/Sources/Service/SRGLetterboxService.m b/Framework/Sources/Service/SRGLetterboxService.m index 6de4ec178..9a6e186c2 100644 --- a/Framework/Sources/Service/SRGLetterboxService.m +++ b/Framework/Sources/Service/SRGLetterboxService.m @@ -94,6 +94,13 @@ - (void)setMirroredOnExternalScreen:(BOOL)mirroredOnExternalScreen [self.controller.mediaPlayerController reloadPlayerConfiguration]; } +- (BOOL)isPictureInPictureActive +{ + return self.controller.mediaPlayerController.pictureInPictureController.pictureInPictureActive; +} + +#pragma mark Main playback management + - (void)resumeFromController:(SRGLetterboxController *)controller { @@ -222,6 +229,43 @@ - (void)seekBackward:(id)sender [self.controller seekBackwardWithCompletionHandler:nil]; } +#pragma mark AVPictureInPictureControllerDelegate protocol + +- (void)pictureInPictureControllerDidStartPictureInPicture:(AVPictureInPictureController *)pictureInPictureController +{ + if ([self.pictureInPictureDelegate respondsToSelector:@selector(letterboxDidStartPictureInPicture)]) { + [self.pictureInPictureDelegate letterboxDidStartPictureInPicture]; + } +} + +- (void)pictureInPictureController:(AVPictureInPictureController *)pictureInPictureController restoreUserInterfaceForPictureInPictureStopWithCompletionHandler:(void (^)(BOOL))completionHandler +{ + // It is very important that the completion handler is called at the very end of the process, otherwise silly + // things might happen during the restoration (most notably player rate set to 0) + + // If stopping picture in picture because of a reset, don't restore anything + if (self.controller.mediaPlayerController.playbackState == SRGMediaPlayerPlaybackStateIdle) { + completionHandler(YES); + return; + } + + if ([self.pictureInPictureDelegate letterboxShouldRestoreUserInterfaceForPictureInPicture]) { + [self.pictureInPictureDelegate letterboxRestoreUserInterfaceForPictureInPictureWithCompletionHandler:^(BOOL restored) { + completionHandler(restored); + }]; + } + else { + completionHandler(YES); + } +} + +- (void)pictureInPictureControllerDidStopPictureInPicture:(AVPictureInPictureController *)pictureInPictureController +{ + if ([self.pictureInPictureDelegate respondsToSelector:@selector(letterboxDidStopPictureInPicture)]) { + [self.pictureInPictureDelegate letterboxDidStopPictureInPicture]; + } +} + #pragma mark Notifications - (void)playbackStateDidChange:(NSNotification *)notification From cdf352319f4cdfa1999965493af14f0025d008b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Wed, 1 Feb 2017 15:45:06 +0100 Subject: [PATCH 013/180] Add description method --- Framework/Sources/Service/SRGLetterboxController.m | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Framework/Sources/Service/SRGLetterboxController.m b/Framework/Sources/Service/SRGLetterboxController.m index 0f4725422..42275d92c 100644 --- a/Framework/Sources/Service/SRGLetterboxController.m +++ b/Framework/Sources/Service/SRGLetterboxController.m @@ -339,4 +339,18 @@ - (void)playbackDidFail:(NSNotification *)notification [self reportError:notification.userInfo[SRGMediaPlayerErrorKey]]; } +#pragma mark Description + +- (NSString *)description +{ + return [NSString stringWithFormat:@"<%@: %p; URN: %@; media: %@; mediaComposition: %@; error: %@; mediaPlayerController: %@>", + [self class], + self, + self.URN, + self.media, + self.mediaComposition, + self.error, + self.mediaPlayerController]; +} + @end From 6bc65b046cf711f84daf4635632a0d39cfb6fb78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Wed, 1 Feb 2017 15:45:18 +0100 Subject: [PATCH 014/180] Fix view compilation warnings --- Framework/Sources/Views/SRGLetterboxView.h | 7 ++ Framework/Sources/Views/SRGLetterboxView.m | 135 ++++++++++++--------- 2 files changed, 87 insertions(+), 55 deletions(-) diff --git a/Framework/Sources/Views/SRGLetterboxView.h b/Framework/Sources/Views/SRGLetterboxView.h index dbe312d39..cad154023 100644 --- a/Framework/Sources/Views/SRGLetterboxView.h +++ b/Framework/Sources/Views/SRGLetterboxView.h @@ -4,6 +4,8 @@ // License information is available from the LICENSE file. // +#import "SRGLetterboxController.h" + #import #import @@ -35,6 +37,11 @@ NS_ASSUME_NONNULL_BEGIN IB_DESIGNABLE @interface SRGLetterboxView : UIView +/** + * The controller bound to the view + */ +@property (nonatomic, weak, nullable) IBOutlet SRGLetterboxController *controller; + /** * View optional delegate */ diff --git a/Framework/Sources/Views/SRGLetterboxView.m b/Framework/Sources/Views/SRGLetterboxView.m index 04feffccf..0392d43a0 100644 --- a/Framework/Sources/Views/SRGLetterboxView.m +++ b/Framework/Sources/Views/SRGLetterboxView.m @@ -7,6 +7,7 @@ #import "SRGLetterboxView.h" #import "NSBundle+SRGLetterbox.h" +#import "SRGLetterboxController+Private.h" #import "SRGLetterboxError.h" #import "SRGLetterboxLogger.h" #import "SRGLetterboxService.h" @@ -84,20 +85,17 @@ - (instancetype)initWithCoder:(NSCoder *)aDecoder return self; } +- (void)dealloc +{ + self.controller = nil; +} + #pragma mark View lifecycle - (void)awakeFromNib { [super awakeFromNib]; - SRGLetterboxController *letterboxController = [SRGLetterboxService sharedService].controller; - [self.playerView insertSubview:letterboxController.view aboveSubview:self.imageView]; - [letterboxController.view mas_makeConstraints:^(MASConstraintMaker *make) { - make.edges.equalTo(self.playerView); - }]; - - self.playbackButton.mediaPlayerController = letterboxController; - // FIXME: Currently added in code, but we should provide a more customizable activity indicator // in the SRG Media Player library soon. Replace when available UIImageView *loadingImageView = [UIImageView srg_loadingImageView35WithTintColor:[UIColor whiteColor]]; @@ -112,17 +110,9 @@ - (void)awakeFromNib self.backwardSeekButton.hidden = YES; self.forwardSeekButton.hidden = YES; - self.pictureInPictureButton.mediaPlayerController = letterboxController; - - self.airplayView.mediaPlayerController = letterboxController; self.airplayView.delegate = self; - self.airplayButton.mediaPlayerController = letterboxController; - self.tracksButton.mediaPlayerController = letterboxController; - - self.timeSlider.mediaPlayerController = letterboxController; self.timeSlider.resumingAfterSeek = YES; - self.timeSlider.font = [UIFont srg_regularFontWithSize:14.f]; self.timeSlider.popUpViewColor = UIColor.whiteColor; self.timeSlider.textColor = UIColor.blackColor; @@ -151,35 +141,11 @@ - (void)willMoveToWindow:(UIWindow *)newWindow { [super willMoveToWindow:newWindow]; - SRGLetterboxController *letterboxController = [SRGLetterboxService sharedService].controller; - if (newWindow) { - @weakify(self) - @weakify(letterboxController) - self.periodicTimeObserver = [letterboxController addPeriodicTimeObserverForInterval:CMTimeMakeWithSeconds(1., NSEC_PER_SEC) queue:NULL usingBlock:^(CMTime time) { - @strongify(self) - @strongify(letterboxController) - - self.forwardSeekButton.hidden = ![letterboxController canSeekForward]; - self.backwardSeekButton.hidden = ![letterboxController canSeekBackward]; - }]; - [self updateInterfaceAnimated:NO]; [self updateUserInterfaceTogglabilityForAirplayAnimated:NO]; [self reloadData]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(mediaMetadataDidChange:) - name:SRGLetterboxMetadataDidChangeNotification - object:[SRGLetterboxService sharedService]]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(mediaPlaybackDidFail:) - name:SRGLetterboxPlaybackDidFailNotification - object:[SRGLetterboxService sharedService]]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(playbackStateDidChange:) - name:SRGMediaPlayerPlaybackStateDidChangeNotification - object:letterboxController]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pictureInPictureStateDidChange:) name:SRGMediaPlayerPictureInPictureStateDidChangeNotification @@ -200,25 +166,10 @@ - (void)willMoveToWindow:(UIWindow *)newWindow selector:@selector(screenDidDisconnect:) name:UIScreenDidDisconnectNotification object:nil]; - - AVPictureInPictureController *pictureInPictureController = letterboxController.pictureInPictureController; - if (pictureInPictureController.isPictureInPictureActive) { - [pictureInPictureController stopPictureInPicture]; - } } else { self.inactivityTimer = nil; // Invalidate timer - [letterboxController removePeriodicTimeObserver:self.periodicTimeObserver]; - [[NSNotificationCenter defaultCenter] removeObserver:self - name:SRGLetterboxMetadataDidChangeNotification - object:[SRGLetterboxService sharedService]]; - [[NSNotificationCenter defaultCenter] removeObserver:self - name:SRGLetterboxPlaybackDidFailNotification - object:[SRGLetterboxService sharedService]]; - [[NSNotificationCenter defaultCenter] removeObserver:self - name:SRGMediaPlayerPlaybackStateDidChangeNotification - object:letterboxController]; [[NSNotificationCenter defaultCenter] removeObserver:self name:SRGMediaPlayerPictureInPictureStateDidChangeNotification object:nil]; @@ -239,6 +190,80 @@ - (void)willMoveToWindow:(UIWindow *)newWindow #pragma mark Getters and setters +- (void)setController:(SRGLetterboxController *)controller +{ + if (_controller == controller) { + return; + } + + if (_controller) { + SRGMediaPlayerController *previousMediaPlayerController = _controller.mediaPlayerController; + [previousMediaPlayerController removePeriodicTimeObserver:self.periodicTimeObserver]; + + [[NSNotificationCenter defaultCenter] removeObserver:self + name:SRGLetterboxMetadataDidChangeNotification + object:_controller]; + [[NSNotificationCenter defaultCenter] removeObserver:self + name:SRGLetterboxPlaybackDidFailNotification + object:_controller]; + [[NSNotificationCenter defaultCenter] removeObserver:self + name:SRGMediaPlayerPlaybackStateDidChangeNotification + object:previousMediaPlayerController]; + + [previousMediaPlayerController.view removeFromSuperview]; + } + + _controller = controller; + + SRGMediaPlayerController *mediaPlayerController = controller.mediaPlayerController; + self.playbackButton.mediaPlayerController = mediaPlayerController; + self.pictureInPictureButton.mediaPlayerController = mediaPlayerController; + self.airplayView.mediaPlayerController = mediaPlayerController; + self.airplayButton.mediaPlayerController = mediaPlayerController; + self.tracksButton.mediaPlayerController = mediaPlayerController; + self.timeSlider.mediaPlayerController = mediaPlayerController; + + if (controller) { + SRGMediaPlayerController *mediaPlayerController = controller.mediaPlayerController; + + @weakify(self) + @weakify(controller) + self.periodicTimeObserver = [mediaPlayerController addPeriodicTimeObserverForInterval:CMTimeMakeWithSeconds(1., NSEC_PER_SEC) queue:NULL usingBlock:^(CMTime time) { + @strongify(self) + @strongify(controller) + + self.forwardSeekButton.hidden = ![controller canSeekForward]; + self.backwardSeekButton.hidden = ![controller canSeekBackward]; + }]; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(mediaMetadataDidChange:) + name:SRGLetterboxMetadataDidChangeNotification + object:controller]; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(mediaPlaybackDidFail:) + name:SRGLetterboxPlaybackDidFailNotification + object:controller]; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(playbackStateDidChange:) + name:SRGMediaPlayerPlaybackStateDidChangeNotification + object:mediaPlayerController]; + + [self.playerView insertSubview:mediaPlayerController.view aboveSubview:self.imageView]; + [mediaPlayerController.view mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.equalTo(self.playerView); + }]; + + // FIXME: Decide what to do with the following +#if 0 + AVPictureInPictureController *pictureInPictureController = mediaPlayerController.pictureInPictureController; + if (pictureInPictureController.isPictureInPictureActive) { + [pictureInPictureController stopPictureInPicture]; + } +#endif + } +} + - (void)setDelegate:(id)delegate { _delegate = delegate; From 3a3d7e8107e86c6dfb5c951e9890c0d75962866a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Wed, 1 Feb 2017 17:54:29 +0100 Subject: [PATCH 015/180] Fix more compilation issues --- Framework/Sources/Views/SRGLetterboxView.m | 51 ++++++++++------------ 1 file changed, 23 insertions(+), 28 deletions(-) diff --git a/Framework/Sources/Views/SRGLetterboxView.m b/Framework/Sources/Views/SRGLetterboxView.m index 0392d43a0..385ba5a1e 100644 --- a/Framework/Sources/Views/SRGLetterboxView.m +++ b/Framework/Sources/Views/SRGLetterboxView.m @@ -315,7 +315,7 @@ - (BOOL)isPlayingInAirplayWithoutMirroring return YES; } - AVPlayer *player = [SRGLetterboxService sharedService].controller.player; + AVPlayer *player = self.controller.mediaPlayerController.player; if (! player) { return NO; } @@ -399,16 +399,15 @@ - (void)setUserInterfaceHidden:(BOOL)hidden animated:(BOOL)animated - (void)updateInterfaceAnimated:(BOOL)animated { void (^animations)(void) = ^{ - SRGLetterboxService *letterboxService = [SRGLetterboxService sharedService]; - SRGLetterboxController *letterboxController = letterboxService.controller; + SRGMediaPlayerController *mediaPlayerController = self.controller.mediaPlayerController; - if (letterboxController.playbackState == SRGMediaPlayerPlaybackStatePlaying) { + if (mediaPlayerController.playbackState == SRGMediaPlayerPlaybackStatePlaying) { // Hide if playing a video in Airplay or if "true screen mirroring" (device screen copy with no full-screen // playbackl on the external device) is used - SRGMedia *media = [SRGLetterboxService sharedService].media; + SRGMedia *media = self.controller.media; BOOL hidden = (media.mediaType == SRGMediaTypeVideo) && ! [self isPlayingInAirplayWithoutMirroring]; self.imageView.alpha = hidden ? 0.f : 1.f; - letterboxController.view.alpha = hidden ? 1.f : 0.f; + mediaPlayerController.view.alpha = hidden ? 1.f : 0.f; [self resetInactivityTimer]; @@ -417,9 +416,9 @@ - (void)updateInterfaceAnimated:(BOOL)animated [self.timeSlider showPopUpViewAnimated:YES]; } } - else if (letterboxController.playbackState == SRGMediaPlayerPlaybackStateEnded) { + else if (mediaPlayerController.playbackState == SRGMediaPlayerPlaybackStateEnded) { self.imageView.alpha = 1.f; - letterboxController.view.alpha = 0.f; + mediaPlayerController.view.alpha = 0.f; [self.timeSlider hidePopUpViewAnimated:YES]; self.showingPopup = NO; @@ -427,10 +426,10 @@ - (void)updateInterfaceAnimated:(BOOL)animated [self setUserInterfaceHidden:NO animated:YES]; } - self.loadingImageView.alpha = (letterboxController.playbackState == SRGMediaPlayerPlaybackStatePlaying - || letterboxController.playbackState == SRGMediaPlayerPlaybackStatePaused - || letterboxController.playbackState == SRGMediaPlayerPlaybackStateEnded - || letterboxController.playbackState == SRGMediaPlayerPlaybackStateIdle) ? 0.f : 1.f; + self.loadingImageView.alpha = (mediaPlayerController.playbackState == SRGMediaPlayerPlaybackStatePlaying + || mediaPlayerController.playbackState == SRGMediaPlayerPlaybackStatePaused + || mediaPlayerController.playbackState == SRGMediaPlayerPlaybackStateEnded + || mediaPlayerController.playbackState == SRGMediaPlayerPlaybackStateIdle) ? 0.f : 1.f; }; if (animated) { @@ -498,10 +497,10 @@ - (void)hideInterface:(NSTimer *)timer { // Only auto-hide the UI when it makes sense (e.g. not when the player is paused or loading). When the state // of the player returns to playing, the inactivity timer will be reset (see -playbackStateDidChange:) - SRGLetterboxController *letterboxController = [SRGLetterboxService sharedService].controller; - if (letterboxController.playbackState == SRGMediaPlayerPlaybackStatePlaying - || letterboxController.playbackState == SRGMediaPlayerPlaybackStateSeeking - || letterboxController.playbackState == SRGMediaPlayerPlaybackStateStalled + SRGMediaPlayerController *mediaPlayerController = self.controller.mediaPlayerController; + if (mediaPlayerController.playbackState == SRGMediaPlayerPlaybackStatePlaying + || mediaPlayerController.playbackState == SRGMediaPlayerPlaybackStateSeeking + || mediaPlayerController.playbackState == SRGMediaPlayerPlaybackStateStalled || ! self.errorView.hidden) { [self setUserInterfaceHidden:YES animated:YES]; } @@ -511,12 +510,12 @@ - (void)hideInterface:(NSTimer *)timer - (IBAction)seekBackward:(id)sender { - [[SRGLetterboxService sharedService].controller seekBackwardWithCompletionHandler:nil]; + [self.controller seekBackwardWithCompletionHandler:nil]; } - (IBAction)seekForward:(id)sender { - [[SRGLetterboxService sharedService].controller seekForwardWithCompletionHandler:nil]; + [self.controller seekForwardWithCompletionHandler:nil]; } - (IBAction)toggleFullScreen:(id)sender @@ -528,18 +527,15 @@ - (IBAction)toggleFullScreen:(id)sender - (void)reloadData { - SRGMedia *media = [SRGLetterboxService sharedService].media; - NSError *error = [SRGLetterboxService sharedService].error; - - if (error) { + if (self.controller.error) { self.errorView.hidden = NO; - self.errorLabel.text = error.localizedDescription; + self.errorLabel.text = self.controller.error.localizedDescription; } - else if (media) { + else if (self.controller.media) { self.errorView.hidden = YES; - [self.imageView srg_requestImageForObject:media withScale:SRGImageScaleLarge placeholderImageName:@"placeholder_media-180"]; + [self.imageView srg_requestImageForObject:self.controller.media withScale:SRGImageScaleLarge placeholderImageName:@"placeholder_media-180"]; } - else if ([SRGLetterboxService sharedService].URN) { + else if (self.controller.URN) { self.errorView.hidden = YES; } else { @@ -555,8 +551,7 @@ - (void)reloadData - (NSString *)slider:(ASValueTrackingSlider *)slider stringForValue:(float)value; { - SRGMedia *media = [SRGLetterboxService sharedService].media; - if (media.contentType == SRGContentTypeLivestream) { + if (self.controller.media.contentType == SRGContentTypeLivestream) { return (self.timeSlider.isLive) ? NSLocalizedString(@"Live", nil) : self.timeSlider.valueString; } else { From 36ca6b501411895788074b11014d564dc9f2ce7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Wed, 1 Feb 2017 18:04:59 +0100 Subject: [PATCH 016/180] Make the code run again --- Demo/Sources/Demos/ModalPlayerViewController.m | 11 +++++------ .../Demos/ModalPlayerViewController.storyboard | 3 +++ Demo/Sources/Demos/SimplePlayerViewController.m | 9 ++++----- .../Demos/SimplePlayerViewController.storyboard | 13 ++++++++++--- 4 files changed, 22 insertions(+), 14 deletions(-) diff --git a/Demo/Sources/Demos/ModalPlayerViewController.m b/Demo/Sources/Demos/ModalPlayerViewController.m index a61e36e50..ecb1ad435 100644 --- a/Demo/Sources/Demos/ModalPlayerViewController.m +++ b/Demo/Sources/Demos/ModalPlayerViewController.m @@ -19,6 +19,8 @@ @interface ModalPlayerViewController () @property (nonatomic, weak) IBOutlet SRGLetterboxView *letterboxView; @property (nonatomic, weak) IBOutlet UIButton *closeButton; +@property (nonatomic, weak) IBOutlet SRGLetterboxController *letterboxController; + // Switching to and from full-screen is made by adjusting the priority / constance of a constraint of the letterbox @property (nonatomic, weak) IBOutlet NSLayoutConstraint *letterboxTopConstraint; @property (nonatomic, weak) IBOutlet NSLayoutConstraint *letterboxBottomConstraint; @@ -63,10 +65,10 @@ - (void)viewWillAppear:(BOOL)animated if ([self isMovingToParentViewController] || [self isBeingPresented]) { if (self.media) { - [[SRGLetterboxService sharedService] playMedia:self.media withPreferredQuality:SRGQualityHD]; + [self.letterboxController playMedia:self.media withPreferredQuality:SRGQualityNone]; } else if (self.URN) { - [[SRGLetterboxService sharedService] playURN:self.URN withPreferredQuality:SRGQualityHD]; + [self.letterboxController playURN:self.URN withPreferredQuality:SRGQualityNone]; } } } @@ -76,10 +78,7 @@ - (void)viewDidDisappear:(BOOL)animated [super viewDidDisappear:animated]; if ([self isMovingFromParentViewController] || [self isBeingDismissed]) { - SRGLetterboxService *service = [SRGLetterboxService sharedService]; - if (! service.pictureInPictureActive) { - [service reset]; - } + [self.letterboxController reset]; } } diff --git a/Demo/Sources/Demos/ModalPlayerViewController.storyboard b/Demo/Sources/Demos/ModalPlayerViewController.storyboard index 2ecca9253..d9f3c72cd 100644 --- a/Demo/Sources/Demos/ModalPlayerViewController.storyboard +++ b/Demo/Sources/Demos/ModalPlayerViewController.storyboard @@ -28,6 +28,7 @@ + @@ -114,6 +115,7 @@ + @@ -121,6 +123,7 @@ + diff --git a/Demo/Sources/Demos/SimplePlayerViewController.m b/Demo/Sources/Demos/SimplePlayerViewController.m index 533b6eab5..8ff679602 100644 --- a/Demo/Sources/Demos/SimplePlayerViewController.m +++ b/Demo/Sources/Demos/SimplePlayerViewController.m @@ -12,6 +12,8 @@ @interface SimplePlayerViewController () @property (nonatomic) SRGMediaURN *URN; +@property (nonatomic) IBOutlet SRGLetterboxController *letterboxController; + @end @implementation SimplePlayerViewController @@ -39,7 +41,7 @@ - (void)viewWillAppear:(BOOL)animated if ([self isMovingToParentViewController] || [self isBeingPresented]) { if (self.URN) { - [[SRGLetterboxService sharedService] playURN:self.URN withPreferredQuality:SRGQualityNone]; + [self.letterboxController playURN:self.URN withPreferredQuality:SRGQualityNone]; } } } @@ -49,10 +51,7 @@ - (void)viewDidDisappear:(BOOL)animated [super viewDidDisappear:animated]; if ([self isMovingFromParentViewController] || [self isBeingDismissed]) { - SRGLetterboxService *service = [SRGLetterboxService sharedService]; - if (! service.pictureInPictureActive) { - [service reset]; - } + [self.letterboxController reset]; } } diff --git a/Demo/Sources/Demos/SimplePlayerViewController.storyboard b/Demo/Sources/Demos/SimplePlayerViewController.storyboard index a52f6f12d..d1cf973d1 100644 --- a/Demo/Sources/Demos/SimplePlayerViewController.storyboard +++ b/Demo/Sources/Demos/SimplePlayerViewController.storyboard @@ -1,5 +1,5 @@ - - + + @@ -23,11 +23,14 @@ - + + + + @@ -42,8 +45,12 @@ + + + + From deb2c13c46326edc6a0aa2344292cbc8ced43010 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Wed, 1 Feb 2017 18:08:09 +0100 Subject: [PATCH 017/180] Fix crash --- Framework/Sources/Service/SRGLetterboxService.m | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Framework/Sources/Service/SRGLetterboxService.m b/Framework/Sources/Service/SRGLetterboxService.m index 9a6e186c2..1b9699910 100644 --- a/Framework/Sources/Service/SRGLetterboxService.m +++ b/Framework/Sources/Service/SRGLetterboxService.m @@ -36,6 +36,8 @@ @interface SRGLetterboxService () @property (nonatomic) SRGLetterboxController *controller; @property (nonatomic, weak) id periodicTimeObserver; + +@property (nonatomic, weak) id pictureInPictureDelegate; @property (nonatomic, getter=isMirroredOnExternalScreen) BOOL mirroredOnExternalScreen; @property (nonatomic) YYWebImageOperation *imageOperation; From 7a25092f6bf08d5cb0ea68dcc2ed8366bda5ef22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Wed, 1 Feb 2017 18:52:15 +0100 Subject: [PATCH 018/180] Fix constants --- Framework/Sources/Service/SRGLetterboxController.h | 2 +- Framework/Sources/Service/SRGLetterboxController.m | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Framework/Sources/Service/SRGLetterboxController.h b/Framework/Sources/Service/SRGLetterboxController.h index bacc60683..1d102c302 100644 --- a/Framework/Sources/Service/SRGLetterboxController.h +++ b/Framework/Sources/Service/SRGLetterboxController.h @@ -22,7 +22,7 @@ OBJC_EXTERN NSString * const SRGLetterboxMetadataDidChangeNotification; /** * Current metadata */ -OBJC_EXTERN NSString * const SRGLetterboxPreviousURNKey; +OBJC_EXTERN NSString * const SRGLetterboxURNKey; OBJC_EXTERN NSString * const SRGLetterboxMediaKey; OBJC_EXTERN NSString * const SRGLetterboxMediaCompositionKey; diff --git a/Framework/Sources/Service/SRGLetterboxController.m b/Framework/Sources/Service/SRGLetterboxController.m index 42275d92c..34ada26e8 100644 --- a/Framework/Sources/Service/SRGLetterboxController.m +++ b/Framework/Sources/Service/SRGLetterboxController.m @@ -20,7 +20,7 @@ NSString * const SRGLetterboxMetadataDidChangeNotification = @"SRGLetterboxMetadataDidChangeNotification"; -NSString * const SRGLetterboxServiceURNKey = @"SRGLetterboxServiceURNKey"; +NSString * const SRGLetterboxURNKey = @"SRGLetterboxURNKey"; NSString * const SRGLetterboxMediaKey = @"SRGLetterboxMediaKey"; NSString * const SRGLetterboxMediaCompositionKey = @"SRGLetterboxMediaCompositionKey"; @@ -103,7 +103,7 @@ - (void)updateWithURN:(SRGMediaURN *)URN media:(SRGMedia *)media mediaCompositio NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; if (URN) { - userInfo[SRGLetterboxServiceURNKey] = URN; + userInfo[SRGLetterboxURNKey] = URN; } if (media) { userInfo[SRGLetterboxMediaKey] = media; From f826c1333dd81d4729d6136fdcdeb911704804d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Wed, 1 Feb 2017 18:56:45 +0100 Subject: [PATCH 019/180] Reduce public interface --- .../Service/SRGLetterboxController+Private.h | 49 ++++++++++++++++++- .../Sources/Service/SRGLetterboxController.h | 37 -------------- SRGLetterbox.xcodeproj/project.pbxproj | 2 +- 3 files changed, 48 insertions(+), 40 deletions(-) diff --git a/Framework/Sources/Service/SRGLetterboxController+Private.h b/Framework/Sources/Service/SRGLetterboxController+Private.h index 44ed3c9e8..4f88bb51f 100644 --- a/Framework/Sources/Service/SRGLetterboxController+Private.h +++ b/Framework/Sources/Service/SRGLetterboxController+Private.h @@ -4,12 +4,57 @@ // License information is available from the LICENSE file. // -#import "SRGLetterboxCOntroller.h" +#import "SRGLetterboxController.h" +NS_ASSUME_NONNULL_BEGIN + +/** + * Standard seek intervals + */ +OBJC_EXTERN const NSInteger SRGLetterboxBackwardSeekInterval; +OBJC_EXTERN const NSInteger SRGLetterboxForwardSeekInterval; + +/** + * Interface for internal use + */ @interface SRGLetterboxController (Private) +/** + * The media player controller managing playback + */ @property (nonatomic, readonly) SRGMediaPlayerController *mediaPlayerController; -@end +/** + * Return YES iff the player can seek backward from a standard amount of seconds + * + * @discussion Always possible for on-demand and DVR streams + */ +- (BOOL)canSeekBackward; + +/** + * Return YES iff the player can seek forward from a standard amount of seconds + * + * @discussion For on-demand and streams, only possible if seeking wouldn't jump past the end. For DVR streams, + * possible until the stream is played live + */ +- (BOOL)canSeekForward; +/** + * Seek backward from a standard amount of seconds + * + * @discussion If seeking is not possible or if a seek is interrupted, the completion handler will be called with + * finished set to `NO` + */ +- (void)seekBackwardWithCompletionHandler:(nullable void (^)(BOOL finished))completionHandler; + +/** + * Seek forward from a standard amount of seconds + * + * @discussion If seeking is not possible or if a seek is interrupted, the completion handler will be called with + * finished set to `NO` + */ +- (void)seekForwardWithCompletionHandler:(nullable void (^)(BOOL finished))completionHandler; + +@end +NS_ASSUME_NONNULL_END diff --git a/Framework/Sources/Service/SRGLetterboxController.h b/Framework/Sources/Service/SRGLetterboxController.h index 1d102c302..179ba9a33 100644 --- a/Framework/Sources/Service/SRGLetterboxController.h +++ b/Framework/Sources/Service/SRGLetterboxController.h @@ -8,12 +8,6 @@ NS_ASSUME_NONNULL_BEGIN -/** - * Standard seek intervals - */ -OBJC_EXTERN const NSInteger SRGLetterboxBackwardSeekInterval; -OBJC_EXTERN const NSInteger SRGLetterboxForwardSeekInterval; - /** * Notification sent when playback metadata is updated (use the dictionary keys below to get previous and new values) */ @@ -65,37 +59,6 @@ OBJC_EXTERN NSString * const SRGLetterboxPlaybackDidFailNotification; */ - (void)reset; -/** - * Return YES iff the player can seek backward from a standard amount of seconds - * - * @discussion Always possible for on-demand and DVR streams - */ -- (BOOL)canSeekBackward; - -/** - * Return YES iff the player can seek forward from a standard amount of seconds - * - * @discussion For on-demand and streams, only possible if seeking wouldn't jump past the end. For DVR streams, - * possible until the stream is played live - */ -- (BOOL)canSeekForward; - -/** - * Seek backward from a standard amount of seconds - * - * @discussion If seeking is not possible or if a seek is interrupted, the completion handler will be called with - * finished set to `NO` - */ -- (void)seekBackwardWithCompletionHandler:(nullable void (^)(BOOL finished))completionHandler; - -/** - * Seek forward from a standard amount of seconds - * - * @discussion If seeking is not possible or if a seek is interrupted, the completion handler will be called with - * finished set to `NO` - */ -- (void)seekForwardWithCompletionHandler:(nullable void (^)(BOOL finished))completionHandler; - @end /** diff --git a/SRGLetterbox.xcodeproj/project.pbxproj b/SRGLetterbox.xcodeproj/project.pbxproj index 45d412d5a..5294a8467 100644 --- a/SRGLetterbox.xcodeproj/project.pbxproj +++ b/SRGLetterbox.xcodeproj/project.pbxproj @@ -387,9 +387,9 @@ children = ( 087EB60E1E290AC4005DD80B /* SRGLetterboxController.h */, 087EB60F1E290AC4005DD80B /* SRGLetterboxController.m */, + 6F721E141E41BAD8003B698D /* SRGLetterboxController+Private.h */, 087EB60A1E290A14005DD80B /* SRGLetterboxService.h */, 087EB60B1E290A14005DD80B /* SRGLetterboxService.m */, - 6F721E141E41BAD8003B698D /* SRGLetterboxController+Private.h */, ); path = Service; sourceTree = ""; From 0cdd001fbb4ee6e204acb8793437b6dc76220438 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Thu, 2 Feb 2017 06:28:15 +0100 Subject: [PATCH 020/180] Add error information to error notification information Though the error also is available from the controller, this is consistent with metadata update notifications --- Framework/Sources/Service/SRGLetterboxController.h | 7 ++++++- Framework/Sources/Service/SRGLetterboxController.m | 4 +++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/Framework/Sources/Service/SRGLetterboxController.h b/Framework/Sources/Service/SRGLetterboxController.h index 179ba9a33..e2bd7a167 100644 --- a/Framework/Sources/Service/SRGLetterboxController.h +++ b/Framework/Sources/Service/SRGLetterboxController.h @@ -28,10 +28,15 @@ OBJC_EXTERN NSString * const SRGLetterboxPreviousMediaKey; OBJC_EXTERN NSString * const SRGLetterboxPreviousMediaCompositionKey; /** - * Notification sent when an error has been encountered. Use the `error` property to get the error itself + * Notification sent when an error has been encountered */ OBJC_EXTERN NSString * const SRGLetterboxPlaybackDidFailNotification; +/** + * Error information + */ +OBJC_EXTERN NSString * const SRGLetterboxErrorKey; + /** * Letterbox media player controller, managing playback, as well as automatic metadata retrieval. Applications * can use the metadata available from this controller to display additional playback information (e.g. title diff --git a/Framework/Sources/Service/SRGLetterboxController.m b/Framework/Sources/Service/SRGLetterboxController.m index 34ada26e8..6c6717fc5 100644 --- a/Framework/Sources/Service/SRGLetterboxController.m +++ b/Framework/Sources/Service/SRGLetterboxController.m @@ -30,6 +30,8 @@ NSString * const SRGLetterboxPlaybackDidFailNotification = @"SRGLetterboxPlaybackDidFailNotification"; +NSString * const SRGLetterboxErrorKey = @"SRGLetterboxErrorKey"; + @interface SRGLetterboxController () @property (nonatomic) SRGMediaPlayerController *mediaPlayerController; @@ -227,7 +229,7 @@ - (void)reportError:(NSError *)error NSUnderlyingErrorKey : error }]; } - [[NSNotificationCenter defaultCenter] postNotificationName:SRGLetterboxPlaybackDidFailNotification object:self]; + [[NSNotificationCenter defaultCenter] postNotificationName:SRGLetterboxPlaybackDidFailNotification object:self userInfo:@{ SRGLetterboxErrorKey : self.error }]; } #pragma mark Standard seeks From 74c826cfc411a677fc5548b25236e86f47be770c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Thu, 2 Feb 2017 07:18:58 +0100 Subject: [PATCH 021/180] Save preferred quality --- Framework/Sources/Service/SRGLetterboxController.m | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Framework/Sources/Service/SRGLetterboxController.m b/Framework/Sources/Service/SRGLetterboxController.m index 6c6717fc5..33f762238 100644 --- a/Framework/Sources/Service/SRGLetterboxController.m +++ b/Framework/Sources/Service/SRGLetterboxController.m @@ -151,6 +151,9 @@ - (void)playURN:(SRGMediaURN *)URN media:(SRGMedia *)media withPreferredQuality: [self resetWithURN:URN media:media]; + // Save the preferred quality when restarting after connection loss + self.preferredQuality = preferredQuality; + self.requestQueue = [[SRGRequestQueue alloc] initWithStateChangeBlock:^(BOOL finished, NSError * _Nullable error) { if (finished) { [self reportError:error]; @@ -201,6 +204,8 @@ - (void)reset - (void)resetWithURN:(SRGMediaURN *)URN media:(SRGMedia *)media { self.error = nil; + self.seekTargetTime = kCMTimeInvalid; + self.preferredQuality = SRGQualityNone; [self.mediaPlayerController reset]; [self.requestQueue cancel]; From 9b9e0981bf7cb796e27bca4eb79f304dc851fdce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Thu, 2 Feb 2017 07:43:03 +0100 Subject: [PATCH 022/180] Fix controller test cases --- .../Service/SRGLetterboxController+Private.h | 2 + .../Sources/Service/SRGLetterboxService.m | 2 +- Tests/Sources/LetterboxControllerTestCase.m | 97 ++++++------------- Tests/Sources/LetterboxServiceTestCase.m | 4 + 4 files changed, 34 insertions(+), 71 deletions(-) diff --git a/Framework/Sources/Service/SRGLetterboxController+Private.h b/Framework/Sources/Service/SRGLetterboxController+Private.h index 4f88bb51f..1bea4ce61 100644 --- a/Framework/Sources/Service/SRGLetterboxController+Private.h +++ b/Framework/Sources/Service/SRGLetterboxController+Private.h @@ -6,6 +6,8 @@ #import "SRGLetterboxController.h" +#import + NS_ASSUME_NONNULL_BEGIN /** diff --git a/Framework/Sources/Service/SRGLetterboxService.m b/Framework/Sources/Service/SRGLetterboxService.m index 1b9699910..62b27db99 100644 --- a/Framework/Sources/Service/SRGLetterboxService.m +++ b/Framework/Sources/Service/SRGLetterboxService.m @@ -17,7 +17,7 @@ { // Ignore in test bundles or when compiling for Interface Builder rendering (since cannot be set for them) NSString *bundlePath = [NSBundle mainBundle].bundlePath; - if (! [bundlePath.pathExtension isEqualToString:@"xctest"] && ! [bundlePath hasSuffix:@"Xcode/Overlays"]) { + if (! [bundlePath.pathExtension isEqualToString:@"xctest"] && ! [bundlePath hasSuffix:@"Xcode/Agents"] && ! [bundlePath hasSuffix:@"Xcode/Overlays"]) { NSArray *backgroundModes = [NSBundle mainBundle].infoDictionary[@"UIBackgroundModes"]; if (! [backgroundModes containsObject:@"audio"]) { @throw [NSException exceptionWithName:NSInternalInconsistencyException diff --git a/Tests/Sources/LetterboxControllerTestCase.m b/Tests/Sources/LetterboxControllerTestCase.m index e5923d8e6..9c41f12cb 100644 --- a/Tests/Sources/LetterboxControllerTestCase.m +++ b/Tests/Sources/LetterboxControllerTestCase.m @@ -7,10 +7,8 @@ #import #import -static NSURL *ServiceTestURL(void) -{ - return SRGIntegrationLayerTestServiceURL(); -} +// Test internals +#import "SRGLetterboxController+Private.h" @interface LetterboxControllerTestCase : XCTestCase @@ -38,43 +36,34 @@ - (void)tearDown - (void)testOnDemandStreamSeeks { - XCTestExpectation *mediaCompositionExpectation = [self expectationWithDescription:@"Request succeeded"]; - - // TTC - __block SRGMediaComposition *mediaComposition = nil; - SRGDataProvider *dataProvider = [[SRGDataProvider alloc] initWithServiceURL:ServiceTestURL() businessUnitIdentifier:SRGDataProviderBusinessUnitIdentifierRTS]; - [[dataProvider mediaCompositionForVideoWithUid:@"8297891" completionBlock:^(SRGMediaComposition * _Nullable retrievedMediaComposition, NSError * _Nullable error) { - XCTAssertNotNil(retrievedMediaComposition); - mediaComposition = retrievedMediaComposition; - [mediaCompositionExpectation fulfill]; - }] resume]; - - [self waitForExpectationsWithTimeout:20. handler:nil]; + SRGMediaPlayerController *mediaPlayerController = self.controller.mediaPlayerController; // Wait until the stream is playing - [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:self.controller handler:^BOOL(NSNotification * _Nonnull notification) { + [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:mediaPlayerController handler:^BOOL(NSNotification * _Nonnull notification) { return [notification.userInfo[SRGMediaPlayerPlaybackStateKey] integerValue] == SRGMediaPlayerPlaybackStatePlaying; }]; - [self.controller playMediaComposition:mediaComposition withPreferredProtocol:SRGProtocolNone preferredQuality:SRGQualityNone userInfo:nil resume:YES completionHandler:nil]; + // TTC + [self.controller playURN:[SRGMediaURN mediaURNWithString:@"urn:rts:video:8297891"] withPreferredQuality:SRGQualityNone]; [self waitForExpectationsWithTimeout:30. handler:nil]; XCTAssertTrue([self.controller canSeekBackward]); XCTAssertTrue([self.controller canSeekForward]); // Seek to near the end - [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:self.controller handler:^BOOL(NSNotification * _Nonnull notification) { + [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:mediaPlayerController handler:^BOOL(NSNotification * _Nonnull notification) { return [notification.userInfo[SRGMediaPlayerPlaybackStateKey] integerValue] == SRGMediaPlayerPlaybackStatePlaying; }]; - [self.controller seekPreciselyToTime:CMTimeSubtract(CMTimeRangeGetEnd(self.controller.timeRange), CMTimeMakeWithSeconds(15., NSEC_PER_SEC)) withCompletionHandler:nil]; + [mediaPlayerController seekPreciselyToTime:CMTimeSubtract(CMTimeRangeGetEnd(mediaPlayerController.timeRange), CMTimeMakeWithSeconds(15., NSEC_PER_SEC)) withCompletionHandler:nil]; + [self waitForExpectationsWithTimeout:30. handler:nil]; XCTAssertTrue([self.controller canSeekBackward]); XCTAssertFalse([self.controller canSeekForward]); // Use standard seeks - [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:self.controller handler:^BOOL(NSNotification * _Nonnull notification) { + [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:mediaPlayerController handler:^BOOL(NSNotification * _Nonnull notification) { return [notification.userInfo[SRGMediaPlayerPlaybackStateKey] integerValue] == SRGMediaPlayerPlaybackStatePlaying; }]; @@ -86,7 +75,7 @@ - (void)testOnDemandStreamSeeks XCTAssertTrue([self.controller canSeekBackward]); XCTAssertTrue([self.controller canSeekForward]); - [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:self.controller handler:^BOOL(NSNotification * _Nonnull notification) { + [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:mediaPlayerController handler:^BOOL(NSNotification * _Nonnull notification) { return [notification.userInfo[SRGMediaPlayerPlaybackStateKey] integerValue] == SRGMediaPlayerPlaybackStatePlaying; }]; @@ -101,25 +90,14 @@ - (void)testOnDemandStreamSeeks - (void)testLiveStreamSeeks { - XCTestExpectation *mediaCompositionExpectation = [self expectationWithDescription:@"Request succeeded"]; - - // RSI 1 - __block SRGMediaComposition *mediaComposition = nil; - SRGDataProvider *dataProvider = [[SRGDataProvider alloc] initWithServiceURL:ServiceTestURL() businessUnitIdentifier:SRGDataProviderBusinessUnitIdentifierRSI]; - [[dataProvider mediaCompositionForVideoWithUid:@"livestream_La1" completionBlock:^(SRGMediaComposition * _Nullable retrievedMediaComposition, NSError * _Nullable error) { - XCTAssertNotNil(retrievedMediaComposition); - mediaComposition = retrievedMediaComposition; - [mediaCompositionExpectation fulfill]; - }] resume]; - - [self waitForExpectationsWithTimeout:20. handler:nil]; + SRGMediaPlayerController *mediaPlayerController = self.controller.mediaPlayerController; // Wait until the stream is playing - [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:self.controller handler:^BOOL(NSNotification * _Nonnull notification) { + [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:mediaPlayerController handler:^BOOL(NSNotification * _Nonnull notification) { return [notification.userInfo[SRGMediaPlayerPlaybackStateKey] integerValue] == SRGMediaPlayerPlaybackStatePlaying; }]; - [self.controller playMediaComposition:mediaComposition withPreferredProtocol:SRGProtocolNone preferredQuality:SRGQualityNone userInfo:nil resume:YES completionHandler:nil]; + [self.controller playURN:[SRGMediaURN mediaURNWithString:@"urn:rsi:video:livestream_La1"] withPreferredQuality:SRGQualityNone]; [self waitForExpectationsWithTimeout:30. handler:nil]; XCTAssertFalse([self.controller canSeekBackward]); @@ -136,34 +114,23 @@ - (void)testLiveStreamSeeks - (void)testDVRStreamSeeks { - XCTestExpectation *mediaCompositionExpectation = [self expectationWithDescription:@"Request succeeded"]; - - // RTS 1 - __block SRGMediaComposition *mediaComposition = nil; - SRGDataProvider *dataProvider = [[SRGDataProvider alloc] initWithServiceURL:ServiceTestURL() businessUnitIdentifier:SRGDataProviderBusinessUnitIdentifierRTS]; - [[dataProvider mediaCompositionForVideoWithUid:@"1967124" completionBlock:^(SRGMediaComposition * _Nullable retrievedMediaComposition, NSError * _Nullable error) { - XCTAssertNotNil(retrievedMediaComposition); - mediaComposition = retrievedMediaComposition; - [mediaCompositionExpectation fulfill]; - }] resume]; - - [self waitForExpectationsWithTimeout:20. handler:nil]; + SRGMediaPlayerController *mediaPlayerController = self.controller.mediaPlayerController; // Wait until the stream is playing - [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:self.controller handler:^BOOL(NSNotification * _Nonnull notification) { + [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:mediaPlayerController handler:^BOOL(NSNotification * _Nonnull notification) { return [notification.userInfo[SRGMediaPlayerPlaybackStateKey] integerValue] == SRGMediaPlayerPlaybackStatePlaying; }]; - [self.controller playMediaComposition:mediaComposition withPreferredProtocol:SRGProtocolNone preferredQuality:SRGQualityNone userInfo:nil resume:YES completionHandler:nil]; + [self.controller playURN:[SRGMediaURN mediaURNWithString:@"urn:rts:video:1967124"] withPreferredQuality:SRGQualityNone]; [self waitForExpectationsWithTimeout:30. handler:nil]; - XCTAssertTrue(self.controller.live); + XCTAssertTrue(mediaPlayerController.live); XCTAssertTrue([self.controller canSeekBackward]); XCTAssertFalse([self.controller canSeekForward]); // Seek in the past - [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:self.controller handler:^BOOL(NSNotification * _Nonnull notification) { + [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:mediaPlayerController handler:^BOOL(NSNotification * _Nonnull notification) { return [notification.userInfo[SRGMediaPlayerPlaybackStateKey] integerValue] == SRGMediaPlayerPlaybackStatePlaying; }]; @@ -172,13 +139,13 @@ - (void)testDVRStreamSeeks }]; [self waitForExpectationsWithTimeout:30. handler:nil]; - XCTAssertFalse(self.controller.live); + XCTAssertFalse(mediaPlayerController.live); XCTAssertTrue([self.controller canSeekBackward]); XCTAssertTrue([self.controller canSeekForward]); // Seek forward again - [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:self.controller handler:^BOOL(NSNotification * _Nonnull notification) { + [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:mediaPlayerController handler:^BOOL(NSNotification * _Nonnull notification) { return [notification.userInfo[SRGMediaPlayerPlaybackStateKey] integerValue] == SRGMediaPlayerPlaybackStatePlaying; }]; @@ -187,7 +154,7 @@ - (void)testDVRStreamSeeks }]; [self waitForExpectationsWithTimeout:30. handler:nil]; - XCTAssertTrue(self.controller.live); + XCTAssertTrue(mediaPlayerController.live); XCTAssertTrue([self.controller canSeekBackward]); XCTAssertFalse([self.controller canSeekForward]); @@ -195,28 +162,18 @@ - (void)testDVRStreamSeeks - (void)testMultipleSeeks { - XCTestExpectation *mediaCompositionExpectation = [self expectationWithDescription:@"Request succeeded"]; - - __block SRGMediaComposition *mediaComposition = nil; - SRGDataProvider *dataProvider = [[SRGDataProvider alloc] initWithServiceURL:ServiceTestURL() businessUnitIdentifier:SRGDataProviderBusinessUnitIdentifierRTS]; - [[dataProvider mediaCompositionForVideoWithUid:@"8297891" completionBlock:^(SRGMediaComposition * _Nullable retrievedMediaComposition, NSError * _Nullable error) { - XCTAssertNotNil(retrievedMediaComposition); - mediaComposition = retrievedMediaComposition; - [mediaCompositionExpectation fulfill]; - }] resume]; - - [self waitForExpectationsWithTimeout:20. handler:nil]; + SRGMediaPlayerController *mediaPlayerController = self.controller.mediaPlayerController; // Wait until the stream is playing - [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:self.controller handler:^BOOL(NSNotification * _Nonnull notification) { + [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:mediaPlayerController handler:^BOOL(NSNotification * _Nonnull notification) { return [notification.userInfo[SRGMediaPlayerPlaybackStateKey] integerValue] == SRGMediaPlayerPlaybackStatePlaying; }]; - [self.controller playMediaComposition:mediaComposition withPreferredProtocol:SRGProtocolNone preferredQuality:SRGQualityNone userInfo:nil resume:YES completionHandler:nil]; + [self.controller playURN:[SRGMediaURN mediaURNWithString:@"urn:rts:video:8297891"] withPreferredQuality:SRGQualityNone]; [self waitForExpectationsWithTimeout:30. handler:nil]; // Pile up seeks forwards - [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:self.controller handler:^BOOL(NSNotification * _Nonnull notification) { + [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:mediaPlayerController handler:^BOOL(NSNotification * _Nonnull notification) { return [notification.userInfo[SRGMediaPlayerPlaybackStateKey] integerValue] == SRGMediaPlayerPlaybackStatePlaying; }]; @@ -232,7 +189,7 @@ - (void)testMultipleSeeks XCTAssertTrue([self.controller canSeekBackward]); // Pile up seeks backwards - [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:self.controller handler:^BOOL(NSNotification * _Nonnull notification) { + [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:mediaPlayerController handler:^BOOL(NSNotification * _Nonnull notification) { return [notification.userInfo[SRGMediaPlayerPlaybackStateKey] integerValue] == SRGMediaPlayerPlaybackStatePlaying; }]; diff --git a/Tests/Sources/LetterboxServiceTestCase.m b/Tests/Sources/LetterboxServiceTestCase.m index f247818ff..0e30a5803 100644 --- a/Tests/Sources/LetterboxServiceTestCase.m +++ b/Tests/Sources/LetterboxServiceTestCase.m @@ -8,6 +8,8 @@ #import #import +#if 0 + static NSURL *ServiceTestURL(void) { return SRGIntegrationLayerTestServiceURL(); @@ -463,3 +465,5 @@ - (void)testResumeWithPlayingService } @end + +#endif From 3c0c6bc66a1d12da35b1b8a77a9fabca0a255614 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Thu, 2 Feb 2017 08:23:12 +0100 Subject: [PATCH 023/180] Migrate existing service tests to controller tests --- Tests/Sources/LetterboxControllerTestCase.m | 57 +++++++++++++++++++ Tests/Sources/LetterboxServiceTestCase.m | 61 --------------------- 2 files changed, 57 insertions(+), 61 deletions(-) diff --git a/Tests/Sources/LetterboxControllerTestCase.m b/Tests/Sources/LetterboxControllerTestCase.m index 9c41f12cb..74f14bb85 100644 --- a/Tests/Sources/LetterboxControllerTestCase.m +++ b/Tests/Sources/LetterboxControllerTestCase.m @@ -34,6 +34,63 @@ - (void)tearDown #pragma mark Tests +- (void)testPlayURN +{ + +} + +- (void)testPlayMedia +{ + +} + +- (void)testReset +{ + +} + +- (void)testPlaybackMetadata +{ + SRGMediaPlayerController *mediaPlayerController = self.controller.mediaPlayerController; + + XCTAssertNil(self.controller.URN); + XCTAssertNil(self.controller.media); + XCTAssertNil(self.controller.mediaComposition); + XCTAssertNil(self.controller.error); + + // Wait until the stream is playing, at which time we expect the media composition to be available + [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:mediaPlayerController handler:^BOOL(NSNotification * _Nonnull notification) { + return [notification.userInfo[SRGMediaPlayerPlaybackStateKey] integerValue] == SRGMediaPlayerPlaybackStatePlaying; + }]; + [self expectationForNotification:SRGLetterboxMetadataDidChangeNotification object:self.controller handler:^BOOL(NSNotification * _Nonnull notification) { + return notification.userInfo[SRGLetterboxMediaCompositionKey] != nil; + }]; + + SRGMediaURN *URN = [SRGMediaURN mediaURNWithString:@"urn:swi:video:42844052"]; + [self.controller playURN:URN withPreferredQuality:SRGQualityNone]; + + // Media and composition not immediately available, fetched by the controller + XCTAssertEqualObjects(self.controller.URN, URN); + XCTAssertNil(self.controller.media); + XCTAssertNil(self.controller.mediaComposition); + XCTAssertNil(self.controller.error); + + [self waitForExpectationsWithTimeout:20. handler:nil]; + + // Media information must now be available + XCTAssertEqualObjects(self.controller.URN, URN); + XCTAssertEqualObjects(self.controller.media.URN, URN); + XCTAssertEqualObjects(self.controller.mediaComposition.chapterURN, URN); + XCTAssertNil(self.controller.error); + + [self.controller reset]; + + XCTAssertNil(self.controller.URN); + XCTAssertNil(self.controller.media); + XCTAssertNil(self.controller.mediaComposition); + XCTAssertNil(self.controller.error); +} + - (void)testOnDemandStreamSeeks { SRGMediaPlayerController *mediaPlayerController = self.controller.mediaPlayerController; diff --git a/Tests/Sources/LetterboxServiceTestCase.m b/Tests/Sources/LetterboxServiceTestCase.m index 0e30a5803..f2f508bea 100644 --- a/Tests/Sources/LetterboxServiceTestCase.m +++ b/Tests/Sources/LetterboxServiceTestCase.m @@ -50,67 +50,6 @@ - (void)tearDown #pragma mark Tests -- (void)testObjects -{ - SRGLetterboxService *service = [SRGLetterboxService sharedService]; - XCTAssertNotNil(service); - XCTAssertNotNil(service.controller); -} - -- (void)testPlaybackMetadata -{ - XCTestExpectation *expectation = [self expectationWithDescription:@"Request succeeded"]; - - __block SRGMedia *media = nil; - [[self.dataProvider videosWithUids:@[@"42844052"] completionBlock:^(NSArray * _Nullable medias, NSError * _Nullable error) { - media = medias.firstObject; - XCTAssertNotNil(media); - [expectation fulfill]; - }] resume]; - - [self waitForExpectationsWithTimeout:20. handler:nil]; - - SRGLetterboxService *service = [SRGLetterboxService sharedService]; - - XCTAssertNil(service.URN); - XCTAssertNil(service.media); - XCTAssertNil(service.mediaComposition); - XCTAssertNil(service.error); - - // Wait until the stream is playing, at which time we expect the media composition to be available. Any update in between - // must have correct media information - [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:service.controller handler:^BOOL(NSNotification * _Nonnull notification) { - return [notification.userInfo[SRGMediaPlayerPlaybackStateKey] integerValue] == SRGMediaPlayerPlaybackStatePlaying; - }]; - [self expectationForNotification:SRGLetterboxMetadataDidChangeNotification object:service handler:^BOOL(NSNotification * _Nonnull notification) { - XCTAssertEqualObjects(notification.userInfo[SRGLetterboxMediaKey], media); - XCTAssertNil(notification.userInfo[SRGLetterboxPreviousMediaCompositionKey]); - - if (! notification.userInfo[SRGLetterboxMediaCompositionKey]) { - XCTAssertNil(notification.userInfo[SRGLetterboxPreviousMediaKey]); - return NO; - } - else { - XCTAssertEqualObjects(notification.userInfo[SRGLetterboxPreviousMediaKey], media); - return YES; - } - }]; - - [[SRGLetterboxService sharedService] playMedia:media withPreferredQuality:SRGQualityNone]; - - XCTAssertEqualObjects(service.URN, media.URN); - XCTAssertEqualObjects(service.media, media); - XCTAssertNil(service.mediaComposition); - XCTAssertNil(service.error); - - [self waitForExpectationsWithTimeout:20. handler:nil]; - - XCTAssertEqualObjects(service.URN, media.URN); - XCTAssertEqualObjects(service.media, media); - XCTAssertNotNil(service.mediaComposition); - XCTAssertNil(service.error); -} - - (void)testSameMediaPlaybackWhileAlreadyPlaying { XCTestExpectation *expectation = [self expectationWithDescription:@"Request succeeded"]; From a87c6d708ab9521e120e74459d8e4c83d255abc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Thu, 2 Feb 2017 08:26:32 +0100 Subject: [PATCH 024/180] Migrate more tests --- Tests/Sources/LetterboxControllerTestCase.m | 84 +++++++++++++++- Tests/Sources/LetterboxServiceTestCase.m | 104 -------------------- 2 files changed, 83 insertions(+), 105 deletions(-) diff --git a/Tests/Sources/LetterboxControllerTestCase.m b/Tests/Sources/LetterboxControllerTestCase.m index 74f14bb85..6ce7992be 100644 --- a/Tests/Sources/LetterboxControllerTestCase.m +++ b/Tests/Sources/LetterboxControllerTestCase.m @@ -18,7 +18,19 @@ @interface LetterboxControllerTestCase : XCTestCase @implementation LetterboxControllerTestCase -#pragma mark Setup and teardown +#pragma mark Helpers + +- (XCTestExpectation *)expectationForElapsedTimeInterval:(NSTimeInterval)timeInterval withHandler:(void (^)(void))handler +{ + XCTestExpectation *expectation = [self expectationWithDescription:[NSString stringWithFormat:@"Wait for %@ seconds", @(timeInterval)]]; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(timeInterval * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [expectation fulfill]; + handler ? handler() : nil; + }); + return expectation; +} + +#pragma mark Setup and tear down - (void)setUp { @@ -91,6 +103,76 @@ - (void)testPlaybackMetadata XCTAssertNil(self.controller.error); } +- (void)testSameMediaPlaybackWhileAlreadyPlaying +{ + SRGMediaPlayerController *mediaPlayerController = self.controller.mediaPlayerController; + + // Wait until the stream is playing + [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:mediaPlayerController handler:^BOOL(NSNotification * _Nonnull notification) { + return [notification.userInfo[SRGMediaPlayerPlaybackStateKey] integerValue] == SRGMediaPlayerPlaybackStatePlaying; + }]; + + [self.controller playURN:[SRGMediaURN mediaURNWithString:@"urn:swi:video:42844052"] withPreferredQuality:SRGQualityNone]; + + [self waitForExpectationsWithTimeout:20. handler:nil]; + + // Expect no change when trying to play the same media + id metadataObserver = [[NSNotificationCenter defaultCenter] addObserverForName:SRGLetterboxMetadataDidChangeNotification object:self.controller queue:nil usingBlock:^(NSNotification * _Nonnull note) { + XCTFail(@"Expect no metadata update when playing the same media"); + }]; + id eventObserver = [[NSNotificationCenter defaultCenter] addObserverForName:SRGMediaPlayerPlaybackStateDidChangeNotification object:self.controller queue:nil usingBlock:^(NSNotification * _Nonnull note) { + XCTFail(@"Expect no playback state change when playing the same media"); + }]; + + [self expectationForElapsedTimeInterval:3. withHandler:nil]; + + [self.controller playURN:[SRGMediaURN mediaURNWithString:@"urn:swi:video:42844052"] withPreferredQuality:SRGQualityNone]; + + [self waitForExpectationsWithTimeout:20. handler:^(NSError * _Nullable error) { + [[NSNotificationCenter defaultCenter] removeObserver:metadataObserver]; + [[NSNotificationCenter defaultCenter] removeObserver:eventObserver]; + }]; +} + +- (void)testSameMediaPlaybackWhilePaused +{ + SRGMediaPlayerController *mediaPlayerController = self.controller.mediaPlayerController; + + // Wait until the stream is playing + [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:mediaPlayerController handler:^BOOL(NSNotification * _Nonnull notification) { + return [notification.userInfo[SRGMediaPlayerPlaybackStateKey] integerValue] == SRGMediaPlayerPlaybackStatePlaying; + }]; + + [self.controller playURN:[SRGMediaURN mediaURNWithString:@"urn:swi:video:42844052"] withPreferredQuality:SRGQualityNone]; + + [self waitForExpectationsWithTimeout:20. handler:nil]; + + // Pause playback + [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:mediaPlayerController handler:^BOOL(NSNotification * _Nonnull notification) { + return [notification.userInfo[SRGMediaPlayerPlaybackStateKey] integerValue] == SRGMediaPlayerPlaybackStatePaused; + }]; + + [mediaPlayerController pause]; + + [self waitForExpectationsWithTimeout:20. handler:nil]; + + // Expect only a player state change notification, no metadata change notification + id metadataObserver = [[NSNotificationCenter defaultCenter] addObserverForName:SRGLetterboxMetadataDidChangeNotification object:self.controller queue:nil usingBlock:^(NSNotification * _Nonnull note) { + XCTFail(@"Expect no metadata update when playing the same media"); + }]; + + [self expectationForElapsedTimeInterval:3. withHandler:nil]; + [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:mediaPlayerController handler:^BOOL(NSNotification * _Nonnull notification) { + return [notification.userInfo[SRGMediaPlayerPlaybackStateKey] integerValue] == SRGMediaPlayerPlaybackStatePlaying; + }]; + + [self.controller playURN:[SRGMediaURN mediaURNWithString:@"urn:swi:video:42844052"] withPreferredQuality:SRGQualityNone]; + + [self waitForExpectationsWithTimeout:20. handler:^(NSError * _Nullable error) { + [[NSNotificationCenter defaultCenter] removeObserver:metadataObserver]; + }]; +} + - (void)testOnDemandStreamSeeks { SRGMediaPlayerController *mediaPlayerController = self.controller.mediaPlayerController; diff --git a/Tests/Sources/LetterboxServiceTestCase.m b/Tests/Sources/LetterboxServiceTestCase.m index f2f508bea..06f345db6 100644 --- a/Tests/Sources/LetterboxServiceTestCase.m +++ b/Tests/Sources/LetterboxServiceTestCase.m @@ -23,18 +23,6 @@ @interface LetterboxServiceTestCase : XCTestCase @implementation LetterboxServiceTestCase -#pragma mark Helpers - -- (XCTestExpectation *)expectationForElapsedTimeInterval:(NSTimeInterval)timeInterval withHandler:(void (^)(void))handler -{ - XCTestExpectation *expectation = [self expectationWithDescription:[NSString stringWithFormat:@"Wait for %@ seconds", @(timeInterval)]]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(timeInterval * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [expectation fulfill]; - handler ? handler() : nil; - }); - return expectation; -} - #pragma mark Setup and teardown - (void)setUp @@ -50,98 +38,6 @@ - (void)tearDown #pragma mark Tests -- (void)testSameMediaPlaybackWhileAlreadyPlaying -{ - XCTestExpectation *expectation = [self expectationWithDescription:@"Request succeeded"]; - - __block SRGMedia *media = nil; - [[self.dataProvider videosWithUids:@[@"42844052"] completionBlock:^(NSArray * _Nullable medias, NSError * _Nullable error) { - media = medias.firstObject; - XCTAssertNotNil(media); - [expectation fulfill]; - }] resume]; - - [self waitForExpectationsWithTimeout:20. handler:nil]; - - SRGLetterboxService *service = [SRGLetterboxService sharedService]; - - // Wait until the stream is playing - [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:service.controller handler:^BOOL(NSNotification * _Nonnull notification) { - return [notification.userInfo[SRGMediaPlayerPlaybackStateKey] integerValue] == SRGMediaPlayerPlaybackStatePlaying; - }]; - - [[SRGLetterboxService sharedService] playMedia:media withPreferredQuality:SRGQualityNone]; - - [self waitForExpectationsWithTimeout:20. handler:nil]; - - // Expect no change when trying to play the same media - id metadataObserver = [[NSNotificationCenter defaultCenter] addObserverForName:SRGLetterboxMetadataDidChangeNotification object:service queue:nil usingBlock:^(NSNotification * _Nonnull note) { - XCTFail(@"Expect no metadata update when playing the same media"); - }]; - id eventObserver = [[NSNotificationCenter defaultCenter] addObserverForName:SRGMediaPlayerPlaybackStateDidChangeNotification object:service.controller queue:nil usingBlock:^(NSNotification * _Nonnull note) { - XCTFail(@"Expect no playback state change when playing the same media"); - }]; - - [self expectationForElapsedTimeInterval:3. withHandler:nil]; - - [[SRGLetterboxService sharedService] playMedia:media withPreferredQuality:SRGQualityNone]; - - [self waitForExpectationsWithTimeout:20. handler:^(NSError * _Nullable error) { - [[NSNotificationCenter defaultCenter] removeObserver:metadataObserver]; - [[NSNotificationCenter defaultCenter] removeObserver:eventObserver]; - }]; -} - -- (void)testSameMediaPlaybackWhilePaused -{ - XCTestExpectation *expectation = [self expectationWithDescription:@"Request succeeded"]; - - __block SRGMedia *media = nil; - [[self.dataProvider videosWithUids:@[@"42844052"] completionBlock:^(NSArray * _Nullable medias, NSError * _Nullable error) { - media = medias.firstObject; - XCTAssertNotNil(media); - [expectation fulfill]; - }] resume]; - - [self waitForExpectationsWithTimeout:20. handler:nil]; - - SRGLetterboxService *service = [SRGLetterboxService sharedService]; - - // Wait until the stream is playing - [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:service.controller handler:^BOOL(NSNotification * _Nonnull notification) { - return [notification.userInfo[SRGMediaPlayerPlaybackStateKey] integerValue] == SRGMediaPlayerPlaybackStatePlaying; - }]; - - [[SRGLetterboxService sharedService] playMedia:media withPreferredQuality:SRGQualityNone]; - - [self waitForExpectationsWithTimeout:20. handler:nil]; - - // Pause playback - [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:service.controller handler:^BOOL(NSNotification * _Nonnull notification) { - return [notification.userInfo[SRGMediaPlayerPlaybackStateKey] integerValue] == SRGMediaPlayerPlaybackStatePaused; - }]; - - [[SRGLetterboxService sharedService].controller pause]; - - [self waitForExpectationsWithTimeout:20. handler:nil]; - - // Expect only a player state change notification, no metadata change notification - id metadataObserver = [[NSNotificationCenter defaultCenter] addObserverForName:SRGLetterboxMetadataDidChangeNotification object:service queue:nil usingBlock:^(NSNotification * _Nonnull note) { - XCTFail(@"Expect no metadata update when playing the same media"); - }]; - - [self expectationForElapsedTimeInterval:3. withHandler:nil]; - [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:service.controller handler:^BOOL(NSNotification * _Nonnull notification) { - return [notification.userInfo[SRGMediaPlayerPlaybackStateKey] integerValue] == SRGMediaPlayerPlaybackStatePlaying; - }]; - - [[SRGLetterboxService sharedService] playMedia:media withPreferredQuality:SRGQualityNone]; - - [self waitForExpectationsWithTimeout:20. handler:^(NSError * _Nullable error) { - [[NSNotificationCenter defaultCenter] removeObserver:metadataObserver]; - }]; -} - - (void)testMediaChange { XCTestExpectation *expectation1 = [self expectationWithDescription:@"Request 1 succeeded"]; From b5414e56f5f1cabe8fd10da5b8d4ce2fd10d3c48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Thu, 2 Feb 2017 14:39:04 +0100 Subject: [PATCH 025/180] Fix potential documentation warning --- Framework/Sources/Views/SRGLetterboxView.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Framework/Sources/Views/SRGLetterboxView.h b/Framework/Sources/Views/SRGLetterboxView.h index cad154023..768431ab9 100644 --- a/Framework/Sources/Views/SRGLetterboxView.h +++ b/Framework/Sources/Views/SRGLetterboxView.h @@ -103,7 +103,7 @@ IB_DESIGNABLE * * Calling this method will call the delegate method `-letterboxView:toggleFullScreen:animated:withCompletionHandler:` * - * @param fullscreen YES for full screen + * @param fullScreen YES for full screen * @param animated Whether the transition must be animated * * @discussion If the delegate method `-letterboxView:toggleFullScreen:animated:withCompletionHandler:` is not implemented, no full screen From 8f44b13b23a9f6be3cb356a3264c51baf6e74d70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Tue, 7 Feb 2017 07:54:50 +0100 Subject: [PATCH 026/180] Add test --- Tests/Sources/LetterboxControllerTestCase.m | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Tests/Sources/LetterboxControllerTestCase.m b/Tests/Sources/LetterboxControllerTestCase.m index 6ce7992be..b8a3196a7 100644 --- a/Tests/Sources/LetterboxControllerTestCase.m +++ b/Tests/Sources/LetterboxControllerTestCase.m @@ -46,6 +46,11 @@ - (void)tearDown #pragma mark Tests +- (void)testShortLifetime +{ + __unused SRGLetterboxController *letterboxController = [[SRGLetterboxController alloc] init]; +} + - (void)testPlayURN { From 8ef3572dc0d4b8cbbdc72cf8919e143dd9c690ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Tue, 7 Feb 2017 11:16:28 +0100 Subject: [PATCH 027/180] Refactor service --- Demo/Sources/Application/AppDelegate.m | 2 +- .../SRGLetterboxController+Private.h | 0 .../SRGLetterboxController.h | 0 .../SRGLetterboxController.m | 0 .../Sources/Service/SRGLetterboxService.h | 10 +-- .../Sources/Service/SRGLetterboxService.m | 81 ++++++++++++++++--- SRGLetterbox.xcodeproj/project.pbxproj | 30 ++++--- 7 files changed, 92 insertions(+), 31 deletions(-) rename Framework/Sources/{Service => Controller}/SRGLetterboxController+Private.h (100%) rename Framework/Sources/{Service => Controller}/SRGLetterboxController.h (100%) rename Framework/Sources/{Service => Controller}/SRGLetterboxController.m (100%) diff --git a/Demo/Sources/Application/AppDelegate.m b/Demo/Sources/Application/AppDelegate.m index 5eb2ae400..14f09f30b 100644 --- a/Demo/Sources/Application/AppDelegate.m +++ b/Demo/Sources/Application/AppDelegate.m @@ -53,7 +53,7 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( [[SRGAnalyticsTracker sharedTracker] startWithBusinessUnitIdentifier:SRGAnalyticsBusinessUnitIdentifierTEST comScoreVirtualSite:@"app-test-v" netMetrixIdentifier:@"test"]; - + [SRGLetterboxService sharedService].pictureInPictureDelegate = self; DemosViewController *demosViewController = [[DemosViewController alloc] init]; diff --git a/Framework/Sources/Service/SRGLetterboxController+Private.h b/Framework/Sources/Controller/SRGLetterboxController+Private.h similarity index 100% rename from Framework/Sources/Service/SRGLetterboxController+Private.h rename to Framework/Sources/Controller/SRGLetterboxController+Private.h diff --git a/Framework/Sources/Service/SRGLetterboxController.h b/Framework/Sources/Controller/SRGLetterboxController.h similarity index 100% rename from Framework/Sources/Service/SRGLetterboxController.h rename to Framework/Sources/Controller/SRGLetterboxController.h diff --git a/Framework/Sources/Service/SRGLetterboxController.m b/Framework/Sources/Controller/SRGLetterboxController.m similarity index 100% rename from Framework/Sources/Service/SRGLetterboxController.m rename to Framework/Sources/Controller/SRGLetterboxController.m diff --git a/Framework/Sources/Service/SRGLetterboxService.h b/Framework/Sources/Service/SRGLetterboxService.h index d230ab6aa..7480782e9 100644 --- a/Framework/Sources/Service/SRGLetterboxService.h +++ b/Framework/Sources/Service/SRGLetterboxService.h @@ -64,13 +64,7 @@ NS_ASSUME_NONNULL_BEGIN /** * The controller responsible for main playback */ -@property (nonatomic, readonly) SRGLetterboxController *controller; - -/** - * Transfers playback from the specified existing controller to the service. The service media player controller - * is replaced - */ -- (void)resumeFromController:(SRGLetterboxController *)controller; +@property (nonatomic, nullable) SRGLetterboxController *controller; @end @@ -83,7 +77,7 @@ NS_ASSUME_NONNULL_BEGIN /** * Picture in picture delegate. Picture in picture won't be available if not set */ -@property (nonatomic, weak) id pictureInPictureDelegate; +@property (nonatomic, weak, nullable) id pictureInPictureDelegate; /** * Return YES iff picture in picture is active diff --git a/Framework/Sources/Service/SRGLetterboxService.m b/Framework/Sources/Service/SRGLetterboxService.m index 62b27db99..ac768db11 100644 --- a/Framework/Sources/Service/SRGLetterboxService.m +++ b/Framework/Sources/Service/SRGLetterboxService.m @@ -9,10 +9,13 @@ #import "SRGLetterboxController+Private.h" #import "UIDevice+SRGLetterbox.h" +#import #import #import #import +static void *s_kvoContext = &s_kvoContext; + __attribute__((constructor)) static void SRGLetterboxServiceInit(void) { // Ignore in test bundles or when compiling for Interface Builder rendering (since cannot be set for them) @@ -33,8 +36,6 @@ @interface SRGLetterboxService () -@property (nonatomic) SRGLetterboxController *controller; - @property (nonatomic, weak) id periodicTimeObserver; @property (nonatomic, weak) id pictureInPictureDelegate; @@ -63,8 +64,6 @@ + (SRGLetterboxService *)sharedService - (instancetype)init { if (self = [super init]) { - self.controller = [[SRGLetterboxController alloc] init]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidEnterBackground:) name:UIApplicationDidEnterBackgroundNotification @@ -81,11 +80,78 @@ - (instancetype)init - (void)dealloc { + self.controller = nil; + [[NSNotificationCenter defaultCenter] removeObserver:self]; } #pragma mark Getters and setters +- (void)setController:(SRGLetterboxController *)controller +{ + if (_controller) { + SRGMediaPlayerController *previousMediaPlayerController = _controller.mediaPlayerController; + + previousMediaPlayerController.playerConfigurationBlock = ^(AVPlayer *player) { + player.allowsExternalPlayback = NO; + }; + [previousMediaPlayerController reloadPlayerConfiguration]; + + [previousMediaPlayerController removeObserver:self + forKeyPath:@keypath(previousMediaPlayerController.pictureInPictureController.pictureInPictureActive) + context:s_kvoContext]; + + [[NSNotificationCenter defaultCenter] removeObserver:self + name:SRGMediaPlayerPlaybackStateDidChangeNotification + object:previousMediaPlayerController]; + + [previousMediaPlayerController removePeriodicTimeObserver:self.periodicTimeObserver]; + } + + _controller = controller; + + [self updateRemoteCommandCenter]; + [self updateNowPlayingInformation]; + [self updateNowPlayingPlaybackInformation]; + + if (controller) { + SRGMediaPlayerController *mediaPlayerController = controller.mediaPlayerController; + + mediaPlayerController.playerConfigurationBlock = ^(AVPlayer *player) { + player.allowsExternalPlayback = YES; + player.usesExternalPlaybackWhileExternalScreenIsActive = ! self.mirroredOnExternalScreen; + + // Only update the audio session if needed to avoid audio hiccups + NSString *mode = (self.controller.media.mediaType == SRGMediaTypeVideo) ? AVAudioSessionModeMoviePlayback : AVAudioSessionModeDefault; + if (! [[AVAudioSession sharedInstance].mode isEqualToString:mode]) { + [[AVAudioSession sharedInstance] setMode:mode error:NULL]; + } + }; + + [mediaPlayerController addObserver:self + forKeyPath:@keypath(mediaPlayerController.pictureInPictureController.pictureInPictureActive) + options:0 + context:s_kvoContext]; + + @weakify(self) + mediaPlayerController.pictureInPictureControllerCreationBlock = ^(AVPictureInPictureController *pictureInPictureController) { + @strongify(self) + + pictureInPictureController.delegate = self; + }; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(playbackStateDidChange:) + name:SRGMediaPlayerPlaybackStateDidChangeNotification + object:mediaPlayerController]; + + self.periodicTimeObserver = [mediaPlayerController addPeriodicTimeObserverForInterval:CMTimeMakeWithSeconds(1., NSEC_PER_SEC) queue:NULL usingBlock:^(CMTime time) { + [self updateNowPlayingPlaybackInformation]; + [self updateRemoteCommandCenter]; + }]; + } +} + - (void)setMirroredOnExternalScreen:(BOOL)mirroredOnExternalScreen { if (_mirroredOnExternalScreen == mirroredOnExternalScreen) { @@ -101,13 +167,6 @@ - (BOOL)isPictureInPictureActive return self.controller.mediaPlayerController.pictureInPictureController.pictureInPictureActive; } -#pragma mark Main playback management - -- (void)resumeFromController:(SRGLetterboxController *)controller -{ - -} - #pragma mark Control center and lock screen integration - (void)setupRemoteCommandCenter diff --git a/SRGLetterbox.xcodeproj/project.pbxproj b/SRGLetterbox.xcodeproj/project.pbxproj index 5294a8467..194aa5590 100644 --- a/SRGLetterbox.xcodeproj/project.pbxproj +++ b/SRGLetterbox.xcodeproj/project.pbxproj @@ -9,8 +9,6 @@ /* Begin PBXBuildFile section */ 081322F31E42503D00639174 /* HockeySDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 081322F21E42503D00639174 /* HockeySDK.framework */; }; 081322F41E42503D00639174 /* HockeySDK.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 081322F21E42503D00639174 /* HockeySDK.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 087EB60C1E290A14005DD80B /* SRGLetterboxService.h in Headers */ = {isa = PBXBuildFile; fileRef = 087EB60A1E290A14005DD80B /* SRGLetterboxService.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 087EB60D1E290A14005DD80B /* SRGLetterboxService.m in Sources */ = {isa = PBXBuildFile; fileRef = 087EB60B1E290A14005DD80B /* SRGLetterboxService.m */; }; 087EB6101E290AC4005DD80B /* SRGLetterboxController.h in Headers */ = {isa = PBXBuildFile; fileRef = 087EB60E1E290AC4005DD80B /* SRGLetterboxController.h */; settings = {ATTRIBUTES = (Public, ); }; }; 087EB6111E290AC4005DD80B /* SRGLetterboxController.m in Sources */ = {isa = PBXBuildFile; fileRef = 087EB60F1E290AC4005DD80B /* SRGLetterboxController.m */; }; 087EB61C1E291203005DD80B /* UIDevice+SRGLetterbox.h in Headers */ = {isa = PBXBuildFile; fileRef = 087EB61A1E291203005DD80B /* UIDevice+SRGLetterbox.h */; }; @@ -117,6 +115,8 @@ 6FAB3B9C1E291A9700CC2197 /* YYWebImage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6FAB3B9A1E291A8500CC2197 /* YYWebImage.framework */; }; 6FAB3B9D1E291A9700CC2197 /* YYWebImage.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 6FAB3B9A1E291A8500CC2197 /* YYWebImage.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 6FAB3B9E1E291A9E00CC2197 /* YYWebImage.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 6FAB3B9A1E291A8500CC2197 /* YYWebImage.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 6FB97FCC1E49D7240014C4C2 /* SRGLetterboxService.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FB97FCA1E49D7240014C4C2 /* SRGLetterboxService.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6FB97FCD1E49D7240014C4C2 /* SRGLetterboxService.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FB97FCB1E49D7240014C4C2 /* SRGLetterboxService.m */; }; 6FD30A011E3A0CA2005E66B6 /* ASValueTrackingSlider.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08B934BE1E390C2400CFE85A /* ASValueTrackingSlider.framework */; }; 6FD30A021E3A0CA2005E66B6 /* ASValueTrackingSlider.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 08B934BE1E390C2400CFE85A /* ASValueTrackingSlider.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 6FD30A031E3A0D33005E66B6 /* ASValueTrackingSlider.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08B934BE1E390C2400CFE85A /* ASValueTrackingSlider.framework */; }; @@ -234,8 +234,6 @@ /* Begin PBXFileReference section */ 081322F21E42503D00639174 /* HockeySDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = HockeySDK.framework; path = Carthage/Build/iOS/HockeySDK.framework; sourceTree = ""; }; - 087EB60A1E290A14005DD80B /* SRGLetterboxService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SRGLetterboxService.h; sourceTree = ""; }; - 087EB60B1E290A14005DD80B /* SRGLetterboxService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SRGLetterboxService.m; sourceTree = ""; }; 087EB60E1E290AC4005DD80B /* SRGLetterboxController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SRGLetterboxController.h; sourceTree = ""; }; 087EB60F1E290AC4005DD80B /* SRGLetterboxController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SRGLetterboxController.m; sourceTree = ""; }; 087EB61A1E291203005DD80B /* UIDevice+SRGLetterbox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIDevice+SRGLetterbox.h"; sourceTree = ""; }; @@ -302,6 +300,8 @@ 6FAB3B8B1E29066300CC2197 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 6FAB3B8D1E29066300CC2197 /* LetterboxControllerTestCase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LetterboxControllerTestCase.m; sourceTree = ""; }; 6FAB3B9A1E291A8500CC2197 /* YYWebImage.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = YYWebImage.framework; path = Carthage/Build/iOS/YYWebImage.framework; sourceTree = ""; }; + 6FB97FCA1E49D7240014C4C2 /* SRGLetterboxService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SRGLetterboxService.h; sourceTree = ""; }; + 6FB97FCB1E49D7240014C4C2 /* SRGLetterboxService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SRGLetterboxService.m; sourceTree = ""; }; 6FD9BA231E2FB36B0013CC97 /* SRGLetterboxError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SRGLetterboxError.h; sourceTree = ""; }; 6FD9BA241E2FB36B0013CC97 /* SRGLetterboxError.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SRGLetterboxError.m; sourceTree = ""; }; 6FD9BA2B1E2FBC770013CC97 /* TrackerSingletonSetup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TrackerSingletonSetup.m; sourceTree = ""; }; @@ -382,16 +382,14 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 087EB6091E290A14005DD80B /* Service */ = { + 087EB6091E290A14005DD80B /* Controller */ = { isa = PBXGroup; children = ( 087EB60E1E290AC4005DD80B /* SRGLetterboxController.h */, 087EB60F1E290AC4005DD80B /* SRGLetterboxController.m */, 6F721E141E41BAD8003B698D /* SRGLetterboxController+Private.h */, - 087EB60A1E290A14005DD80B /* SRGLetterboxService.h */, - 087EB60B1E290A14005DD80B /* SRGLetterboxService.m */, ); - path = Service; + path = Controller; sourceTree = ""; }; 08FA0CB91E2E585B000C94EF /* Resources */ = { @@ -418,10 +416,11 @@ 6F042D241E28E2D100CFD89B /* Sources */ = { isa = PBXGroup; children = ( + 087EB6091E290A14005DD80B /* Controller */, 6F8C35AE1E3A30920011E81E /* Designables */, 6F48559D1E3A311C00B0141C /* Externals */, 6F042D281E28F70500CFD89B /* Helpers */, - 087EB6091E290A14005DD80B /* Service */, + 6FB97FC91E49D7240014C4C2 /* Service */, 6F042D251E28E2D100CFD89B /* SRGLetterbox.h */, 6FAB3B041E28F7FE00CC2197 /* SRGLetterbox.m */, 6FD9BA231E2FB36B0013CC97 /* SRGLetterboxError.h */, @@ -568,6 +567,15 @@ path = Sources; sourceTree = ""; }; + 6FB97FC91E49D7240014C4C2 /* Service */ = { + isa = PBXGroup; + children = ( + 6FB97FCA1E49D7240014C4C2 /* SRGLetterboxService.h */, + 6FB97FCB1E49D7240014C4C2 /* SRGLetterboxService.m */, + ); + path = Service; + sourceTree = ""; + }; 6FD9BA2A1E2FBC770013CC97 /* Helpers */ = { isa = PBXGroup; children = ( @@ -608,8 +616,8 @@ 087EB61C1E291203005DD80B /* UIDevice+SRGLetterbox.h in Headers */, 087EB6101E290AC4005DD80B /* SRGLetterboxController.h in Headers */, 08FA0CF81E2F6DDF000C94EF /* UIImage+SRGLetterbox.h in Headers */, - 087EB60C1E290A14005DD80B /* SRGLetterboxService.h in Headers */, 08FA0CC21E2E72E7000C94EF /* UIFont+SRGLetterbox.h in Headers */, + 6FB97FCC1E49D7240014C4C2 /* SRGLetterboxService.h in Headers */, 08FA0CC61E2E73D7000C94EF /* UIFontDescriptor+SRGLetterbox.h in Headers */, 6F042D2B1E28F70500CFD89B /* NSBundle+SRGLetterbox.h in Headers */, 08FA0CB71E2E45CD000C94EF /* SRGControlsStackView.h in Headers */, @@ -804,10 +812,10 @@ 08FA0CF51E2F6BCC000C94EF /* UIImageView+SRGLetterbox.m in Sources */, 6F48559F1E3A311C00B0141C /* SRGMediaPlayerDesignables.m in Sources */, 087EB61D1E291203005DD80B /* UIDevice+SRGLetterbox.m in Sources */, + 6FB97FCD1E49D7240014C4C2 /* SRGLetterboxService.m in Sources */, 08FA0CF91E2F6DDF000C94EF /* UIImage+SRGLetterbox.m in Sources */, 08FA0CB81E2E45CD000C94EF /* SRGControlsStackView.m in Sources */, 6FAB3B051E28F7FE00CC2197 /* SRGLetterbox.m in Sources */, - 087EB60D1E290A14005DD80B /* SRGLetterboxService.m in Sources */, 6FD9BA261E2FB36B0013CC97 /* SRGLetterboxError.m in Sources */, 08FA0D341E31335D000C94EF /* SRGDataProvider+SRGLetterbox.m in Sources */, 6F042D2C1E28F70500CFD89B /* NSBundle+SRGLetterbox.m in Sources */, From a140c6e7b3bb978db89396039b8efb6acd9286c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Tue, 7 Feb 2017 12:01:25 +0100 Subject: [PATCH 028/180] Add button to use current controller as a service --- .../Sources/Demos/ModalPlayerViewController.m | 23 +++++++++++-------- .../ModalPlayerViewController.storyboard | 12 +++++++++- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/Demo/Sources/Demos/ModalPlayerViewController.m b/Demo/Sources/Demos/ModalPlayerViewController.m index ecb1ad435..0ae398fbb 100644 --- a/Demo/Sources/Demos/ModalPlayerViewController.m +++ b/Demo/Sources/Demos/ModalPlayerViewController.m @@ -82,6 +82,18 @@ - (void)viewDidDisappear:(BOOL)animated } } +#pragma mark Status bar + +- (BOOL)prefersStatusBarHidden +{ + return self.wantsFullScreen; +} + +- (UIStatusBarAnimation)preferredStatusBarUpdateAnimation +{ + return UIStatusBarAnimationSlide; +} + #pragma mark SRGLetterboxViewDelegate protocol - (void)letterboxViewWillAnimateUserInterface:(SRGLetterboxView *)letterboxView @@ -172,16 +184,9 @@ - (IBAction)fullScreen:(id)sender [self.letterboxView setFullScreen:YES animated:YES]; } -#pragma mark Status bar - -- (BOOL)prefersStatusBarHidden -{ - return self.wantsFullScreen; -} - -- (UIStatusBarAnimation)preferredStatusBarUpdateAnimation +- (IBAction)useAsService:(id)sender { - return UIStatusBarAnimationSlide; + [SRGLetterboxService sharedService].controller = self.letterboxController; } @end diff --git a/Demo/Sources/Demos/ModalPlayerViewController.storyboard b/Demo/Sources/Demos/ModalPlayerViewController.storyboard index d9f3c72cd..f20924a4e 100644 --- a/Demo/Sources/Demos/ModalPlayerViewController.storyboard +++ b/Demo/Sources/Demos/ModalPlayerViewController.storyboard @@ -74,11 +74,18 @@ + @@ -86,6 +93,7 @@ + @@ -93,12 +101,14 @@ + + From 57c43fd5a0741269915f73d62866468233939fee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Tue, 7 Feb 2017 12:01:35 +0100 Subject: [PATCH 029/180] Add missing KVO code leading to a crash --- .../Sources/Service/SRGLetterboxService.m | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/Framework/Sources/Service/SRGLetterboxService.m b/Framework/Sources/Service/SRGLetterboxService.m index ac768db11..5fea63aa3 100644 --- a/Framework/Sources/Service/SRGLetterboxService.m +++ b/Framework/Sources/Service/SRGLetterboxService.m @@ -347,6 +347,27 @@ - (void)applicationDidBecomeActive:(NSNotification *)notification [self updateRemoteCommandCenter]; } +#pragma mark KVO + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context +{ + if (context == s_kvoContext) { + if ([keyPath isEqualToString:@keypath(SRGMediaPlayerController.new, pictureInPictureController.pictureInPictureActive)]) { + // When enabling Airplay from the control center while picture in picture is active, picture in picture will be + // stopped without the usual restoration and stop delegate methods being called. KVO observe changes and call + // those methods manually + SRGMediaPlayerController *mediaPlayerController = self.controller.mediaPlayerController; + if (mediaPlayerController.player.externalPlaybackActive) { + [self pictureInPictureController:mediaPlayerController.pictureInPictureController restoreUserInterfaceForPictureInPictureStopWithCompletionHandler:^(BOOL restored) {}]; + [self pictureInPictureControllerDidStopPictureInPicture:mediaPlayerController.pictureInPictureController]; + } + } + } + else { + [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; + } +} + #pragma mark Description - (NSString *)description From 0fa8c3657a465c04a4885e47e055da36f068b5ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Tue, 7 Feb 2017 13:44:10 +0100 Subject: [PATCH 030/180] Hide picture in picture button if the controller is not the main one --- .../Sources/Service/SRGLetterboxService.h | 5 +++ .../Sources/Service/SRGLetterboxService.m | 22 +++++++++++++ Framework/Sources/Views/SRGLetterboxView.m | 32 ++++++++++++++++++- 3 files changed, 58 insertions(+), 1 deletion(-) diff --git a/Framework/Sources/Service/SRGLetterboxService.h b/Framework/Sources/Service/SRGLetterboxService.h index 7480782e9..e0f3f957a 100644 --- a/Framework/Sources/Service/SRGLetterboxService.h +++ b/Framework/Sources/Service/SRGLetterboxService.h @@ -79,6 +79,11 @@ NS_ASSUME_NONNULL_BEGIN */ @property (nonatomic, weak, nullable) id pictureInPictureDelegate; +/** + * Return YES iff picture in picture is possible + */ +@property (nonatomic, readonly, getter=isPictureInPicturePossible) BOOL pictureInPicturePossible; + /** * Return YES iff picture in picture is active */ diff --git a/Framework/Sources/Service/SRGLetterboxService.m b/Framework/Sources/Service/SRGLetterboxService.m index 5fea63aa3..16e6dcff5 100644 --- a/Framework/Sources/Service/SRGLetterboxService.m +++ b/Framework/Sources/Service/SRGLetterboxService.m @@ -108,7 +108,9 @@ - (void)setController:(SRGLetterboxController *)controller [previousMediaPlayerController removePeriodicTimeObserver:self.periodicTimeObserver]; } + [self willChangeValueForKey:@keypath(self.controller)]; _controller = controller; + [self didChangeValueForKey:@keypath(self.controller)]; [self updateRemoteCommandCenter]; [self updateNowPlayingInformation]; @@ -162,6 +164,16 @@ - (void)setMirroredOnExternalScreen:(BOOL)mirroredOnExternalScreen [self.controller.mediaPlayerController reloadPlayerConfiguration]; } +- (BOOL)isPictureInPicturePossible +{ + if (self.pictureInPictureDelegate) { + return self.controller.mediaPlayerController.pictureInPictureController.pictureInPicturePossible; + } + else { + return NO; + } +} + - (BOOL)isPictureInPictureActive { return self.controller.mediaPlayerController.pictureInPictureController.pictureInPictureActive; @@ -349,6 +361,16 @@ - (void)applicationDidBecomeActive:(NSNotification *)notification #pragma mark KVO ++ (BOOL)automaticallyNotifiesObserversForKey:(NSString *)key +{ + if ([key isEqualToString:@keypath(SRGLetterboxService.new, controller)]) { + return NO; + } + else { + return [super automaticallyNotifiesObserversForKey:key]; + } +} + - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if (context == s_kvoContext) { diff --git a/Framework/Sources/Views/SRGLetterboxView.m b/Framework/Sources/Views/SRGLetterboxView.m index 385ba5a1e..3f018df0f 100644 --- a/Framework/Sources/Views/SRGLetterboxView.m +++ b/Framework/Sources/Views/SRGLetterboxView.m @@ -18,6 +18,8 @@ #import #import +static void *s_kvoContext = &s_kvoContext; + static void commonInit(SRGLetterboxView *self); @interface SRGLetterboxView () @@ -166,6 +168,11 @@ - (void)willMoveToWindow:(UIWindow *)newWindow selector:@selector(screenDidDisconnect:) name:UIScreenDidDisconnectNotification object:nil]; + + [[SRGLetterboxService sharedService] addObserver:self + forKeyPath:@keypath(SRGLetterboxService.new, controller) + options:0 + context:s_kvoContext]; } else { self.inactivityTimer = nil; // Invalidate timer @@ -185,6 +192,10 @@ - (void)willMoveToWindow:(UIWindow *)newWindow [[NSNotificationCenter defaultCenter] removeObserver:self name:UIScreenDidDisconnectNotification object:nil]; + + [[SRGLetterboxService sharedService] removeObserver:self + forKeyPath:@keypath(SRGLetterboxService.new, controller) + context:s_kvoContext]; } } @@ -456,6 +467,11 @@ - (void)updateUserInterfaceTogglabilityForAirplayAnimated:(BOOL)animated } } +- (void)updateUserInterfaceForPictureInPicture +{ + self.pictureInPictureButton.hidden = (self.controller != [SRGLetterboxService sharedService].controller) || ! [SRGLetterboxService sharedService].pictureInPicturePossible; +} + - (void)resetInactivityTimer { self.inactivityTimer = [NSTimer scheduledTimerWithTimeInterval:4. target:self selector:@selector(hideInterface:) userInfo:nil repeats:NO]; @@ -598,7 +614,7 @@ - (void)playbackStateDidChange:(NSNotification *)notification - (void)pictureInPictureStateDidChange:(NSNotification *)notification { - self.pictureInPictureButton.hidden = ([SRGLetterboxService sharedService].pictureInPictureDelegate == nil); + [self updateUserInterfaceForPictureInPicture]; } - (void)applicationDidBecomeActive:(NSNotification *)notification @@ -623,6 +639,20 @@ - (void)screenDidDisconnect:(NSNotification *)notification [self updateInterfaceAnimated:YES]; } +#pragma mark KVO + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context +{ + if (context == s_kvoContext) { + if ([keyPath isEqualToString:@keypath(SRGLetterboxService.new, controller)]) { + [self updateUserInterfaceForPictureInPicture]; + } + } + else { + [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; + } +} + @end static void commonInit(SRGLetterboxView *self) From b3618aa2cc1d14be8bbc74c9f5911d8b5192b349 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Tue, 7 Feb 2017 13:53:36 +0100 Subject: [PATCH 031/180] Update picture in picture delegate when switching the main player controller --- .../Sources/Service/SRGLetterboxService.m | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/Framework/Sources/Service/SRGLetterboxService.m b/Framework/Sources/Service/SRGLetterboxService.m index 16e6dcff5..aa731feca 100644 --- a/Framework/Sources/Service/SRGLetterboxService.m +++ b/Framework/Sources/Service/SRGLetterboxService.m @@ -91,6 +91,7 @@ - (void)setController:(SRGLetterboxController *)controller { if (_controller) { SRGMediaPlayerController *previousMediaPlayerController = _controller.mediaPlayerController; + previousMediaPlayerController.pictureInPictureController.delegate = nil; previousMediaPlayerController.playerConfigurationBlock = ^(AVPlayer *player) { player.allowsExternalPlayback = NO; @@ -135,12 +136,17 @@ - (void)setController:(SRGLetterboxController *)controller options:0 context:s_kvoContext]; - @weakify(self) - mediaPlayerController.pictureInPictureControllerCreationBlock = ^(AVPictureInPictureController *pictureInPictureController) { - @strongify(self) - - pictureInPictureController.delegate = self; - }; + if (mediaPlayerController.pictureInPictureController) { + mediaPlayerController.pictureInPictureController.delegate = self; + } + else { + @weakify(self) + mediaPlayerController.pictureInPictureControllerCreationBlock = ^(AVPictureInPictureController *pictureInPictureController) { + @strongify(self) + + pictureInPictureController.delegate = self; + }; + } [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playbackStateDidChange:) From 537323ef7a414540c30293fa346c3ba2815f14e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Tue, 7 Feb 2017 14:05:41 +0100 Subject: [PATCH 032/180] Do not reset playback when switching to picture in picture --- Demo/Sources/Demos/ModalPlayerViewController.m | 4 +++- Demo/Sources/Demos/SimplePlayerViewController.m | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Demo/Sources/Demos/ModalPlayerViewController.m b/Demo/Sources/Demos/ModalPlayerViewController.m index 0ae398fbb..1fa776a15 100644 --- a/Demo/Sources/Demos/ModalPlayerViewController.m +++ b/Demo/Sources/Demos/ModalPlayerViewController.m @@ -78,7 +78,9 @@ - (void)viewDidDisappear:(BOOL)animated [super viewDidDisappear:animated]; if ([self isMovingFromParentViewController] || [self isBeingDismissed]) { - [self.letterboxController reset]; + if (! [SRGLetterboxService sharedService].pictureInPictureActive) { + [self.letterboxController reset]; + } } } diff --git a/Demo/Sources/Demos/SimplePlayerViewController.m b/Demo/Sources/Demos/SimplePlayerViewController.m index 8ff679602..b9273f197 100644 --- a/Demo/Sources/Demos/SimplePlayerViewController.m +++ b/Demo/Sources/Demos/SimplePlayerViewController.m @@ -51,7 +51,9 @@ - (void)viewDidDisappear:(BOOL)animated [super viewDidDisappear:animated]; if ([self isMovingFromParentViewController] || [self isBeingDismissed]) { - [self.letterboxController reset]; + if (! [SRGLetterboxService sharedService].pictureInPictureActive) { + [self.letterboxController reset]; + } } } From 561923abb1daacce6426f25d72da732485dc8402 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Tue, 7 Feb 2017 14:50:32 +0100 Subject: [PATCH 033/180] Retain top object --- Demo/Sources/Demos/ModalPlayerViewController.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Demo/Sources/Demos/ModalPlayerViewController.m b/Demo/Sources/Demos/ModalPlayerViewController.m index 1fa776a15..868b3266c 100644 --- a/Demo/Sources/Demos/ModalPlayerViewController.m +++ b/Demo/Sources/Demos/ModalPlayerViewController.m @@ -19,7 +19,7 @@ @interface ModalPlayerViewController () @property (nonatomic, weak) IBOutlet SRGLetterboxView *letterboxView; @property (nonatomic, weak) IBOutlet UIButton *closeButton; -@property (nonatomic, weak) IBOutlet SRGLetterboxController *letterboxController; +@property (nonatomic) IBOutlet SRGLetterboxController *letterboxController; // Switching to and from full-screen is made by adjusting the priority / constance of a constraint of the letterbox @property (nonatomic, weak) IBOutlet NSLayoutConstraint *letterboxTopConstraint; From e7725608941fc4688135befe96461daeb731b2cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Wed, 8 Feb 2017 09:13:09 +0100 Subject: [PATCH 034/180] Add MAKVONotificationCenter. Upgrade other libraries for KVO stability fixes --- Cartfile | 1 + Cartfile.resolved | 5 +++-- README.md | 1 + SRGLetterbox.xcodeproj/project.pbxproj | 12 ++++++++++++ 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/Cartfile b/Cartfile index fa08f4b87..3e990dd8c 100644 --- a/Cartfile +++ b/Cartfile @@ -2,6 +2,7 @@ github "ashaman/libextobjc" "e24f2be3af2cf7fc88a78295f116ef98d0832bcf" github "ibireme/YYWebImage" ~> 1.0.4 github "SnapKit/Masonry" ~> 1.0.2 github "SRGSSR/ASValueTrackingSlider" "840137273ef2b66abfd3db304e4ac7c93ab31568" +github "SRGSSR/MAKVONotificationCenter" "4a127e52997889729286510103f7e27100223730" github "SRGSSR/FXReachability" "3cad7998f717145c90ff97eef552053d66063339" github "SRGSSR/srganalytics-ios" "develop" github "SRGSSR/srgdataprovider-ios" "develop" diff --git a/Cartfile.resolved b/Cartfile.resolved index 0b29c9104..3ff59c1d3 100644 --- a/Cartfile.resolved +++ b/Cartfile.resolved @@ -1,12 +1,13 @@ github "comScore/ComScore-iOS-SDK" "92f34897cd7659d56bb5a3e9e85b808cf3758bda" github "SRGSSR/FXReachability" "3cad7998f717145c90ff97eef552053d66063339" github "bitstadium/HockeySDK-iOS" "4.1.3" +github "SRGSSR/MAKVONotificationCenter" "4a127e52997889729286510103f7e27100223730" github "Mantle/Mantle" "2.1.0" github "SnapKit/Masonry" "v1.0.2" github "ibireme/YYWebImage" "1.0.5" github "ashaman/libextobjc" "e24f2be3af2cf7fc88a78295f116ef98d0832bcf" github "SRGSSR/srglogger-ios" "9a911766b46432d9a21d8b04fd4325b537b6e7b2" -github "SRGSSR/SRGMediaPlayer-iOS" "7f14810089e69cf01494fc77dc659dc44895487d" -github "SRGSSR/ASValueTrackingSlider" "840137273ef2b66abfd3db304e4ac7c93ab31568" +github "SRGSSR/SRGMediaPlayer-iOS" "fe5a5acfcc61c01629347d6c67ac959ebd8e0e78" github "SRGSSR/srgdataprovider-ios" "ce6f3f1bf3a90b41382708dba30c30f6ff96d79a" +github "SRGSSR/ASValueTrackingSlider" "840137273ef2b66abfd3db304e4ac7c93ab31568" github "SRGSSR/srganalytics-ios" "ea545eac25d20761e8a32ec0fa7a927d90c4691c" diff --git a/README.md b/README.md index da683328f..0d6f14b70 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,7 @@ Then run `carthage update --platform iOS` to update the dependencies. You will n * `ComScore`: comScore framework * `FXReachability`: A reachability framework * `libextobjc`: A utility framework + * `MAKVONotificationCenter`: A safe KVO framework * `Mantle`: The framework used to parse the data * `Masonry`: An autolayout framework * `SRGAnalytics`: The main analytics framework diff --git a/SRGLetterbox.xcodeproj/project.pbxproj b/SRGLetterbox.xcodeproj/project.pbxproj index 194aa5590..4ec533e5e 100644 --- a/SRGLetterbox.xcodeproj/project.pbxproj +++ b/SRGLetterbox.xcodeproj/project.pbxproj @@ -117,6 +117,11 @@ 6FAB3B9E1E291A9E00CC2197 /* YYWebImage.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 6FAB3B9A1E291A8500CC2197 /* YYWebImage.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 6FB97FCC1E49D7240014C4C2 /* SRGLetterboxService.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FB97FCA1E49D7240014C4C2 /* SRGLetterboxService.h */; settings = {ATTRIBUTES = (Public, ); }; }; 6FB97FCD1E49D7240014C4C2 /* SRGLetterboxService.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FB97FCB1E49D7240014C4C2 /* SRGLetterboxService.m */; }; + 6FB97FF31E4B09B70014C4C2 /* MAKVONotificationCenter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6FB97FF21E4B09B70014C4C2 /* MAKVONotificationCenter.framework */; }; + 6FB97FF41E4B09BD0014C4C2 /* MAKVONotificationCenter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6FB97FF21E4B09B70014C4C2 /* MAKVONotificationCenter.framework */; }; + 6FB97FF51E4B09BD0014C4C2 /* MAKVONotificationCenter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 6FB97FF21E4B09B70014C4C2 /* MAKVONotificationCenter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 6FB97FF61E4B09D70014C4C2 /* MAKVONotificationCenter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6FB97FF21E4B09B70014C4C2 /* MAKVONotificationCenter.framework */; }; + 6FB97FF71E4B09DF0014C4C2 /* MAKVONotificationCenter.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 6FB97FF21E4B09B70014C4C2 /* MAKVONotificationCenter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 6FD30A011E3A0CA2005E66B6 /* ASValueTrackingSlider.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08B934BE1E390C2400CFE85A /* ASValueTrackingSlider.framework */; }; 6FD30A021E3A0CA2005E66B6 /* ASValueTrackingSlider.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 08B934BE1E390C2400CFE85A /* ASValueTrackingSlider.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 6FD30A031E3A0D33005E66B6 /* ASValueTrackingSlider.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08B934BE1E390C2400CFE85A /* ASValueTrackingSlider.framework */; }; @@ -190,6 +195,7 @@ dstSubfolderSpec = 10; files = ( 6FAB3B721E2905CA00CC2197 /* SRGAnalytics_MediaPlayer.framework in Embed Frameworks */, + 6FB97FF51E4B09BD0014C4C2 /* MAKVONotificationCenter.framework in Embed Frameworks */, 6FAB3B651E2905B400CC2197 /* SRGLetterbox.framework in Embed Frameworks */, 08FA0CAB1E2E32D6000C94EF /* Masonry.framework in Embed Frameworks */, 6FAB3B781E2905CA00CC2197 /* SRGLogger.framework in Embed Frameworks */, @@ -214,6 +220,7 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( + 6FB97FF71E4B09DF0014C4C2 /* MAKVONotificationCenter.framework in CopyFiles */, 08B934C11E390C6100CFE85A /* ASValueTrackingSlider.framework in CopyFiles */, 6FD9BA221E2FB2220013CC97 /* Masonry.framework in CopyFiles */, 6FE655DC1E2CA453000033D4 /* SRGLetterbox.framework in CopyFiles */, @@ -302,6 +309,7 @@ 6FAB3B9A1E291A8500CC2197 /* YYWebImage.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = YYWebImage.framework; path = Carthage/Build/iOS/YYWebImage.framework; sourceTree = ""; }; 6FB97FCA1E49D7240014C4C2 /* SRGLetterboxService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SRGLetterboxService.h; sourceTree = ""; }; 6FB97FCB1E49D7240014C4C2 /* SRGLetterboxService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SRGLetterboxService.m; sourceTree = ""; }; + 6FB97FF21E4B09B70014C4C2 /* MAKVONotificationCenter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MAKVONotificationCenter.framework; path = Carthage/Build/iOS/MAKVONotificationCenter.framework; sourceTree = ""; }; 6FD9BA231E2FB36B0013CC97 /* SRGLetterboxError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SRGLetterboxError.h; sourceTree = ""; }; 6FD9BA241E2FB36B0013CC97 /* SRGLetterboxError.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SRGLetterboxError.m; sourceTree = ""; }; 6FD9BA2B1E2FBC770013CC97 /* TrackerSingletonSetup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TrackerSingletonSetup.m; sourceTree = ""; }; @@ -328,6 +336,7 @@ 6FAB3B791E2905CA00CC2197 /* SRGMediaPlayer.framework in Frameworks */, 6FAB3B9C1E291A9700CC2197 /* YYWebImage.framework in Frameworks */, 6FAB3B6F1E2905CA00CC2197 /* SRGAnalytics_DataProvider.framework in Frameworks */, + 6FB97FF41E4B09BD0014C4C2 /* MAKVONotificationCenter.framework in Frameworks */, 08FA0D241E30F954000C94EF /* FXReachability.framework in Frameworks */, 6FAB3B6B1E2905CA00CC2197 /* libextobjc.framework in Frameworks */, 08FA0D221E30F92F000C94EF /* FXReachability.framework in Frameworks */, @@ -341,6 +350,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 6FB97FF61E4B09D70014C4C2 /* MAKVONotificationCenter.framework in Frameworks */, 6FD30A031E3A0D33005E66B6 /* ASValueTrackingSlider.framework in Frameworks */, 6FD9BA211E2FB2190013CC97 /* Masonry.framework in Frameworks */, 6FE655D21E2CA3F9000033D4 /* ComScore.framework in Frameworks */, @@ -362,6 +372,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 6FB97FF31E4B09B70014C4C2 /* MAKVONotificationCenter.framework in Frameworks */, 08B934BF1E390C2400CFE85A /* ASValueTrackingSlider.framework in Frameworks */, 08FA0CDC1E2E8CCC000C94EF /* CoreText.framework in Frameworks */, 08FA0CA91E2E325F000C94EF /* Masonry.framework in Frameworks */, @@ -481,6 +492,7 @@ 08FA0D1F1E30F820000C94EF /* FXReachability.framework */, 081322F21E42503D00639174 /* HockeySDK.framework */, 6FAB3B081E28FB1400CC2197 /* libextobjc.framework */, + 6FB97FF21E4B09B70014C4C2 /* MAKVONotificationCenter.framework */, 6FAB3B091E28FB1400CC2197 /* Mantle.framework */, 08FA0CA81E2E325F000C94EF /* Masonry.framework */, 6FAB3B0A1E28FB1400CC2197 /* SRGAnalytics_DataProvider.framework */, From 874c08e9f060ccea4e5783a47c3518961358d381 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Wed, 8 Feb 2017 09:19:57 +0100 Subject: [PATCH 035/180] Use safe KVO --- .../Sources/Service/SRGLetterboxService.m | 44 +++++++------------ Framework/Sources/Views/SRGLetterboxView.m | 31 ++++--------- 2 files changed, 24 insertions(+), 51 deletions(-) diff --git a/Framework/Sources/Service/SRGLetterboxService.m b/Framework/Sources/Service/SRGLetterboxService.m index aa731feca..92e57b81f 100644 --- a/Framework/Sources/Service/SRGLetterboxService.m +++ b/Framework/Sources/Service/SRGLetterboxService.m @@ -10,12 +10,11 @@ #import "UIDevice+SRGLetterbox.h" #import +#import #import #import #import -static void *s_kvoContext = &s_kvoContext; - __attribute__((constructor)) static void SRGLetterboxServiceInit(void) { // Ignore in test bundles or when compiling for Interface Builder rendering (since cannot be set for them) @@ -98,9 +97,7 @@ - (void)setController:(SRGLetterboxController *)controller }; [previousMediaPlayerController reloadPlayerConfiguration]; - [previousMediaPlayerController removeObserver:self - forKeyPath:@keypath(previousMediaPlayerController.pictureInPictureController.pictureInPictureActive) - context:s_kvoContext]; + [previousMediaPlayerController removeObserver:self keyPath:@keypath(previousMediaPlayerController.pictureInPictureController.pictureInPictureActive)]; [[NSNotificationCenter defaultCenter] removeObserver:self name:SRGMediaPlayerPlaybackStateDidChangeNotification @@ -131,10 +128,20 @@ - (void)setController:(SRGLetterboxController *)controller } }; - [mediaPlayerController addObserver:self - forKeyPath:@keypath(mediaPlayerController.pictureInPictureController.pictureInPictureActive) - options:0 - context:s_kvoContext]; + @weakify(self) + @weakify(mediaPlayerController) + [mediaPlayerController addObserver:self keyPath:@keypath(mediaPlayerController.pictureInPictureController.pictureInPictureActive) options:0 block:^(MAKVONotification *notification) { + @strongify(self) + @strongify(mediaPlayerController) + + // When enabling Airplay from the control center while picture in picture is active, picture in picture will be + // stopped without the usual restoration and stop delegate methods being called. KVO observe changes and call + // those methods manually + if (mediaPlayerController.player.externalPlaybackActive) { + [self pictureInPictureController:mediaPlayerController.pictureInPictureController restoreUserInterfaceForPictureInPictureStopWithCompletionHandler:^(BOOL restored) {}]; + [self pictureInPictureControllerDidStopPictureInPicture:mediaPlayerController.pictureInPictureController]; + } + }]; if (mediaPlayerController.pictureInPictureController) { mediaPlayerController.pictureInPictureController.delegate = self; @@ -377,25 +384,6 @@ + (BOOL)automaticallyNotifiesObserversForKey:(NSString *)key } } -- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context -{ - if (context == s_kvoContext) { - if ([keyPath isEqualToString:@keypath(SRGMediaPlayerController.new, pictureInPictureController.pictureInPictureActive)]) { - // When enabling Airplay from the control center while picture in picture is active, picture in picture will be - // stopped without the usual restoration and stop delegate methods being called. KVO observe changes and call - // those methods manually - SRGMediaPlayerController *mediaPlayerController = self.controller.mediaPlayerController; - if (mediaPlayerController.player.externalPlaybackActive) { - [self pictureInPictureController:mediaPlayerController.pictureInPictureController restoreUserInterfaceForPictureInPictureStopWithCompletionHandler:^(BOOL restored) {}]; - [self pictureInPictureControllerDidStopPictureInPicture:mediaPlayerController.pictureInPictureController]; - } - } - } - else { - [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; - } -} - #pragma mark Description - (NSString *)description diff --git a/Framework/Sources/Views/SRGLetterboxView.m b/Framework/Sources/Views/SRGLetterboxView.m index 3f018df0f..d1a0c2d81 100644 --- a/Framework/Sources/Views/SRGLetterboxView.m +++ b/Framework/Sources/Views/SRGLetterboxView.m @@ -14,12 +14,11 @@ #import "UIFont+SRGLetterbox.h" #import "UIImageView+SRGLetterbox.h" +#import #import #import #import -static void *s_kvoContext = &s_kvoContext; - static void commonInit(SRGLetterboxView *self); @interface SRGLetterboxView () @@ -169,10 +168,12 @@ - (void)willMoveToWindow:(UIWindow *)newWindow name:UIScreenDidDisconnectNotification object:nil]; - [[SRGLetterboxService sharedService] addObserver:self - forKeyPath:@keypath(SRGLetterboxService.new, controller) - options:0 - context:s_kvoContext]; + @weakify(self) + [[SRGLetterboxService sharedService] addObserver:self keyPath:@keypath(SRGLetterboxService.new, controller) options:0 block:^(MAKVONotification *notification) { + @strongify(self) + + [self updateUserInterfaceForPictureInPicture]; + }]; } else { self.inactivityTimer = nil; // Invalidate timer @@ -193,9 +194,7 @@ - (void)willMoveToWindow:(UIWindow *)newWindow name:UIScreenDidDisconnectNotification object:nil]; - [[SRGLetterboxService sharedService] removeObserver:self - forKeyPath:@keypath(SRGLetterboxService.new, controller) - context:s_kvoContext]; + [[SRGLetterboxService sharedService] removeObserver:self keyPath:@keypath(SRGLetterboxService.new, controller)]; } } @@ -639,20 +638,6 @@ - (void)screenDidDisconnect:(NSNotification *)notification [self updateInterfaceAnimated:YES]; } -#pragma mark KVO - -- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context -{ - if (context == s_kvoContext) { - if ([keyPath isEqualToString:@keypath(SRGLetterboxService.new, controller)]) { - [self updateUserInterfaceForPictureInPicture]; - } - } - else { - [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; - } -} - @end static void commonInit(SRGLetterboxView *self) From dda5acd0b11082df01b8234e7af20f3eb988c30b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Wed, 8 Feb 2017 09:33:48 +0100 Subject: [PATCH 036/180] Fix most retain cycles --- Framework/Sources/Controller/SRGLetterboxController.m | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Framework/Sources/Controller/SRGLetterboxController.m b/Framework/Sources/Controller/SRGLetterboxController.m index 33f762238..9da873f95 100644 --- a/Framework/Sources/Controller/SRGLetterboxController.m +++ b/Framework/Sources/Controller/SRGLetterboxController.m @@ -11,6 +11,7 @@ #import "SRGLetterboxError.h" #import +#import #import #import #import @@ -154,13 +155,18 @@ - (void)playURN:(SRGMediaURN *)URN media:(SRGMedia *)media withPreferredQuality: // Save the preferred quality when restarting after connection loss self.preferredQuality = preferredQuality; + @weakify(self) self.requestQueue = [[SRGRequestQueue alloc] initWithStateChangeBlock:^(BOOL finished, NSError * _Nullable error) { + @strongify(self) + if (finished) { [self reportError:error]; } }]; void (^mediaCompositionCompletionBlock)(SRGMediaComposition * _Nullable, NSError * _Nullable) = ^(SRGMediaComposition * _Nullable mediaComposition, NSError * _Nullable error) { + @strongify(self) + if (error) { [self.requestQueue reportError:error]; return; @@ -168,7 +174,10 @@ - (void)playURN:(SRGMediaURN *)URN media:(SRGMedia *)media withPreferredQuality: [self updateWithURN:nil media:nil mediaComposition:mediaComposition]; + @weakify(self) SRGRequest *playRequest = [self.mediaPlayerController playMediaComposition:mediaComposition withPreferredProtocol:SRGProtocolNone preferredQuality:preferredQuality userInfo:nil resume:NO completionHandler:^(NSError * _Nonnull error) { + @strongify(self) + [self.requestQueue reportError:error]; }]; From 120352bf9a17013a46261b586c1411d9a3193cf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Wed, 8 Feb 2017 11:30:34 +0100 Subject: [PATCH 037/180] Only allow Airplay and picture in picture when the controller is the main one --- Cartfile.resolved | 4 ++-- Framework/Sources/Views/SRGLetterboxView.m | 20 +++++--------------- SRGLetterbox.xcodeproj/project.pbxproj | 2 ++ 3 files changed, 9 insertions(+), 17 deletions(-) diff --git a/Cartfile.resolved b/Cartfile.resolved index 3ff59c1d3..75ba31eab 100644 --- a/Cartfile.resolved +++ b/Cartfile.resolved @@ -7,7 +7,7 @@ github "SnapKit/Masonry" "v1.0.2" github "ibireme/YYWebImage" "1.0.5" github "ashaman/libextobjc" "e24f2be3af2cf7fc88a78295f116ef98d0832bcf" github "SRGSSR/srglogger-ios" "9a911766b46432d9a21d8b04fd4325b537b6e7b2" -github "SRGSSR/SRGMediaPlayer-iOS" "fe5a5acfcc61c01629347d6c67ac959ebd8e0e78" -github "SRGSSR/srgdataprovider-ios" "ce6f3f1bf3a90b41382708dba30c30f6ff96d79a" +github "SRGSSR/SRGMediaPlayer-iOS" "547c99a790b101cbf6c86b03a2099c0a1cb99009" +github "SRGSSR/srgdataprovider-ios" "529b34b0957afdd8d61b5510fb6a11631c9f73de" github "SRGSSR/ASValueTrackingSlider" "840137273ef2b66abfd3db304e4ac7c93ab31568" github "SRGSSR/srganalytics-ios" "ea545eac25d20761e8a32ec0fa7a927d90c4691c" diff --git a/Framework/Sources/Views/SRGLetterboxView.m b/Framework/Sources/Views/SRGLetterboxView.m index d1a0c2d81..cbbcb53bc 100644 --- a/Framework/Sources/Views/SRGLetterboxView.m +++ b/Framework/Sources/Views/SRGLetterboxView.m @@ -144,13 +144,10 @@ - (void)willMoveToWindow:(UIWindow *)newWindow if (newWindow) { [self updateInterfaceAnimated:NO]; + [self updateUserInterfaceForServicePlayback]; [self updateUserInterfaceTogglabilityForAirplayAnimated:NO]; [self reloadData]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(pictureInPictureStateDidChange:) - name:SRGMediaPlayerPictureInPictureStateDidChangeNotification - object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidBecomeActive:) name:UIApplicationDidBecomeActiveNotification @@ -172,15 +169,12 @@ - (void)willMoveToWindow:(UIWindow *)newWindow [[SRGLetterboxService sharedService] addObserver:self keyPath:@keypath(SRGLetterboxService.new, controller) options:0 block:^(MAKVONotification *notification) { @strongify(self) - [self updateUserInterfaceForPictureInPicture]; + [self updateUserInterfaceForServicePlayback]; }]; } else { self.inactivityTimer = nil; // Invalidate timer - [[NSNotificationCenter defaultCenter] removeObserver:self - name:SRGMediaPlayerPictureInPictureStateDidChangeNotification - object:nil]; [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidBecomeActiveNotification object:nil]; @@ -466,9 +460,10 @@ - (void)updateUserInterfaceTogglabilityForAirplayAnimated:(BOOL)animated } } -- (void)updateUserInterfaceForPictureInPicture +- (void)updateUserInterfaceForServicePlayback { - self.pictureInPictureButton.hidden = (self.controller != [SRGLetterboxService sharedService].controller) || ! [SRGLetterboxService sharedService].pictureInPicturePossible; + self.airplayButton.alwaysHidden = (self.controller != [SRGLetterboxService sharedService].controller); + self.pictureInPictureButton.alwaysHidden = (self.controller != [SRGLetterboxService sharedService].controller); } - (void)resetInactivityTimer @@ -611,11 +606,6 @@ - (void)playbackStateDidChange:(NSNotification *)notification [self updateUserInterfaceTogglabilityForAirplayAnimated:YES]; } -- (void)pictureInPictureStateDidChange:(NSNotification *)notification -{ - [self updateUserInterfaceForPictureInPicture]; -} - - (void)applicationDidBecomeActive:(NSNotification *)notification { [self setUserInterfaceHidden:NO animated:YES]; diff --git a/SRGLetterbox.xcodeproj/project.pbxproj b/SRGLetterbox.xcodeproj/project.pbxproj index 4ec533e5e..20253d419 100644 --- a/SRGLetterbox.xcodeproj/project.pbxproj +++ b/SRGLetterbox.xcodeproj/project.pbxproj @@ -122,6 +122,7 @@ 6FB97FF51E4B09BD0014C4C2 /* MAKVONotificationCenter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 6FB97FF21E4B09B70014C4C2 /* MAKVONotificationCenter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 6FB97FF61E4B09D70014C4C2 /* MAKVONotificationCenter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6FB97FF21E4B09B70014C4C2 /* MAKVONotificationCenter.framework */; }; 6FB97FF71E4B09DF0014C4C2 /* MAKVONotificationCenter.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 6FB97FF21E4B09B70014C4C2 /* MAKVONotificationCenter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 6FB97FFA1E4B28940014C4C2 /* MAKVONotificationCenter.framework in Copy Framework Dependencies For Xcode View Rendering */ = {isa = PBXBuildFile; fileRef = 6FB97FF21E4B09B70014C4C2 /* MAKVONotificationCenter.framework */; }; 6FD30A011E3A0CA2005E66B6 /* ASValueTrackingSlider.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08B934BE1E390C2400CFE85A /* ASValueTrackingSlider.framework */; }; 6FD30A021E3A0CA2005E66B6 /* ASValueTrackingSlider.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 08B934BE1E390C2400CFE85A /* ASValueTrackingSlider.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 6FD30A031E3A0D33005E66B6 /* ASValueTrackingSlider.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08B934BE1E390C2400CFE85A /* ASValueTrackingSlider.framework */; }; @@ -171,6 +172,7 @@ dstPath = ""; dstSubfolderSpec = 16; files = ( + 6FB97FFA1E4B28940014C4C2 /* MAKVONotificationCenter.framework in Copy Framework Dependencies For Xcode View Rendering */, 08B934C01E390C3200CFE85A /* ASValueTrackingSlider.framework in Copy Framework Dependencies For Xcode View Rendering */, 08FA0D211E30F84F000C94EF /* FXReachability.framework in Copy Framework Dependencies For Xcode View Rendering */, 6F1F5FDE1E30A6D1000215F3 /* Masonry.framework in Copy Framework Dependencies For Xcode View Rendering */, From 631f224e2fa28131b95d73dd0d4b993a8c768cbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Wed, 8 Feb 2017 11:32:49 +0100 Subject: [PATCH 038/180] Use service for existing demos --- Demo/Sources/Application/AppDelegate.m | 3 +++ Demo/Sources/Demos/ModalPlayerViewController.m | 14 ++++---------- .../Demos/ModalPlayerViewController.storyboard | 13 ------------- Demo/Sources/Demos/SimplePlayerViewController.m | 13 ++++++++++--- .../Demos/SimplePlayerViewController.storyboard | 6 +----- 5 files changed, 18 insertions(+), 31 deletions(-) diff --git a/Demo/Sources/Application/AppDelegate.m b/Demo/Sources/Application/AppDelegate.m index 14f09f30b..4960ab7eb 100644 --- a/Demo/Sources/Application/AppDelegate.m +++ b/Demo/Sources/Application/AppDelegate.m @@ -56,6 +56,9 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( [SRGLetterboxService sharedService].pictureInPictureDelegate = self; + // Use an application-wide controller for main playback + [SRGLetterboxService sharedService].controller = [[SRGLetterboxController alloc] init]; + DemosViewController *demosViewController = [[DemosViewController alloc] init]; self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:demosViewController]; diff --git a/Demo/Sources/Demos/ModalPlayerViewController.m b/Demo/Sources/Demos/ModalPlayerViewController.m index 868b3266c..1f4b3d77c 100644 --- a/Demo/Sources/Demos/ModalPlayerViewController.m +++ b/Demo/Sources/Demos/ModalPlayerViewController.m @@ -19,8 +19,6 @@ @interface ModalPlayerViewController () @property (nonatomic, weak) IBOutlet SRGLetterboxView *letterboxView; @property (nonatomic, weak) IBOutlet UIButton *closeButton; -@property (nonatomic) IBOutlet SRGLetterboxController *letterboxController; - // Switching to and from full-screen is made by adjusting the priority / constance of a constraint of the letterbox @property (nonatomic, weak) IBOutlet NSLayoutConstraint *letterboxTopConstraint; @property (nonatomic, weak) IBOutlet NSLayoutConstraint *letterboxBottomConstraint; @@ -56,6 +54,7 @@ - (void)viewDidLoad { [super viewDidLoad]; + self.letterboxView.controller = [SRGLetterboxService sharedService].controller; [self.letterboxView setUserInterfaceHidden:YES animated:NO togglable:YES]; } @@ -65,10 +64,10 @@ - (void)viewWillAppear:(BOOL)animated if ([self isMovingToParentViewController] || [self isBeingPresented]) { if (self.media) { - [self.letterboxController playMedia:self.media withPreferredQuality:SRGQualityNone]; + [[SRGLetterboxService sharedService].controller playMedia:self.media withPreferredQuality:SRGQualityNone]; } else if (self.URN) { - [self.letterboxController playURN:self.URN withPreferredQuality:SRGQualityNone]; + [[SRGLetterboxService sharedService].controller playURN:self.URN withPreferredQuality:SRGQualityNone]; } } } @@ -79,7 +78,7 @@ - (void)viewDidDisappear:(BOOL)animated if ([self isMovingFromParentViewController] || [self isBeingDismissed]) { if (! [SRGLetterboxService sharedService].pictureInPictureActive) { - [self.letterboxController reset]; + [[SRGLetterboxService sharedService].controller reset]; } } } @@ -186,9 +185,4 @@ - (IBAction)fullScreen:(id)sender [self.letterboxView setFullScreen:YES animated:YES]; } -- (IBAction)useAsService:(id)sender -{ - [SRGLetterboxService sharedService].controller = self.letterboxController; -} - @end diff --git a/Demo/Sources/Demos/ModalPlayerViewController.storyboard b/Demo/Sources/Demos/ModalPlayerViewController.storyboard index f20924a4e..4bef0434d 100644 --- a/Demo/Sources/Demos/ModalPlayerViewController.storyboard +++ b/Demo/Sources/Demos/ModalPlayerViewController.storyboard @@ -28,7 +28,6 @@ - @@ -79,13 +78,6 @@ - @@ -93,7 +85,6 @@ - @@ -101,14 +92,12 @@ - - @@ -125,7 +114,6 @@ - @@ -133,7 +121,6 @@ - diff --git a/Demo/Sources/Demos/SimplePlayerViewController.m b/Demo/Sources/Demos/SimplePlayerViewController.m index b9273f197..0f04203da 100644 --- a/Demo/Sources/Demos/SimplePlayerViewController.m +++ b/Demo/Sources/Demos/SimplePlayerViewController.m @@ -12,7 +12,7 @@ @interface SimplePlayerViewController () @property (nonatomic) SRGMediaURN *URN; -@property (nonatomic) IBOutlet SRGLetterboxController *letterboxController; +@property (nonatomic) IBOutlet SRGLetterboxView *letterboxView; @end @@ -35,13 +35,20 @@ - (instancetype)init #pragma mark View lifecycle +- (void)viewDidLoad +{ + [super viewDidLoad]; + + self.letterboxView.controller = [SRGLetterboxService sharedService].controller; +} + - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; if ([self isMovingToParentViewController] || [self isBeingPresented]) { if (self.URN) { - [self.letterboxController playURN:self.URN withPreferredQuality:SRGQualityNone]; + [[SRGLetterboxService sharedService].controller playURN:self.URN withPreferredQuality:SRGQualityNone]; } } } @@ -52,7 +59,7 @@ - (void)viewDidDisappear:(BOOL)animated if ([self isMovingFromParentViewController] || [self isBeingDismissed]) { if (! [SRGLetterboxService sharedService].pictureInPictureActive) { - [self.letterboxController reset]; + [[SRGLetterboxService sharedService].controller reset]; } } } diff --git a/Demo/Sources/Demos/SimplePlayerViewController.storyboard b/Demo/Sources/Demos/SimplePlayerViewController.storyboard index d1cf973d1..e849ab74c 100644 --- a/Demo/Sources/Demos/SimplePlayerViewController.storyboard +++ b/Demo/Sources/Demos/SimplePlayerViewController.storyboard @@ -28,9 +28,6 @@ - - - @@ -46,11 +43,10 @@ - + - From 032f1b5b48c251c3f22f052b6cd2c21ec861bd2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Wed, 8 Feb 2017 11:36:16 +0100 Subject: [PATCH 039/180] Automatically stop picture in picture when displaying an associated letterbox view again --- Framework/Sources/Views/SRGLetterboxView.m | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Framework/Sources/Views/SRGLetterboxView.m b/Framework/Sources/Views/SRGLetterboxView.m index cbbcb53bc..2b200fc04 100644 --- a/Framework/Sources/Views/SRGLetterboxView.m +++ b/Framework/Sources/Views/SRGLetterboxView.m @@ -258,13 +258,11 @@ - (void)setController:(SRGLetterboxController *)controller make.edges.equalTo(self.playerView); }]; - // FIXME: Decide what to do with the following -#if 0 + // Automatically resumes in the view when displayed while picture in picture was active AVPictureInPictureController *pictureInPictureController = mediaPlayerController.pictureInPictureController; if (pictureInPictureController.isPictureInPictureActive) { [pictureInPictureController stopPictureInPicture]; } -#endif } } From 7cccdacf8239779227a1af0eabe62144257a5db5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Wed, 8 Feb 2017 13:45:37 +0100 Subject: [PATCH 040/180] Add standalone player example --- Demo/Sources/Demos/DemosViewController.m | 17 ++++++ .../Demos/DemosViewController.storyboard | 60 +++++++++++++++--- .../Demos/StandalonePlayerViewController.h | 18 ++++++ .../Demos/StandalonePlayerViewController.m | 61 +++++++++++++++++++ .../StandalonePlayerViewController.storyboard | 58 ++++++++++++++++++ SRGLetterbox.xcodeproj/project.pbxproj | 10 +++ 6 files changed, 216 insertions(+), 8 deletions(-) create mode 100644 Demo/Sources/Demos/StandalonePlayerViewController.h create mode 100644 Demo/Sources/Demos/StandalonePlayerViewController.m create mode 100644 Demo/Sources/Demos/StandalonePlayerViewController.storyboard diff --git a/Demo/Sources/Demos/DemosViewController.m b/Demo/Sources/Demos/DemosViewController.m index ee0ad86e6..3cbd513e6 100644 --- a/Demo/Sources/Demos/DemosViewController.m +++ b/Demo/Sources/Demos/DemosViewController.m @@ -8,6 +8,7 @@ #import "ModalPlayerViewController.h" #import "SimplePlayerViewController.h" +#import "StandalonePlayerViewController.h" @implementation DemosViewController @@ -58,12 +59,14 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath [self presentViewController:playerViewController animated:YES completion:nil]; break; } + case 4: { SRGMediaURN *URN = [SRGMediaURN mediaURNWithString:@"urn:srf:ais:video:db741834-044f-443e-901a-e2fc03a4ef25"]; ModalPlayerViewController *playerViewController = [[ModalPlayerViewController alloc] initWithURN:URN media:nil]; [self presentViewController:playerViewController animated:YES completion:nil]; break; } + case 5: { SRGMediaURN *URN = [SRGMediaURN mediaURNWithString:@"urn:swi:video:41981254"]; SRGDataProvider *dataProvider = [[SRGDataProvider alloc] initWithServiceURL:[SRGDataProvider serviceURL] @@ -89,6 +92,20 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath break; } + case 6: { + SRGMediaURN *URN = [SRGMediaURN mediaURNWithString:@"urn:swi:video:41981254"]; + StandalonePlayerViewController *playerViewController = [[StandalonePlayerViewController alloc] initWithURN:URN]; + [self.navigationController pushViewController:playerViewController animated:YES]; + break; + } + + case 7: { + SRGMediaURN *URN = [SRGMediaURN mediaURNWithString:@"urn:swi:video:42844052"]; + StandalonePlayerViewController *playerViewController = [[StandalonePlayerViewController alloc] initWithURN:URN]; + [self.navigationController pushViewController:playerViewController animated:YES]; + break; + } + default: { break; } diff --git a/Demo/Sources/Demos/DemosViewController.storyboard b/Demo/Sources/Demos/DemosViewController.storyboard index 90067b058..4f629713d 100644 --- a/Demo/Sources/Demos/DemosViewController.storyboard +++ b/Demo/Sources/Demos/DemosViewController.storyboard @@ -1,5 +1,5 @@ - - + + @@ -23,7 +23,7 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Demo/Sources/Demos/StandalonePlayerViewController.h b/Demo/Sources/Demos/StandalonePlayerViewController.h new file mode 100644 index 000000000..d2c0869fc --- /dev/null +++ b/Demo/Sources/Demos/StandalonePlayerViewController.h @@ -0,0 +1,18 @@ +// +// Copyright (c) SRG SSR. All rights reserved. +// +// License information is available from the LICENSE file. +// + +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface StandalonePlayerViewController : UIViewController + +- (instancetype)initWithURN:(nullable SRGMediaURN *)URN; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Demo/Sources/Demos/StandalonePlayerViewController.m b/Demo/Sources/Demos/StandalonePlayerViewController.m new file mode 100644 index 000000000..ca939be37 --- /dev/null +++ b/Demo/Sources/Demos/StandalonePlayerViewController.m @@ -0,0 +1,61 @@ +// +// Copyright (c) SRG SSR. All rights reserved. +// +// License information is available from the LICENSE file. +// + +#import "StandalonePlayerViewController.h" + +#import + +@interface StandalonePlayerViewController () + +@property (nonatomic) SRGMediaURN *URN; + +@property (nonatomic) IBOutlet SRGLetterboxController *letterboxController; + +@end + +@implementation StandalonePlayerViewController + +#pragma mark Object lifecycle + +- (instancetype)initWithURN:(SRGMediaURN *)URN +{ + UIStoryboard *storyboard = [UIStoryboard storyboardWithName:NSStringFromClass([self class]) bundle:nil]; + StandalonePlayerViewController *viewController = [storyboard instantiateInitialViewController]; + viewController.URN = URN; + return viewController; +} + +- (instancetype)init +{ + return [self initWithURN:nil]; +} + +#pragma mark View lifecycle + +- (void)viewWillAppear:(BOOL)animated +{ + [super viewWillAppear:animated]; + + if ([self isMovingToParentViewController] || [self isBeingPresented]) { + if (self.URN) { + [self.letterboxController playURN:self.URN withPreferredQuality:SRGQualityNone]; + } + } +} + +- (void)viewDidDisappear:(BOOL)animated +{ + [super viewDidDisappear:animated]; + + if ([self isMovingFromParentViewController] || [self isBeingDismissed]) { + // FIXME: Won't work, should ask the controller itself + if (! [SRGLetterboxService sharedService].pictureInPictureActive) { + [self.letterboxController reset]; + } + } +} + +@end diff --git a/Demo/Sources/Demos/StandalonePlayerViewController.storyboard b/Demo/Sources/Demos/StandalonePlayerViewController.storyboard new file mode 100644 index 000000000..48be0c396 --- /dev/null +++ b/Demo/Sources/Demos/StandalonePlayerViewController.storyboard @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SRGLetterbox.xcodeproj/project.pbxproj b/SRGLetterbox.xcodeproj/project.pbxproj index 20253d419..fc5c85335 100644 --- a/SRGLetterbox.xcodeproj/project.pbxproj +++ b/SRGLetterbox.xcodeproj/project.pbxproj @@ -115,6 +115,8 @@ 6FAB3B9C1E291A9700CC2197 /* YYWebImage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6FAB3B9A1E291A8500CC2197 /* YYWebImage.framework */; }; 6FAB3B9D1E291A9700CC2197 /* YYWebImage.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 6FAB3B9A1E291A8500CC2197 /* YYWebImage.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 6FAB3B9E1E291A9E00CC2197 /* YYWebImage.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 6FAB3B9A1E291A8500CC2197 /* YYWebImage.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 6FB78F8B1E4B2C5F0053D2A6 /* StandalonePlayerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FB78F891E4B2C5F0053D2A6 /* StandalonePlayerViewController.m */; }; + 6FB78F8C1E4B2C5F0053D2A6 /* StandalonePlayerViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6FB78F8A1E4B2C5F0053D2A6 /* StandalonePlayerViewController.storyboard */; }; 6FB97FCC1E49D7240014C4C2 /* SRGLetterboxService.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FB97FCA1E49D7240014C4C2 /* SRGLetterboxService.h */; settings = {ATTRIBUTES = (Public, ); }; }; 6FB97FCD1E49D7240014C4C2 /* SRGLetterboxService.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FB97FCB1E49D7240014C4C2 /* SRGLetterboxService.m */; }; 6FB97FF31E4B09B70014C4C2 /* MAKVONotificationCenter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6FB97FF21E4B09B70014C4C2 /* MAKVONotificationCenter.framework */; }; @@ -309,6 +311,9 @@ 6FAB3B8B1E29066300CC2197 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 6FAB3B8D1E29066300CC2197 /* LetterboxControllerTestCase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LetterboxControllerTestCase.m; sourceTree = ""; }; 6FAB3B9A1E291A8500CC2197 /* YYWebImage.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = YYWebImage.framework; path = Carthage/Build/iOS/YYWebImage.framework; sourceTree = ""; }; + 6FB78F881E4B2C5F0053D2A6 /* StandalonePlayerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StandalonePlayerViewController.h; sourceTree = ""; }; + 6FB78F891E4B2C5F0053D2A6 /* StandalonePlayerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = StandalonePlayerViewController.m; sourceTree = ""; }; + 6FB78F8A1E4B2C5F0053D2A6 /* StandalonePlayerViewController.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = StandalonePlayerViewController.storyboard; sourceTree = ""; }; 6FB97FCA1E49D7240014C4C2 /* SRGLetterboxService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SRGLetterboxService.h; sourceTree = ""; }; 6FB97FCB1E49D7240014C4C2 /* SRGLetterboxService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SRGLetterboxService.m; sourceTree = ""; }; 6FB97FF21E4B09B70014C4C2 /* MAKVONotificationCenter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MAKVONotificationCenter.framework; path = Carthage/Build/iOS/MAKVONotificationCenter.framework; sourceTree = ""; }; @@ -558,6 +563,9 @@ 6FAB3B5B1E28FFEA00CC2197 /* SimplePlayerViewController.h */, 6FAB3B5C1E28FFEA00CC2197 /* SimplePlayerViewController.m */, 6FAB3B621E2900D200CC2197 /* SimplePlayerViewController.storyboard */, + 6FB78F881E4B2C5F0053D2A6 /* StandalonePlayerViewController.h */, + 6FB78F891E4B2C5F0053D2A6 /* StandalonePlayerViewController.m */, + 6FB78F8A1E4B2C5F0053D2A6 /* StandalonePlayerViewController.storyboard */, ); path = Demos; sourceTree = ""; @@ -765,6 +773,7 @@ buildActionMask = 2147483647; files = ( 6F1F5FC61E309BF0000215F3 /* ModalPlayerViewController.storyboard in Resources */, + 6FB78F8C1E4B2C5F0053D2A6 /* StandalonePlayerViewController.storyboard in Resources */, 6F28BAD21E323F6A004F43DD /* Images.xcassets in Resources */, 6FAB3B631E2900D200CC2197 /* SimplePlayerViewController.storyboard in Resources */, 6FD9BA331E3096010013CC97 /* DemosViewController.storyboard in Resources */, @@ -799,6 +808,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 6FB78F8B1E4B2C5F0053D2A6 /* StandalonePlayerViewController.m in Sources */, 6FAB3B601E28FFEA00CC2197 /* main.m in Sources */, 6FAB3B5F1E28FFEA00CC2197 /* AppDelegate.m in Sources */, 6FAB3B611E28FFEA00CC2197 /* SimplePlayerViewController.m in Sources */, From c769283cc9a32c874de1b531427fa2a15b9a6e0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Wed, 8 Feb 2017 14:11:04 +0100 Subject: [PATCH 041/180] Fix player view removed by mistake if not bound to the correct Letterbox view --- Framework/Sources/Views/SRGLetterboxView.m | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Framework/Sources/Views/SRGLetterboxView.m b/Framework/Sources/Views/SRGLetterboxView.m index 2b200fc04..6541db759 100644 --- a/Framework/Sources/Views/SRGLetterboxView.m +++ b/Framework/Sources/Views/SRGLetterboxView.m @@ -214,7 +214,9 @@ - (void)setController:(SRGLetterboxController *)controller name:SRGMediaPlayerPlaybackStateDidChangeNotification object:previousMediaPlayerController]; - [previousMediaPlayerController.view removeFromSuperview]; + if (previousMediaPlayerController.view.superview == self.playerView) { + [previousMediaPlayerController.view removeFromSuperview]; + } } _controller = controller; From 7fc83dc07b93d34b0db9199ccf833436ddac0846 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Wed, 8 Feb 2017 14:59:21 +0100 Subject: [PATCH 042/180] Make it possible to bind or unbind the standalone player to the service --- .../Demos/StandalonePlayerViewController.m | 12 ++++++++++++ .../StandalonePlayerViewController.storyboard | 18 ++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/Demo/Sources/Demos/StandalonePlayerViewController.m b/Demo/Sources/Demos/StandalonePlayerViewController.m index ca939be37..c45d3a313 100644 --- a/Demo/Sources/Demos/StandalonePlayerViewController.m +++ b/Demo/Sources/Demos/StandalonePlayerViewController.m @@ -58,4 +58,16 @@ - (void)viewDidDisappear:(BOOL)animated } } +#pragma mark Actions + +- (IBAction)useForService:(id)sender +{ + [SRGLetterboxService sharedService].controller = self.letterboxController; +} + +- (IBAction)resetService:(id)sender +{ + [SRGLetterboxService sharedService].controller = [[SRGLetterboxController alloc] init]; +} + @end diff --git a/Demo/Sources/Demos/StandalonePlayerViewController.storyboard b/Demo/Sources/Demos/StandalonePlayerViewController.storyboard index 48be0c396..d1c1198e0 100644 --- a/Demo/Sources/Demos/StandalonePlayerViewController.storyboard +++ b/Demo/Sources/Demos/StandalonePlayerViewController.storyboard @@ -32,15 +32,33 @@ + + + + + + From 8671aa1b09967517e51244a2ff6403d5856fb4dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Wed, 8 Feb 2017 15:01:27 +0100 Subject: [PATCH 043/180] Support picture in picture for the standalone player (when bound to the service) --- Demo/Sources/Application/AppDelegate.m | 13 ++++++++----- Demo/Sources/Demos/StandalonePlayerViewController.m | 5 +++++ .../Demos/StandalonePlayerViewController.storyboard | 1 + 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/Demo/Sources/Application/AppDelegate.m b/Demo/Sources/Application/AppDelegate.m index 4960ab7eb..711e203e4 100644 --- a/Demo/Sources/Application/AppDelegate.m +++ b/Demo/Sources/Application/AppDelegate.m @@ -9,6 +9,7 @@ #import "DemosViewController.h" #import "ModalPlayerViewController.h" #import "SimplePlayerViewController.h" +#import "StandalonePlayerViewController.h" #import #import @@ -74,7 +75,8 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( - (BOOL)letterboxShouldRestoreUserInterfaceForPictureInPicture { return ! [self.topPresentedViewController isKindOfClass:[ModalPlayerViewController class]] - && ! [self.navigationController.topViewController isKindOfClass:[SimplePlayerViewController class]]; + && ! [self.navigationController.topViewController isKindOfClass:[SimplePlayerViewController class]] + && ! [self.navigationController.topViewController isKindOfClass:[StandalonePlayerViewController class]]; } - (void)letterboxRestoreUserInterfaceForPictureInPictureWithCompletionHandler:(void (^)(BOOL))completionHandler @@ -85,8 +87,8 @@ - (void)letterboxRestoreUserInterfaceForPictureInPictureWithCompletionHandler:(v completionHandler(YES); }]; } - else if (self.restorationClass == [SimplePlayerViewController class]) { - SimplePlayerViewController *playerViewController = [[SimplePlayerViewController alloc] init]; + else if (self.restorationClass == [SimplePlayerViewController class] || self.restorationClass == [StandalonePlayerViewController class]) { + UIViewController *playerViewController = [[self.restorationClass alloc] init]; [self.navigationController pushViewController:playerViewController animated:YES]; completionHandler(YES); // FIXME: Call completion handler at the end of the transition animation!! @@ -101,8 +103,9 @@ - (void)letterboxDidStartPictureInPicture self.restorationClass = [ModalPlayerViewController class]; [self.topPresentedViewController dismissViewControllerAnimated:YES completion:nil]; } - else if ([self.navigationController.topViewController isKindOfClass:[SimplePlayerViewController class]]) { - self.restorationClass = [SimplePlayerViewController class]; + else if ([self.navigationController.topViewController isKindOfClass:[SimplePlayerViewController class]] + || [self.navigationController.topViewController isKindOfClass:[StandalonePlayerViewController class]]) { + self.restorationClass = [self.navigationController.topViewController class]; [self.navigationController popViewControllerAnimated:YES]; } } diff --git a/Demo/Sources/Demos/StandalonePlayerViewController.m b/Demo/Sources/Demos/StandalonePlayerViewController.m index c45d3a313..506ff2749 100644 --- a/Demo/Sources/Demos/StandalonePlayerViewController.m +++ b/Demo/Sources/Demos/StandalonePlayerViewController.m @@ -12,6 +12,7 @@ @interface StandalonePlayerViewController () @property (nonatomic) SRGMediaURN *URN; +@property (nonatomic, weak) IBOutlet SRGLetterboxView *letterboxView; @property (nonatomic) IBOutlet SRGLetterboxController *letterboxController; @end @@ -43,6 +44,10 @@ - (void)viewWillAppear:(BOOL)animated if (self.URN) { [self.letterboxController playURN:self.URN withPreferredQuality:SRGQualityNone]; } + else { + self.letterboxController = [SRGLetterboxService sharedService].controller; + self.letterboxView.controller = self.letterboxController; + } } } diff --git a/Demo/Sources/Demos/StandalonePlayerViewController.storyboard b/Demo/Sources/Demos/StandalonePlayerViewController.storyboard index d1c1198e0..6b1614d3b 100644 --- a/Demo/Sources/Demos/StandalonePlayerViewController.storyboard +++ b/Demo/Sources/Demos/StandalonePlayerViewController.storyboard @@ -65,6 +65,7 @@ + From 93d40724bd7c3948ab181564ec924092b7bbc579 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Wed, 8 Feb 2017 15:39:51 +0100 Subject: [PATCH 044/180] Remove now non-relevant tests --- SRGLetterbox.xcodeproj/project.pbxproj | 4 - Tests/Sources/LetterboxServiceTestCase.m | 304 ----------------------- 2 files changed, 308 deletions(-) delete mode 100644 Tests/Sources/LetterboxServiceTestCase.m diff --git a/SRGLetterbox.xcodeproj/project.pbxproj b/SRGLetterbox.xcodeproj/project.pbxproj index fc5c85335..f0e41d288 100644 --- a/SRGLetterbox.xcodeproj/project.pbxproj +++ b/SRGLetterbox.xcodeproj/project.pbxproj @@ -147,7 +147,6 @@ 6FE655DA1E2CA3F9000033D4 /* SRGMediaPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6FAB3B0F1E28FB1400CC2197 /* SRGMediaPlayer.framework */; }; 6FE655DB1E2CA3F9000033D4 /* YYWebImage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6FAB3B9A1E291A8500CC2197 /* YYWebImage.framework */; }; 6FE655DC1E2CA453000033D4 /* SRGLetterbox.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 6FE321411E28E24E00FD8E42 /* SRGLetterbox.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 6FE655E11E2CFA4C000033D4 /* LetterboxServiceTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE655DE1E2CFA46000033D4 /* LetterboxServiceTestCase.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -325,7 +324,6 @@ 6FD9BA301E3095F00013CC97 /* DemosViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemosViewController.m; sourceTree = ""; }; 6FD9BA321E3096010013CC97 /* DemosViewController.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = DemosViewController.storyboard; sourceTree = ""; }; 6FE321411E28E24E00FD8E42 /* SRGLetterbox.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SRGLetterbox.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6FE655DE1E2CFA46000033D4 /* LetterboxServiceTestCase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LetterboxServiceTestCase.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -584,7 +582,6 @@ children = ( 6FD9BA2A1E2FBC770013CC97 /* Helpers */, 6FAB3B8D1E29066300CC2197 /* LetterboxControllerTestCase.m */, - 6FE655DE1E2CFA46000033D4 /* LetterboxServiceTestCase.m */, ); path = Sources; sourceTree = ""; @@ -821,7 +818,6 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 6FE655E11E2CFA4C000033D4 /* LetterboxServiceTestCase.m in Sources */, 6FAB3B8F1E29066300CC2197 /* LetterboxControllerTestCase.m in Sources */, 6FD9BA2C1E2FBC770013CC97 /* TrackerSingletonSetup.m in Sources */, 6FD9BA2E1E2FBCC70013CC97 /* BundleFix.m in Sources */, diff --git a/Tests/Sources/LetterboxServiceTestCase.m b/Tests/Sources/LetterboxServiceTestCase.m deleted file mode 100644 index 06f345db6..000000000 --- a/Tests/Sources/LetterboxServiceTestCase.m +++ /dev/null @@ -1,304 +0,0 @@ -// -// Copyright (c) SRG SSR. All rights reserved. -// -// License information is available from the LICENSE file. -// - -#import -#import -#import - -#if 0 - -static NSURL *ServiceTestURL(void) -{ - return SRGIntegrationLayerTestServiceURL(); -} - -@interface LetterboxServiceTestCase : XCTestCase - -@property (nonatomic) SRGDataProvider *dataProvider; - -@end - -@implementation LetterboxServiceTestCase - -#pragma mark Setup and teardown - -- (void)setUp -{ - self.dataProvider = [[SRGDataProvider alloc] initWithServiceURL:ServiceTestURL() businessUnitIdentifier:SRGDataProviderBusinessUnitIdentifierSWI]; -} - -- (void)tearDown -{ - // Return to a known state after playback ended - [[SRGLetterboxService sharedService] reset]; -} - -#pragma mark Tests - -- (void)testMediaChange -{ - XCTestExpectation *expectation1 = [self expectationWithDescription:@"Request 1 succeeded"]; - - __block SRGMedia *media1 = nil; - [[self.dataProvider videosWithUids:@[@"42844052"] completionBlock:^(NSArray * _Nullable medias, NSError * _Nullable error) { - media1 = medias.firstObject; - XCTAssertNotNil(media1); - [expectation1 fulfill]; - }] resume]; - - [self waitForExpectationsWithTimeout:20. handler:nil]; - - SRGLetterboxService *service = [SRGLetterboxService sharedService]; - - // Wait until the stream is playing with media composition information available - [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:service.controller handler:^BOOL(NSNotification * _Nonnull notification) { - return [notification.userInfo[SRGMediaPlayerPlaybackStateKey] integerValue] == SRGMediaPlayerPlaybackStatePlaying; - }]; - [self expectationForNotification:SRGLetterboxMetadataDidChangeNotification object:service handler:^BOOL(NSNotification * _Nonnull notification) { - return notification.userInfo[SRGLetterboxMediaCompositionKey] != nil; - }]; - - [[SRGLetterboxService sharedService] playMedia:media1 withPreferredQuality:SRGQualityNone]; - - XCTAssertEqualObjects(service.URN, media1.URN); - XCTAssertEqualObjects(service.media, media1); - XCTAssertNil(service.mediaComposition); - XCTAssertNil(service.error); - - [self waitForExpectationsWithTimeout:20. handler:nil]; - - SRGMediaComposition *mediaComposition1 = service.mediaComposition; - XCTAssertNotNil(mediaComposition1); - - XCTestExpectation *expectation2 = [self expectationWithDescription:@"Request 2 succeeded"]; - - __block SRGMedia *media2 = nil; - [[self.dataProvider videosWithUids:@[@"42851050"] completionBlock:^(NSArray * _Nullable medias, NSError * _Nullable error) { - media2 = medias.firstObject; - XCTAssertNotNil(media2); - [expectation2 fulfill]; - }] resume]; - - [self waitForExpectationsWithTimeout:20. handler:nil]; - - // Wait until the stream is playing with media composition information available - [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:service.controller handler:^BOOL(NSNotification * _Nonnull notification) { - return [notification.userInfo[SRGMediaPlayerPlaybackStateKey] integerValue] == SRGMediaPlayerPlaybackStatePlaying; - }]; - [self expectationForNotification:SRGLetterboxMetadataDidChangeNotification object:service handler:^BOOL(NSNotification * _Nonnull notification) { - XCTAssertEqualObjects(notification.userInfo[SRGLetterboxMediaKey], media2); - - if (! notification.userInfo[SRGLetterboxMediaCompositionKey]) { - XCTAssertEqualObjects(notification.userInfo[SRGLetterboxPreviousMediaKey], media1); - XCTAssertEqualObjects(notification.userInfo[SRGLetterboxPreviousMediaCompositionKey], mediaComposition1); - return NO; - } - else { - XCTAssertEqualObjects(notification.userInfo[SRGLetterboxPreviousMediaKey], media2); - XCTAssertNil(notification.userInfo[SRGLetterboxPreviousMediaCompositionKey]); - return YES; - } - }]; - - [[SRGLetterboxService sharedService] playMedia:media2 withPreferredQuality:SRGQualityNone]; - - XCTAssertEqualObjects(service.URN, media2.URN); - XCTAssertEqualObjects(service.media, media2); - XCTAssertNil(service.mediaComposition); - XCTAssertNil(service.error); - - [self waitForExpectationsWithTimeout:20. handler:nil]; - - XCTAssertEqualObjects(service.URN, media2.URN); - XCTAssertEqualObjects(service.media, media2); - XCTAssertNotNil(service.mediaComposition); - XCTAssertNil(service.error); -} - -- (void)testPlayFromURN -{ - SRGLetterboxService *service = [SRGLetterboxService sharedService]; - SRGMediaURN *URN = [SRGMediaURN mediaURNWithString:@"urn:srf:ais:video:db741834-044f-443e-901a-e2fc03a4ef25"]; - XCTAssertNotNil(URN); - - // Wait until the stream is playing with media composition information available - [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:service.controller handler:^BOOL(NSNotification * _Nonnull notification) { - return [notification.userInfo[SRGMediaPlayerPlaybackStateKey] integerValue] == SRGMediaPlayerPlaybackStatePlaying; - }]; - [self expectationForNotification:SRGLetterboxMetadataDidChangeNotification object:service handler:^BOOL(NSNotification * _Nonnull notification) { - return notification.userInfo[SRGLetterboxMediaCompositionKey] != nil; - }]; - - [service playURN:URN withPreferredQuality:SRGQualityNone]; - - [self waitForExpectationsWithTimeout:20. handler:nil]; -} - -- (void)testReset -{ - XCTestExpectation *expectation = [self expectationWithDescription:@"Request succeeded"]; - - __block SRGMedia *media = nil; - [[self.dataProvider videosWithUids:@[@"42844052"] completionBlock:^(NSArray * _Nullable medias, NSError * _Nullable error) { - media = medias.firstObject; - XCTAssertNotNil(media); - [expectation fulfill]; - }] resume]; - - [self waitForExpectationsWithTimeout:20. handler:nil]; - - SRGLetterboxService *service = [SRGLetterboxService sharedService]; - - // Wait until the stream is playing with media composition information available - [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:service.controller handler:^BOOL(NSNotification * _Nonnull notification) { - return [notification.userInfo[SRGMediaPlayerPlaybackStateKey] integerValue] == SRGMediaPlayerPlaybackStatePlaying; - }]; - [self expectationForNotification:SRGLetterboxMetadataDidChangeNotification object:service handler:^BOOL(NSNotification * _Nonnull notification) { - return notification.userInfo[SRGLetterboxMediaCompositionKey] != nil; - }]; - - [[SRGLetterboxService sharedService] playMedia:media withPreferredQuality:SRGQualityNone]; - - [self waitForExpectationsWithTimeout:20. handler:nil]; - - [self expectationForNotification:SRGLetterboxMetadataDidChangeNotification object:service handler:^BOOL(NSNotification * _Nonnull notification) { - XCTAssertEqualObjects(notification.userInfo[SRGLetterboxPreviousMediaKey], media); - XCTAssertNil(notification.userInfo[SRGLetterboxMediaKey]); - - XCTAssertNotNil(notification.userInfo[SRGLetterboxPreviousMediaCompositionKey]); - XCTAssertNil(notification.userInfo[SRGLetterboxMediaCompositionKey]); - return YES; - }]; - - // Reset - [service reset]; - - [self waitForExpectationsWithTimeout:20. handler:nil]; - - XCTAssertNil(service.URN); - XCTAssertNil(service.media); - XCTAssertNil(service.mediaComposition); - XCTAssertNil(service.error); -} - -- (void)testResumeWithIdleService -{ - XCTestExpectation *mediaCompositionExpectation = [self expectationWithDescription:@"Request succeeded"]; - - __block SRGMediaComposition *mediaComposition = nil; - [[self.dataProvider mediaCompositionForVideoWithUid:@"42844052" completionBlock:^(SRGMediaComposition * _Nullable retrievedMediaComposition, NSError * _Nullable error) { - XCTAssertNotNil(retrievedMediaComposition); - mediaComposition = retrievedMediaComposition; - [mediaCompositionExpectation fulfill]; - }] resume]; - - [self waitForExpectationsWithTimeout:20. handler:nil]; - - XCTestExpectation *playExpectation = [self expectationWithDescription:@"Play succeeded"]; - - SRGLetterboxController *controller = [[SRGLetterboxController alloc] init]; - [controller playMediaComposition:mediaComposition withPreferredProtocol:SRGProtocolNone preferredQuality:SRGQualityNone userInfo:nil resume:YES completionHandler:^(NSError * _Nonnull error) { - [playExpectation fulfill]; - }]; - - [self waitForExpectationsWithTimeout:20. handler:nil]; - - [self expectationForNotification:SRGLetterboxMetadataDidChangeNotification object:nil handler:^BOOL(NSNotification * _Nonnull notification) { - XCTAssertNil(notification.userInfo[SRGLetterboxPreviousMediaKey]); - XCTAssertNotNil(notification.userInfo[SRGLetterboxMediaKey]); - - XCTAssertNil(notification.userInfo[SRGLetterboxPreviousMediaCompositionKey]); - XCTAssertEqualObjects(notification.userInfo[SRGLetterboxMediaCompositionKey], mediaComposition); - return YES; - }]; - - SRGLetterboxService *service = [SRGLetterboxService sharedService]; - [service resumeFromController:controller]; - - XCTAssertEqualObjects(service.URN, service.media.URN); - XCTAssertNotNil(service.media); - XCTAssertEqualObjects(service.mediaComposition, mediaComposition); - XCTAssertNil(service.error); - - [self waitForExpectationsWithTimeout:20. handler:nil]; -} - -- (void)testResumeWithPlayingService -{ - XCTestExpectation *expectation = [self expectationWithDescription:@"Media request succeeded"]; - - __block SRGMedia *media1 = nil; - [[self.dataProvider videosWithUids:@[@"42844052"] completionBlock:^(NSArray * _Nullable medias, NSError * _Nullable error) { - media1 = medias.firstObject; - XCTAssertNotNil(media1); - [expectation fulfill]; - }] resume]; - - [self waitForExpectationsWithTimeout:20. handler:nil]; - - SRGLetterboxService *service = [SRGLetterboxService sharedService]; - - // Wait until the media composition is available - [self expectationForNotification:SRGLetterboxMetadataDidChangeNotification object:service handler:^BOOL(NSNotification * _Nonnull notification) { - return notification.userInfo[SRGLetterboxMediaCompositionKey] != nil; - }]; - - [[SRGLetterboxService sharedService] playMedia:media1 withPreferredQuality:SRGQualityNone]; - - [self waitForExpectationsWithTimeout:20. handler:nil]; - - SRGMediaComposition *mediaComposition1 = service.mediaComposition; - - XCTestExpectation *mediaCompositionExpectation = [self expectationWithDescription:@"Media composition request succeeded"]; - - __block SRGMediaComposition *mediaComposition2 = nil; - [[self.dataProvider mediaCompositionForVideoWithUid:@"42851050" completionBlock:^(SRGMediaComposition * _Nullable mediaComposition, NSError * _Nullable error) { - XCTAssertNotNil(mediaComposition); - mediaComposition2 = mediaComposition; - [mediaCompositionExpectation fulfill]; - }] resume]; - - [self waitForExpectationsWithTimeout:20. handler:nil]; - - XCTestExpectation *playExpectation = [self expectationWithDescription:@"Play succeeded"]; - - SRGLetterboxController *controller = [[SRGLetterboxController alloc] init]; - [controller playMediaComposition:mediaComposition2 withPreferredProtocol:SRGProtocolNone preferredQuality:SRGQualityNone userInfo:nil resume:YES completionHandler:^(NSError * _Nonnull error) { - [playExpectation fulfill]; - }]; - - [self waitForExpectationsWithTimeout:20. handler:nil]; - - // Expect no player status change - id eventObserver = [[NSNotificationCenter defaultCenter] addObserverForName:SRGMediaPlayerPlaybackStateDidChangeNotification object:service.controller queue:nil usingBlock:^(NSNotification * _Nonnull note) { - XCTFail(@"Expect no playback state change"); - }]; - - [self expectationForElapsedTimeInterval:3. withHandler:nil]; - [self expectationForNotification:SRGLetterboxMetadataDidChangeNotification object:nil handler:^BOOL(NSNotification * _Nonnull notification) { - XCTAssertEqualObjects(notification.userInfo[SRGLetterboxPreviousMediaKey], media1); - XCTAssertNotNil(notification.userInfo[SRGLetterboxMediaKey]); - - XCTAssertEqualObjects(notification.userInfo[SRGLetterboxPreviousMediaCompositionKey], mediaComposition1); - XCTAssertEqualObjects(notification.userInfo[SRGLetterboxMediaCompositionKey], mediaComposition2); - return YES; - }]; - - [service resumeFromController:controller]; - - XCTAssertEqualObjects(service.URN, service.media.URN); - XCTAssertNotNil(service.media); - XCTAssertEqualObjects(service.mediaComposition, mediaComposition2); - XCTAssertNil(service.error); - - [self waitForExpectationsWithTimeout:20. handler:^(NSError * _Nullable error) { - [[NSNotificationCenter defaultCenter] removeObserver:eventObserver]; - }]; -} - -@end - -#endif From 7d6ba4629af955ba5f287d7b3f01af6546b67297 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Wed, 8 Feb 2017 16:05:49 +0100 Subject: [PATCH 045/180] Add tests --- Tests/Sources/LetterboxControllerTestCase.m | 78 ++++++++++++++++++++- 1 file changed, 75 insertions(+), 3 deletions(-) diff --git a/Tests/Sources/LetterboxControllerTestCase.m b/Tests/Sources/LetterboxControllerTestCase.m index b8a3196a7..4c6985f3d 100644 --- a/Tests/Sources/LetterboxControllerTestCase.m +++ b/Tests/Sources/LetterboxControllerTestCase.m @@ -53,17 +53,89 @@ - (void)testShortLifetime - (void)testPlayURN { - + SRGMediaPlayerController *mediaPlayerController = self.controller.mediaPlayerController; + + // Wait until the stream is playing, at which time we expect the media composition to be available + [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:mediaPlayerController handler:^BOOL(NSNotification * _Nonnull notification) { + return [notification.userInfo[SRGMediaPlayerPlaybackStateKey] integerValue] == SRGMediaPlayerPlaybackStatePlaying; + }]; + [self expectationForNotification:SRGLetterboxMetadataDidChangeNotification object:self.controller handler:^BOOL(NSNotification * _Nonnull notification) { + return notification.userInfo[SRGLetterboxMediaCompositionKey] != nil; + }]; + + SRGMediaURN *URN = [SRGMediaURN mediaURNWithString:@"urn:swi:video:42844052"]; + [self.controller playURN:URN withPreferredQuality:SRGQualityNone]; + + [self waitForExpectationsWithTimeout:20. handler:nil]; + + // Media information must now be available + XCTAssertEqualObjects(self.controller.URN, URN); + XCTAssertEqualObjects(self.controller.media.URN, URN); + XCTAssertEqualObjects(self.controller.mediaComposition.chapterURN, URN); + XCTAssertNil(self.controller.error); } - (void)testPlayMedia { - + SRGMediaPlayerController *mediaPlayerController = self.controller.mediaPlayerController; + + XCTestExpectation *expectation = [self expectationWithDescription:@"Media retrieved"]; + + __block SRGMedia *media = nil; + SRGDataProvider *dataProvider = [[SRGDataProvider alloc] initWithServiceURL:SRGIntegrationLayerTestServiceURL() businessUnitIdentifier:SRGDataProviderBusinessUnitIdentifierSWI]; + [[dataProvider videosWithUids:@[@"42844052"] completionBlock:^(NSArray * _Nullable medias, NSError * _Nullable error) { + media = medias.firstObject; + [expectation fulfill]; + }] resume]; + + [self waitForExpectationsWithTimeout:20. handler:nil]; + + XCTAssertNotNil(media); + + // Wait until the stream is playing, at which time we expect the media composition to be available + [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:mediaPlayerController handler:^BOOL(NSNotification * _Nonnull notification) { + return [notification.userInfo[SRGMediaPlayerPlaybackStateKey] integerValue] == SRGMediaPlayerPlaybackStatePlaying; + }]; + [self expectationForNotification:SRGLetterboxMetadataDidChangeNotification object:self.controller handler:^BOOL(NSNotification * _Nonnull notification) { + return notification.userInfo[SRGLetterboxMediaCompositionKey] != nil; + }]; + + [self.controller playMedia:media withPreferredQuality:SRGQualityNone]; + + [self waitForExpectationsWithTimeout:20. handler:nil]; + + // Media information must now be available + XCTAssertEqualObjects(self.controller.URN, media.URN); + XCTAssertEqualObjects(self.controller.media, media); + XCTAssertEqualObjects(self.controller.mediaComposition.chapterURN, media.URN); + XCTAssertNil(self.controller.error); } - (void)testReset { - + SRGMediaPlayerController *mediaPlayerController = self.controller.mediaPlayerController; + + [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:mediaPlayerController handler:^BOOL(NSNotification * _Nonnull notification) { + return [notification.userInfo[SRGMediaPlayerPlaybackStateKey] integerValue] == SRGMediaPlayerPlaybackStatePlaying; + }]; + + SRGMediaURN *URN = [SRGMediaURN mediaURNWithString:@"urn:swi:video:42844052"]; + [self.controller playURN:URN withPreferredQuality:SRGQualityNone]; + + [self waitForExpectationsWithTimeout:20. handler:nil]; + + [self expectationForNotification:SRGMediaPlayerPlaybackStateDidChangeNotification object:mediaPlayerController handler:^BOOL(NSNotification * _Nonnull notification) { + return [notification.userInfo[SRGMediaPlayerPlaybackStateKey] integerValue] == SRGMediaPlayerPlaybackStateIdle; + }]; + + [self.controller reset]; + + XCTAssertNil(self.controller.URN); + XCTAssertNil(self.controller.media); + XCTAssertNil(self.controller.mediaComposition); + XCTAssertNil(self.controller.error); + + [self waitForExpectationsWithTimeout:20. handler:nil]; } - (void)testPlaybackMetadata From 12af13adada0ca2a573cd0a70cae187ceae61e2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Wed, 8 Feb 2017 16:28:39 +0100 Subject: [PATCH 046/180] Add multi player demo --- Demo/Sources/Demos/DemosViewController.m | 6 ++ .../Demos/DemosViewController.storyboard | 38 ++++++++-- .../Sources/Demos/MultiPlayerViewController.h | 15 ++++ .../Sources/Demos/MultiPlayerViewController.m | 75 +++++++++++++++++++ .../MultiPlayerViewController.storyboard | 73 ++++++++++++++++++ SRGLetterbox.xcodeproj/project.pbxproj | 10 +++ 6 files changed, 209 insertions(+), 8 deletions(-) create mode 100644 Demo/Sources/Demos/MultiPlayerViewController.h create mode 100644 Demo/Sources/Demos/MultiPlayerViewController.m create mode 100644 Demo/Sources/Demos/MultiPlayerViewController.storyboard diff --git a/Demo/Sources/Demos/DemosViewController.m b/Demo/Sources/Demos/DemosViewController.m index 3cbd513e6..672c5fe60 100644 --- a/Demo/Sources/Demos/DemosViewController.m +++ b/Demo/Sources/Demos/DemosViewController.m @@ -7,6 +7,7 @@ #import "DemosViewController.h" #import "ModalPlayerViewController.h" +#import "MultiPlayerViewController.h" #import "SimplePlayerViewController.h" #import "StandalonePlayerViewController.h" @@ -106,6 +107,11 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath break; } + case 8: { + MultiPlayerViewController *playerViewController = [[MultiPlayerViewController alloc] init]; + [self.navigationController pushViewController:playerViewController animated:YES]; + } + default: { break; } diff --git a/Demo/Sources/Demos/DemosViewController.storyboard b/Demo/Sources/Demos/DemosViewController.storyboard index 4f629713d..1246c103c 100644 --- a/Demo/Sources/Demos/DemosViewController.storyboard +++ b/Demo/Sources/Demos/DemosViewController.storyboard @@ -23,7 +23,7 @@ - + From 2235cf6426082e7d51916abd42cc7f283b0dc780 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Tue, 14 Feb 2017 10:10:00 +0100 Subject: [PATCH 126/180] Avoid method not called because of side effects --- Framework/Sources/Service/SRGLetterboxService.m | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Framework/Sources/Service/SRGLetterboxService.m b/Framework/Sources/Service/SRGLetterboxService.m index c83d61c79..b968f6876 100644 --- a/Framework/Sources/Service/SRGLetterboxService.m +++ b/Framework/Sources/Service/SRGLetterboxService.m @@ -359,7 +359,8 @@ - (void)stopPictureInPictureRestoreUserInterface:(BOOL)restoreUserInterface - (void)pictureInPictureControllerDidStartPictureInPicture:(AVPictureInPictureController *)pictureInPictureController { - _restoreUserInterface = _restoreUserInterface && [self.pictureInPictureDelegate letterboxDismissUserInterfaceForPictureInPicture]; + BOOL dismissed = [self.pictureInPictureDelegate letterboxDismissUserInterfaceForPictureInPicture]; + _restoreUserInterface = _restoreUserInterface && dismissed; if ([self.pictureInPictureDelegate respondsToSelector:@selector(letterboxDidStartPictureInPicture)]) { [self.pictureInPictureDelegate letterboxDidStartPictureInPicture]; From 29a91a8c29eeb436d9b95a5b491b9e630322a0b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Tue, 14 Feb 2017 10:42:03 +0100 Subject: [PATCH 127/180] Fix video player frame animations when fast switching controllers in multi player while players are loading --- Framework/Sources/Views/SRGLetterboxView.m | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Framework/Sources/Views/SRGLetterboxView.m b/Framework/Sources/Views/SRGLetterboxView.m index 0416a38ea..8ea58f8a0 100644 --- a/Framework/Sources/Views/SRGLetterboxView.m +++ b/Framework/Sources/Views/SRGLetterboxView.m @@ -271,9 +271,12 @@ - (void)setController:(SRGLetterboxController *)controller object:mediaPlayerController]; [self.playerView insertSubview:mediaPlayerController.view aboveSubview:self.imageView]; + + // Force autolayout to ensure the layout is immediately correct [mediaPlayerController.view mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.equalTo(self.playerView); }]; + [self.playerView layoutIfNeeded]; } [self reloadDataAnimated:NO]; From 79ed1e5c1840726d352e3e6b7e37b0d432521b1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Tue, 14 Feb 2017 11:02:39 +0100 Subject: [PATCH 128/180] Fix crash due to double modal presentation --- Demo/Sources/Demos/DemosViewController.m | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Demo/Sources/Demos/DemosViewController.m b/Demo/Sources/Demos/DemosViewController.m index d2b643116..01c112a4d 100644 --- a/Demo/Sources/Demos/DemosViewController.m +++ b/Demo/Sources/Demos/DemosViewController.m @@ -57,6 +57,13 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath case 3: { SRGMediaURN *URN = [SRGMediaURN mediaURNWithString:@"urn:srf:video:db741834-044f-443e-901a-e2fc03a4ef25"]; ModalPlayerViewController *playerViewController = [[ModalPlayerViewController alloc] initWithURN:URN]; + + // Since might be reused, ensure we are not trying to present the same view controller while still dismissed + // (might happen if presenting and dismissing fast) + if (playerViewController.presentingViewController) { + return; + } + [self presentViewController:playerViewController animated:YES completion:nil]; break; } @@ -77,6 +84,12 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath case 6: { MultiPlayerViewController *playerViewController = [[MultiPlayerViewController alloc] init]; + + // Since might be reused, ensure we are not trying to present the same view controller while still dismissed + // (might happen if presenting and dismissing fast) + if (playerViewController.presentingViewController) { + return; + } [self presentViewController:playerViewController animated:YES completion:nil]; break; } From 044732a01153d163c4049e94b6f9263e772be027 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Tue, 14 Feb 2017 11:28:27 +0100 Subject: [PATCH 129/180] Avoid controllers stopping services available to other controllers The standalone example, when closed, was stopping picture in picture started from the modal example --- Demo/Sources/Demos/ModalPlayerViewController.m | 4 ++-- Demo/Sources/Demos/MultiPlayerViewController.m | 4 ++-- Demo/Sources/Demos/SimplePlayerViewController.m | 2 +- Demo/Sources/Demos/StandalonePlayerViewController.m | 4 ++-- Framework/Sources/Service/SRGLetterboxService.h | 5 +++++ Framework/Sources/Service/SRGLetterboxService.m | 9 +++++++++ 6 files changed, 21 insertions(+), 7 deletions(-) diff --git a/Demo/Sources/Demos/ModalPlayerViewController.m b/Demo/Sources/Demos/ModalPlayerViewController.m index be3c9156e..b857d23b4 100644 --- a/Demo/Sources/Demos/ModalPlayerViewController.m +++ b/Demo/Sources/Demos/ModalPlayerViewController.m @@ -88,7 +88,7 @@ - (void)viewDidDisappear:(BOOL)animated if ([self isMovingFromParentViewController] || [self isBeingDismissed]) { if (! self.letterboxController.pictureInPictureActive) { [self.letterboxController reset]; - [[SRGLetterboxService sharedService] disable]; + [[SRGLetterboxService sharedService] disableForController:self.letterboxController]; } } } @@ -141,7 +141,7 @@ - (void)letterboxDidEndPictureInPicture - (void)letterboxDidStopPlaybackFromPictureInPicture { [self.letterboxController reset]; - [[SRGLetterboxService sharedService] disable]; + [[SRGLetterboxService sharedService] disableForController:self.letterboxController]; } #pragma mark SRGLetterboxViewDelegate protocol diff --git a/Demo/Sources/Demos/MultiPlayerViewController.m b/Demo/Sources/Demos/MultiPlayerViewController.m index 1420752ca..747aca058 100644 --- a/Demo/Sources/Demos/MultiPlayerViewController.m +++ b/Demo/Sources/Demos/MultiPlayerViewController.m @@ -91,7 +91,7 @@ - (void)viewDidDisappear:(BOOL)animated if ([self isMovingFromParentViewController] || [self isBeingDismissed]) { if (! self.letterboxController.pictureInPictureActive) { [self.letterboxController reset]; - [[SRGLetterboxService sharedService] disable]; + [[SRGLetterboxService sharedService] disableForController:self.letterboxController]; } } } @@ -132,7 +132,7 @@ - (void)letterboxDidEndPictureInPicture - (void)letterboxDidStopPlaybackFromPictureInPicture { [self.letterboxController reset]; - [[SRGLetterboxService sharedService] disable]; + [[SRGLetterboxService sharedService] disableForController:self.letterboxController]; } #pragma mark SRGLetterboxViewDelegate protocol diff --git a/Demo/Sources/Demos/SimplePlayerViewController.m b/Demo/Sources/Demos/SimplePlayerViewController.m index c2910396c..8fe514afd 100644 --- a/Demo/Sources/Demos/SimplePlayerViewController.m +++ b/Demo/Sources/Demos/SimplePlayerViewController.m @@ -59,7 +59,7 @@ - (void)viewDidDisappear:(BOOL)animated if ([self isMovingFromParentViewController] || [self isBeingDismissed]) { if (! self.letterboxController.pictureInPictureActive) { [self.letterboxController reset]; - [[SRGLetterboxService sharedService] disable]; + [[SRGLetterboxService sharedService] disableForController:self.letterboxController]; } } } diff --git a/Demo/Sources/Demos/StandalonePlayerViewController.m b/Demo/Sources/Demos/StandalonePlayerViewController.m index c4ac0b7c3..c23fe610c 100644 --- a/Demo/Sources/Demos/StandalonePlayerViewController.m +++ b/Demo/Sources/Demos/StandalonePlayerViewController.m @@ -61,7 +61,7 @@ - (void)viewDidDisappear:(BOOL)animated if ([self isMovingFromParentViewController] || [self isBeingDismissed]) { if (! self.letterboxController.pictureInPictureActive) { [self.letterboxController reset]; - [[SRGLetterboxService sharedService] disable]; + [[SRGLetterboxService sharedService] disableForController:self.letterboxController]; } } } @@ -75,7 +75,7 @@ - (IBAction)useForService:(id)sender - (IBAction)resetService:(id)sender { - [[SRGLetterboxService sharedService] disable]; + [[SRGLetterboxService sharedService] disableForController:self.letterboxController]; } - (IBAction)toggleMirrored:(id)sender diff --git a/Framework/Sources/Service/SRGLetterboxService.h b/Framework/Sources/Service/SRGLetterboxService.h index dfcc529f6..eb5ab6e02 100644 --- a/Framework/Sources/Service/SRGLetterboxService.h +++ b/Framework/Sources/Service/SRGLetterboxService.h @@ -117,6 +117,11 @@ NS_ASSUME_NONNULL_BEGIN - (void)enableWithController:(SRGLetterboxController *)controller pictureInPictureDelegate:(nullable id)pictureInPictureDelegate; +/** + * Disable services iff the controller is the one currently attached to the service. Does nothing otherwise. + */ +- (void)disableForController:(SRGLetterboxController *)controller; + /** * Disable application-wide services (any playback using one of those services will be stopped). */ diff --git a/Framework/Sources/Service/SRGLetterboxService.m b/Framework/Sources/Service/SRGLetterboxService.m index b968f6876..986415579 100644 --- a/Framework/Sources/Service/SRGLetterboxService.m +++ b/Framework/Sources/Service/SRGLetterboxService.m @@ -192,6 +192,15 @@ - (void)enableWithController:(SRGLetterboxController *)controller pictureInPictu [[NSNotificationCenter defaultCenter] postNotificationName:SRGLetterboxServiceSettingsDidChangeNotification object:self]; } +- (void)disableForController:(SRGLetterboxController *)controller +{ + if (self.controller != controller) { + return; + } + + [self disable]; +} + - (void)disable { if (! self.controller && ! self.pictureInPictureDelegate) { From c487f8ac48f9073d74eb86ec8c18b6fe2b8f9f83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Tue, 14 Feb 2017 11:34:01 +0100 Subject: [PATCH 130/180] Avoid losing track of the AVPictureInPictureController delegate Picture in picture, when started and restored from / to the multi player several times in a row (switching between streams in the process) was sometimes losing the delegate and therefore incorrectly behaving afterwards --- Framework/Sources/Service/SRGLetterboxService.m | 2 -- 1 file changed, 2 deletions(-) diff --git a/Framework/Sources/Service/SRGLetterboxService.m b/Framework/Sources/Service/SRGLetterboxService.m index 986415579..bd36e2dd3 100644 --- a/Framework/Sources/Service/SRGLetterboxService.m +++ b/Framework/Sources/Service/SRGLetterboxService.m @@ -85,8 +85,6 @@ - (void)setController:(SRGLetterboxController *)controller [_controller reloadPlayerConfiguration]; SRGMediaPlayerController *previousMediaPlayerController = _controller.mediaPlayerController; - previousMediaPlayerController.pictureInPictureController.delegate = nil; - [previousMediaPlayerController removeObserver:self keyPath:@keypath(previousMediaPlayerController.pictureInPictureController.pictureInPictureActive)]; [[NSNotificationCenter defaultCenter] removeObserver:self From d8a901173dfaf2b36a849ddb7fdb630281393b68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Tue, 14 Feb 2017 15:06:00 +0100 Subject: [PATCH 131/180] Make implementation simpler --- Demo/Sources/Demos/ModalPlayerViewController.m | 13 ++++++------- Demo/Sources/Demos/MultiPlayerViewController.m | 13 ++++++------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/Demo/Sources/Demos/ModalPlayerViewController.m b/Demo/Sources/Demos/ModalPlayerViewController.m index b857d23b4..3f35462de 100644 --- a/Demo/Sources/Demos/ModalPlayerViewController.m +++ b/Demo/Sources/Demos/ModalPlayerViewController.m @@ -107,6 +107,12 @@ - (UIStatusBarAnimation)preferredStatusBarUpdateAnimation #pragma mark SRGLetterboxPictureInPictureDelegate protocol +- (BOOL)letterboxDismissUserInterfaceForPictureInPicture +{ + [self dismissViewControllerAnimated:YES completion:nil]; + return YES; +} + - (BOOL)letterboxShouldRestoreUserInterfaceForPictureInPicture { UIViewController *topPresentedViewController = [UIApplication sharedApplication].keyWindow.topPresentedViewController; @@ -121,13 +127,6 @@ - (void)letterboxRestoreUserInterfaceForPictureInPictureWithCompletionHandler:(v }]; } -- (BOOL)letterboxDismissUserInterfaceForPictureInPicture -{ - UIViewController *topPresentedViewController = [UIApplication sharedApplication].keyWindow.topPresentedViewController; - [topPresentedViewController dismissViewControllerAnimated:YES completion:nil]; - return YES; -} - - (void)letterboxDidStartPictureInPicture { [[SRGAnalyticsTracker sharedTracker] trackHiddenEventWithTitle:@"pip_start"]; diff --git a/Demo/Sources/Demos/MultiPlayerViewController.m b/Demo/Sources/Demos/MultiPlayerViewController.m index 747aca058..a07703650 100644 --- a/Demo/Sources/Demos/MultiPlayerViewController.m +++ b/Demo/Sources/Demos/MultiPlayerViewController.m @@ -98,6 +98,12 @@ - (void)viewDidDisappear:(BOOL)animated #pragma mark SRGLetterboxPictureInPictureDelegate protocol +- (BOOL)letterboxDismissUserInterfaceForPictureInPicture +{ + [self dismissViewControllerAnimated:YES completion:nil]; + return YES; +} + - (BOOL)letterboxShouldRestoreUserInterfaceForPictureInPicture { UIViewController *topPresentedViewController = [UIApplication sharedApplication].keyWindow.topPresentedViewController; @@ -112,13 +118,6 @@ - (void)letterboxRestoreUserInterfaceForPictureInPictureWithCompletionHandler:(v }]; } -- (BOOL)letterboxDismissUserInterfaceForPictureInPicture -{ - UIViewController *topPresentedViewController = [UIApplication sharedApplication].keyWindow.topPresentedViewController; - [topPresentedViewController dismissViewControllerAnimated:YES completion:nil]; - return YES; -} - - (void)letterboxDidStartPictureInPicture { [[SRGAnalyticsTracker sharedTracker] trackHiddenEventWithTitle:@"pip_start"]; From db9e291e88a8e2949fa761a2129b2fcf58596499 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Tue, 14 Feb 2017 15:12:07 +0100 Subject: [PATCH 132/180] Remove useless resets --- Demo/Sources/Demos/ModalPlayerViewController.m | 2 -- Demo/Sources/Demos/MultiPlayerViewController.m | 2 -- Demo/Sources/Demos/SimplePlayerViewController.m | 1 - Demo/Sources/Demos/StandalonePlayerViewController.m | 1 - 4 files changed, 6 deletions(-) diff --git a/Demo/Sources/Demos/ModalPlayerViewController.m b/Demo/Sources/Demos/ModalPlayerViewController.m index 3f35462de..66d11de39 100644 --- a/Demo/Sources/Demos/ModalPlayerViewController.m +++ b/Demo/Sources/Demos/ModalPlayerViewController.m @@ -87,7 +87,6 @@ - (void)viewDidDisappear:(BOOL)animated if ([self isMovingFromParentViewController] || [self isBeingDismissed]) { if (! self.letterboxController.pictureInPictureActive) { - [self.letterboxController reset]; [[SRGLetterboxService sharedService] disableForController:self.letterboxController]; } } @@ -139,7 +138,6 @@ - (void)letterboxDidEndPictureInPicture - (void)letterboxDidStopPlaybackFromPictureInPicture { - [self.letterboxController reset]; [[SRGLetterboxService sharedService] disableForController:self.letterboxController]; } diff --git a/Demo/Sources/Demos/MultiPlayerViewController.m b/Demo/Sources/Demos/MultiPlayerViewController.m index a07703650..1d83769f4 100644 --- a/Demo/Sources/Demos/MultiPlayerViewController.m +++ b/Demo/Sources/Demos/MultiPlayerViewController.m @@ -90,7 +90,6 @@ - (void)viewDidDisappear:(BOOL)animated if ([self isMovingFromParentViewController] || [self isBeingDismissed]) { if (! self.letterboxController.pictureInPictureActive) { - [self.letterboxController reset]; [[SRGLetterboxService sharedService] disableForController:self.letterboxController]; } } @@ -130,7 +129,6 @@ - (void)letterboxDidEndPictureInPicture - (void)letterboxDidStopPlaybackFromPictureInPicture { - [self.letterboxController reset]; [[SRGLetterboxService sharedService] disableForController:self.letterboxController]; } diff --git a/Demo/Sources/Demos/SimplePlayerViewController.m b/Demo/Sources/Demos/SimplePlayerViewController.m index 8fe514afd..6f0b9e0e1 100644 --- a/Demo/Sources/Demos/SimplePlayerViewController.m +++ b/Demo/Sources/Demos/SimplePlayerViewController.m @@ -58,7 +58,6 @@ - (void)viewDidDisappear:(BOOL)animated if ([self isMovingFromParentViewController] || [self isBeingDismissed]) { if (! self.letterboxController.pictureInPictureActive) { - [self.letterboxController reset]; [[SRGLetterboxService sharedService] disableForController:self.letterboxController]; } } diff --git a/Demo/Sources/Demos/StandalonePlayerViewController.m b/Demo/Sources/Demos/StandalonePlayerViewController.m index c23fe610c..31e8611f8 100644 --- a/Demo/Sources/Demos/StandalonePlayerViewController.m +++ b/Demo/Sources/Demos/StandalonePlayerViewController.m @@ -60,7 +60,6 @@ - (void)viewDidDisappear:(BOOL)animated if ([self isMovingFromParentViewController] || [self isBeingDismissed]) { if (! self.letterboxController.pictureInPictureActive) { - [self.letterboxController reset]; [[SRGLetterboxService sharedService] disableForController:self.letterboxController]; } } From 996db288a686a0ecb0aa3204ca7cf80f85db8839 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Bertholon Date: Tue, 14 Feb 2017 11:42:33 +0100 Subject: [PATCH 133/180] Update Controls UI for live streams in the periodical timer --- Framework/Sources/Views/SRGLetterboxView.m | 50 ++++++++++++---------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/Framework/Sources/Views/SRGLetterboxView.m b/Framework/Sources/Views/SRGLetterboxView.m index 8ea58f8a0..4a5f3dee7 100644 --- a/Framework/Sources/Views/SRGLetterboxView.m +++ b/Framework/Sources/Views/SRGLetterboxView.m @@ -250,12 +250,9 @@ - (void)setController:(SRGLetterboxController *)controller self.periodicTimeObserver = [mediaPlayerController addPeriodicTimeObserverForInterval:CMTimeMakeWithSeconds(1., NSEC_PER_SEC) queue:NULL usingBlock:^(CMTime time) { @strongify(self) @strongify(controller) - - self.forwardSeekButton.hidden = ![controller canSeekForward]; - self.backwardSeekButton.hidden = ![controller canSeekBackward]; + [self updateStreamTypeControlsForController:controller]; }]; - self.forwardSeekButton.hidden = ![controller canSeekForward]; - self.backwardSeekButton.hidden = ![controller canSeekBackward]; + [self updateStreamTypeControlsForController:controller]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mediaMetadataDidChange:) @@ -432,23 +429,7 @@ - (void)updateInterfaceAnimated:(BOOL)animated [self updateLoadingIndicatorForMediaPlayerController:mediaPlayerController]; - if (self.controller.media.contentType == SRGContentTypeLivestream) { - if (self.controller.mediaPlayerController.streamType == SRGMediaPlayerStreamTypeDVR) { - self.timeSlider.alpha = 1.f; - self.timeSlider.timeLeftValueLabel.alpha = 0.f; - self.timeSlider.timeLeftValueLabel.hidden = YES; - } - else { - self.timeSlider.alpha = 0.f; - self.timeSlider.timeLeftValueLabel.alpha = 1.f; - self.timeSlider.timeLeftValueLabel.hidden = NO; - } - } - else { - self.timeSlider.alpha = 1.f; - self.timeSlider.timeLeftValueLabel.alpha = 1.f; - self.timeSlider.timeLeftValueLabel.hidden = NO; - } + [self updateStreamTypeControlsForController:self.controller]; }; if (animated) { @@ -459,6 +440,31 @@ - (void)updateInterfaceAnimated:(BOOL)animated } } +- (void)updateStreamTypeControlsForController:(SRGLetterboxController *)controller { + self.forwardSeekButton.hidden = ![controller canSeekForward]; + self.backwardSeekButton.hidden = ![controller canSeekBackward]; + + if (controller.media.contentType == SRGContentTypeLivestream) { + if (controller.mediaPlayerController.streamType == SRGMediaPlayerStreamTypeDVR || + [controller canSeekBackward] || + [controller canSeekForward]) { + self.timeSlider.alpha = 1.f; + self.timeSlider.timeLeftValueLabel.alpha = 0.f; + self.timeSlider.timeLeftValueLabel.hidden = YES; + } + else { + self.timeSlider.alpha = 0.f; + self.timeSlider.timeLeftValueLabel.alpha = 1.f; + self.timeSlider.timeLeftValueLabel.hidden = NO; + } + } + else { + self.timeSlider.alpha = 1.f; + self.timeSlider.timeLeftValueLabel.alpha = 1.f; + self.timeSlider.timeLeftValueLabel.hidden = NO; + } +} + - (void)updateUserInterfaceTogglabilityForAirplayAnimated:(BOOL)animated { if (self.controller.mediaPlayerController.externalNonMirroredPlaybackActive) { From f4de5175341450428f917582f8519f5cbd52e894 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Bertholon Date: Tue, 14 Feb 2017 15:20:21 +0100 Subject: [PATCH 134/180] =?UTF-8?q?Add=20=C2=AB=C2=A0stop=C2=A0=C2=BB=20bu?= =?UTF-8?q?tton=20for=20live=20only?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Demo/Sources/Demos/DemosViewController.m | 8 ++++---- .../stop-50.imageset/Contents.json | 15 +++++++++++++++ .../stop-50.imageset/stop.pdf | Bin 0 -> 374828 bytes Framework/Sources/Views/SRGLetterboxView.m | 16 ++++++++++------ 4 files changed, 29 insertions(+), 10 deletions(-) create mode 100644 Framework/Resources/Images.xcassets/Player main controls/stop-50.imageset/Contents.json create mode 100644 Framework/Resources/Images.xcassets/Player main controls/stop-50.imageset/stop.pdf diff --git a/Demo/Sources/Demos/DemosViewController.m b/Demo/Sources/Demos/DemosViewController.m index 01c112a4d..4ad9115f9 100644 --- a/Demo/Sources/Demos/DemosViewController.m +++ b/Demo/Sources/Demos/DemosViewController.m @@ -96,21 +96,21 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath case 7: { SRGMediaURN *URN = [SRGMediaURN mediaURNWithString:@"urn:rts:video:1967124"]; - StandalonePlayerViewController *playerViewController = [[StandalonePlayerViewController alloc] initWithURN:URN]; + SimplePlayerViewController *playerViewController = [[SimplePlayerViewController alloc] initWithURN:URN]; [self.navigationController pushViewController:playerViewController animated:YES]; break; } case 8: { - SRGMediaURN *URN = [SRGMediaURN mediaURNWithString:@"urn:srf:video:c49c1d73-2f70-0001-138a-15e0c4ccd3d0"]; - StandalonePlayerViewController *playerViewController = [[StandalonePlayerViewController alloc] initWithURN:URN]; + SRGMediaURN *URN = [SRGMediaURN mediaURNWithString:@"urn:srf:ais:video:c49c1d73-2f70-0001-138a-15e0c4ccd3d0"]; + SimplePlayerViewController *playerViewController = [[SimplePlayerViewController alloc] initWithURN:URN]; [self.navigationController pushViewController:playerViewController animated:YES]; break; } case 9: { SRGMediaURN *URN = [SRGMediaURN mediaURNWithString:@"urn:rtr:audio:a029e818-77a5-4c2e-ad70-d573bb865e31"]; - StandalonePlayerViewController *playerViewController = [[StandalonePlayerViewController alloc] initWithURN:URN]; + SimplePlayerViewController *playerViewController = [[SimplePlayerViewController alloc] initWithURN:URN]; [self.navigationController pushViewController:playerViewController animated:YES]; break; } diff --git a/Framework/Resources/Images.xcassets/Player main controls/stop-50.imageset/Contents.json b/Framework/Resources/Images.xcassets/Player main controls/stop-50.imageset/Contents.json new file mode 100644 index 000000000..14ffa53ed --- /dev/null +++ b/Framework/Resources/Images.xcassets/Player main controls/stop-50.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "stop.pdf" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" + } +} \ No newline at end of file diff --git a/Framework/Resources/Images.xcassets/Player main controls/stop-50.imageset/stop.pdf b/Framework/Resources/Images.xcassets/Player main controls/stop-50.imageset/stop.pdf new file mode 100644 index 0000000000000000000000000000000000000000..27eeeb814ef72a396622391ea6e5447f63a4e8bb GIT binary patch literal 374828 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

4^(u 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�BoqZ1UC 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 JvZ_e({{d;4Hj4lN literal 0 HcmV?d00001 diff --git a/Framework/Sources/Views/SRGLetterboxView.m b/Framework/Sources/Views/SRGLetterboxView.m index 4a5f3dee7..8f973a4fe 100644 --- a/Framework/Sources/Views/SRGLetterboxView.m +++ b/Framework/Sources/Views/SRGLetterboxView.m @@ -233,8 +233,8 @@ - (void)setController:(SRGLetterboxController *)controller // Synchronize the slider popup and the loading indicator with the new controller state if (mediaPlayerController.playbackState == SRGMediaPlayerPlaybackStateIdle - || mediaPlayerController.playbackState == SRGMediaPlayerPlaybackStatePreparing - || mediaPlayerController.playbackState == SRGMediaPlayerPlaybackStateEnded) { + || mediaPlayerController.playbackState == SRGMediaPlayerPlaybackStatePreparing + || mediaPlayerController.playbackState == SRGMediaPlayerPlaybackStateEnded) { [self.timeSlider hidePopUpViewAnimated:NO]; } else { @@ -273,6 +273,7 @@ - (void)setController:(SRGLetterboxController *)controller [mediaPlayerController.view mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.equalTo(self.playerView); }]; + [self.playerView layoutIfNeeded]; } @@ -451,17 +452,20 @@ - (void)updateStreamTypeControlsForController:(SRGLetterboxController *)controll self.timeSlider.alpha = 1.f; self.timeSlider.timeLeftValueLabel.alpha = 0.f; self.timeSlider.timeLeftValueLabel.hidden = YES; + self.playbackButton.pauseImage = [UIImage imageNamed:@"pause-50" inBundle:[NSBundle srg_letterboxBundle] compatibleWithTraitCollection:nil]; } else { self.timeSlider.alpha = 0.f; self.timeSlider.timeLeftValueLabel.alpha = 1.f; self.timeSlider.timeLeftValueLabel.hidden = NO; + self.playbackButton.pauseImage = [UIImage imageNamed:@"stop-50" inBundle:[NSBundle srg_letterboxBundle] compatibleWithTraitCollection:nil]; } } else { self.timeSlider.alpha = 1.f; self.timeSlider.timeLeftValueLabel.alpha = 1.f; self.timeSlider.timeLeftValueLabel.hidden = NO; + self.playbackButton.pauseImage = [UIImage imageNamed:@"pause-50" inBundle:[NSBundle srg_letterboxBundle] compatibleWithTraitCollection:nil]; } } @@ -538,9 +542,9 @@ - (void)hideInterface:(NSTimer *)timer // of the player returns to playing, the inactivity timer will be reset (see -playbackStateDidChange:) SRGMediaPlayerController *mediaPlayerController = self.controller.mediaPlayerController; if (mediaPlayerController.playbackState == SRGMediaPlayerPlaybackStatePlaying - || mediaPlayerController.playbackState == SRGMediaPlayerPlaybackStateSeeking - || mediaPlayerController.playbackState == SRGMediaPlayerPlaybackStateStalled - || ! self.errorView.hidden) { + || mediaPlayerController.playbackState == SRGMediaPlayerPlaybackStateSeeking + || mediaPlayerController.playbackState == SRGMediaPlayerPlaybackStateStalled + || ! self.errorView.hidden) { [self setUserInterfaceHidden:YES animated:YES]; } } @@ -603,7 +607,7 @@ - (NSAttributedString *)slider:(ASValueTrackingSlider *)slider attributedStringF NSString *string = (self.timeSlider.isLive) ? NSLocalizedString(@"Live", nil) : [dateFormatter stringFromDate:[NSDate dateWithTimeIntervalSinceNow:self.timeSlider.value - self.timeSlider.maximumValue]]; [attributedString appendAttributedString:[[NSAttributedString alloc] initWithString:string attributes:@{ NSFontAttributeName : [UIFont srg_regularFontWithSize:13.f] }]]; - + return [attributedString copy]; } else { From 456dafc961f4b885124fd342671507be5257f1f9 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Bertholon Date: Tue, 14 Feb 2017 16:27:30 +0100 Subject: [PATCH 135/180] Seek to live for live only when playing --- .../Controller/SRGLetterboxController.m | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/Framework/Sources/Controller/SRGLetterboxController.m b/Framework/Sources/Controller/SRGLetterboxController.m index 28612d620..9041fb46c 100644 --- a/Framework/Sources/Controller/SRGLetterboxController.m +++ b/Framework/Sources/Controller/SRGLetterboxController.m @@ -424,6 +424,18 @@ - (void)seekForwardFromTime:(CMTime)time withCompletionHandler:(void (^)(BOOL fi }]; } +- (void)seekToLiveWithCompletionHandler:(void (^)(BOOL finished))completionHandler +{ + CMTimeRange timeRange = self.mediaPlayerController.timeRange; + + [self.mediaPlayerController seekToTime:CMTimeRangeGetEnd(timeRange) + withToleranceBefore:kCMTimePositiveInfinity + toleranceAfter:kCMTimePositiveInfinity + completionHandler:^(BOOL finished) { + completionHandler ? completionHandler(finished) : nil; + }]; +} + - (void)reloadPlayerConfiguration { [self.mediaPlayerController reloadPlayerConfiguration]; @@ -446,6 +458,19 @@ - (void)reachabilityDidChange:(NSNotification *)notification - (void)playbackStateDidChange:(NSNotification *)notification { SRGMediaPlayerPlaybackState playbackState = [notification.userInfo[SRGMediaPlayerPlaybackStateKey] integerValue]; + SRGMediaPlayerPlaybackState previousPlaybackState = [notification.userInfo[SRGMediaPlayerPreviousPlaybackStateKey] integerValue]; + + // Stop live stream only when pause it. + if (self.media.contentType == SRGContentTypeLivestream) { + if (self.mediaPlayerController.streamType != SRGMediaPlayerStreamTypeDVR && + ![self canSeekBackward] && + ![self canSeekForward] && + playbackState == SRGMediaPlayerPlaybackStatePlaying && + previousPlaybackState == SRGMediaPlayerPlaybackStatePaused) { + [self seekToLiveWithCompletionHandler:nil]; + } + } + if (playbackState != SRGMediaPlayerPlaybackStateSeeking) { self.seekTargetTime = kCMTimeInvalid; } From 4c795ed0e968321307f6aabfe1c3677ff17b8f93 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Bertholon Date: Tue, 14 Feb 2017 16:42:49 +0100 Subject: [PATCH 136/180] Fix URN in Demo --- Demo/Sources/Demos/DemosViewController.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Demo/Sources/Demos/DemosViewController.m b/Demo/Sources/Demos/DemosViewController.m index 4ad9115f9..8fd5b9a50 100644 --- a/Demo/Sources/Demos/DemosViewController.m +++ b/Demo/Sources/Demos/DemosViewController.m @@ -102,7 +102,7 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath } case 8: { - SRGMediaURN *URN = [SRGMediaURN mediaURNWithString:@"urn:srf:ais:video:c49c1d73-2f70-0001-138a-15e0c4ccd3d0"]; + SRGMediaURN *URN = [SRGMediaURN mediaURNWithString:@"urn:srf:video:c49c1d73-2f70-0001-138a-15e0c4ccd3d0"]; SimplePlayerViewController *playerViewController = [[SimplePlayerViewController alloc] initWithURN:URN]; [self.navigationController pushViewController:playerViewController animated:YES]; break; From 78ea57f67a1ce7ef6e9496331b12780ead53c45e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Tue, 14 Feb 2017 17:04:53 +0100 Subject: [PATCH 137/180] Implement content URL overriding for local playback support --- .../Controller/SRGLetterboxController.h | 22 ++++++++++ .../Controller/SRGLetterboxController.m | 42 +++++++++++++++++-- 2 files changed, 60 insertions(+), 4 deletions(-) diff --git a/Framework/Sources/Controller/SRGLetterboxController.h b/Framework/Sources/Controller/SRGLetterboxController.h index 11cb4403a..88a175ac9 100644 --- a/Framework/Sources/Controller/SRGLetterboxController.h +++ b/Framework/Sources/Controller/SRGLetterboxController.h @@ -8,6 +8,11 @@ NS_ASSUME_NONNULL_BEGIN +/** + * Types + */ +typedef NSURL * _Nullable (^SRGLetterboxURLOverridingBlock)(SRGMediaURN *URN); + /** * Notification sent when playback metadata is updated (use the dictionary keys below to get previous and new values) */ @@ -175,4 +180,21 @@ OBJC_EXTERN NSString * const SRGLetterboxErrorKey; @end +/** + * Overriding abilities. Player functionalities might be limited when overriding has been made. + */ +@interface SRGLetterboxController (Overriding) + +/** + * Provides a way to override the content URL which has been retrieved for a media. This is for example useful + * to replace the original URL with a local file URL. + * + * @discussion When a URL has been overridden, the player will only work with the media, not the full playback + * context (since the context is tightly related to the original content URL, this would open the + * door to several inconsistencies, most notably with segments) + */ +@property (nonatomic, copy, nullable) SRGLetterboxURLOverridingBlock contentURLOverridingBlock; + +@end + NS_ASSUME_NONNULL_END diff --git a/Framework/Sources/Controller/SRGLetterboxController.m b/Framework/Sources/Controller/SRGLetterboxController.m index 9041fb46c..3fee3140f 100644 --- a/Framework/Sources/Controller/SRGLetterboxController.m +++ b/Framework/Sources/Controller/SRGLetterboxController.m @@ -63,7 +63,8 @@ @interface SRGLetterboxController () // to a desired location @property (nonatomic) CMTime seekTargetTime; -@property (nonatomic, copy, nullable) void (^playerConfigurationBlock)(AVPlayer *player); +@property (nonatomic, copy) void (^playerConfigurationBlock)(AVPlayer *player); +@property (nonatomic, copy) SRGLetterboxURLOverridingBlock contentURLOverridingBlock; @property (nonatomic, getter=isTracked) BOOL tracked; @@ -255,6 +256,42 @@ - (void)playURN:(SRGMediaURN *)URN media:(SRGMedia *)media withPreferredQuality: } }]; + SRGDataProvider *dataProvider = [[SRGDataProvider alloc] initWithServiceURL:self.serviceURL + businessUnitIdentifier:SRGDataProviderBusinessUnitIdentifierForVendor(URN.vendor)]; + + // Apply overriding if available. Overriding requires at a media to be available. No media composition is retrieved + if (self.contentURLOverridingBlock) { + NSURL *contentURL = self.contentURLOverridingBlock(URN); + if (contentURL) { + // Media readily available. Done + if (media) { + [self.mediaPlayerController playURL:contentURL]; + } + // Retrieve the media + else { + void (^mediasCompletionBlock)(NSArray * _Nullable, NSError * _Nullable) = ^(NSArray * _Nullable medias, NSError * _Nullable error) { + if (error) { + [self.requestQueue reportError:error]; + return; + } + + [self updateWithURN:nil media:medias.firstObject mediaComposition:nil]; + [self.mediaPlayerController playURL:contentURL]; + }; + + if (URN.mediaType == SRGMediaTypeVideo) { + SRGRequest *mediaRequest = [dataProvider videosWithUids:@[URN.uid] completionBlock:mediasCompletionBlock]; + [self.requestQueue addRequest:mediaRequest resume:YES]; + } + else { + SRGRequest *mediaRequest = [dataProvider audiosWithUids:@[URN.uid] completionBlock:mediasCompletionBlock]; + [self.requestQueue addRequest:mediaRequest resume:YES]; + } + } + return; + } + } + void (^mediaCompositionCompletionBlock)(SRGMediaComposition * _Nullable, NSError * _Nullable) = ^(SRGMediaComposition * _Nullable mediaComposition, NSError * _Nullable error) { @strongify(self) @@ -283,9 +320,6 @@ - (void)playURN:(SRGMediaURN *)URN media:(SRGMedia *)media withPreferredQuality: } }; - SRGDataProvider *dataProvider = [[SRGDataProvider alloc] initWithServiceURL:self.serviceURL - businessUnitIdentifier:SRGDataProviderBusinessUnitIdentifierForVendor(URN.vendor)]; - if (URN.mediaType == SRGMediaTypeVideo) { SRGRequest *mediaCompositionRequest = [dataProvider mediaCompositionForVideoWithUid:URN.uid completionBlock:mediaCompositionCompletionBlock]; [self.requestQueue addRequest:mediaCompositionRequest resume:YES]; From 06a07c0700d1bf98845967cd0fd1994b53f1b612 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Tue, 14 Feb 2017 17:14:47 +0100 Subject: [PATCH 138/180] Remove useless dependency --- Cartfile | 3 --- 1 file changed, 3 deletions(-) diff --git a/Cartfile b/Cartfile index 6210e1fff..fd959ae95 100644 --- a/Cartfile +++ b/Cartfile @@ -8,6 +8,3 @@ github "SRGSSR/srganalytics-ios" "develop" github "SRGSSR/srgdataprovider-ios" "develop" github "SRGSSR/srglogger-ios" "develop" github "SRGSSR/SRGMediaPlayer-iOS" "develop" - -# For the demo app -github "bitstadium/HockeySDK-iOS" From 09ff38e9f3c135642bb7e3f1f58d2090e506ed53 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Bertholon Date: Tue, 14 Feb 2017 18:08:18 +0100 Subject: [PATCH 139/180] Add red popup for live --- Framework/Sources/Views/SRGLetterboxView.m | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Framework/Sources/Views/SRGLetterboxView.m b/Framework/Sources/Views/SRGLetterboxView.m index 8f973a4fe..7cda86545 100644 --- a/Framework/Sources/Views/SRGLetterboxView.m +++ b/Framework/Sources/Views/SRGLetterboxView.m @@ -595,6 +595,9 @@ - (NSAttributedString *)slider:(ASValueTrackingSlider *)slider attributedStringF { if (self.controller.media.contentType == SRGContentTypeLivestream) { + slider.popUpViewColor = (self.timeSlider.isLive) ? UIColor.redColor : UIColor.whiteColor; + slider.textColor = (self.timeSlider.isLive) ? UIColor.whiteColor : UIColor.blackColor; + static dispatch_once_t onceToken; static NSDateFormatter *dateFormatter; dispatch_once(&onceToken, ^{ @@ -611,6 +614,9 @@ - (NSAttributedString *)slider:(ASValueTrackingSlider *)slider attributedStringF return [attributedString copy]; } else { + slider.popUpViewColor = UIColor.whiteColor; + slider.textColor = UIColor.blackColor; + return [[NSAttributedString alloc] initWithString:self.timeSlider.valueString ?: @"--:--"]; } } From 5b37bad482b969e10cf6bc841c106e56fde1e545 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Bertholon Date: Tue, 14 Feb 2017 19:06:40 +0100 Subject: [PATCH 140/180] Add back to live button for DVR live stream --- .../back_live-35.imageset/Contents.json | 15 ++++++ .../back_live-35.imageset/back_live_35.pdf | Bin 0 -> 393048 bytes .../SRGLetterboxController+Private.h | 16 ++++++ .../Controller/SRGLetterboxController.m | 47 ++++++++++-------- Framework/Sources/Views/SRGLetterboxView.m | 7 +++ Framework/Sources/Views/SRGLetterboxView.xib | 28 ++++++++--- 6 files changed, 87 insertions(+), 26 deletions(-) create mode 100644 Framework/Resources/Images.xcassets/Player main controls/back_live-35.imageset/Contents.json create mode 100644 Framework/Resources/Images.xcassets/Player main controls/back_live-35.imageset/back_live_35.pdf diff --git a/Framework/Resources/Images.xcassets/Player main controls/back_live-35.imageset/Contents.json b/Framework/Resources/Images.xcassets/Player main controls/back_live-35.imageset/Contents.json new file mode 100644 index 000000000..71bc69023 --- /dev/null +++ b/Framework/Resources/Images.xcassets/Player main controls/back_live-35.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "back_live_35.pdf" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" + } +} \ No newline at end of file diff --git a/Framework/Resources/Images.xcassets/Player main controls/back_live-35.imageset/back_live_35.pdf b/Framework/Resources/Images.xcassets/Player main controls/back_live-35.imageset/back_live_35.pdf new file mode 100644 index 0000000000000000000000000000000000000000..39a2b9359b6656ecb0c746beed0f68cb3222b593 GIT binary patch literal 393048 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Œ_lcG;h{#eV+05!gF7yM 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

B1H|eEl3J=I`E=mXdN)hi_}?_ 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 Qhl867iIP%WK?3Q20SWE*egFUf literal 0 HcmV?d00001 diff --git a/Framework/Sources/Controller/SRGLetterboxController+Private.h b/Framework/Sources/Controller/SRGLetterboxController+Private.h index e12d9cf61..f4d8b8551 100644 --- a/Framework/Sources/Controller/SRGLetterboxController+Private.h +++ b/Framework/Sources/Controller/SRGLetterboxController+Private.h @@ -44,6 +44,14 @@ OBJC_EXTERN const NSInteger SRGLetterboxForwardSeekInterval; */ - (BOOL)canSeekForward; +/** + * Return YES iff the player can seek to play live + * + * @discussion For live stream only, and only possible if seeking wouldn't jump past the end. For DVR streams, + * possible until the stream is played live. + */ +- (BOOL)canSeekToLive; + /** * Seek backward from a standard amount of seconds. * @@ -60,6 +68,14 @@ OBJC_EXTERN const NSInteger SRGLetterboxForwardSeekInterval; */ - (void)seekForwardWithCompletionHandler:(nullable void (^)(BOOL finished))completionHandler; +/** + * Seek forward to the stream live, only for + * + * @discussion If seeking is not possible or if a seek is interrupted, the completion handler will be called with + * finished set to `NO`. + */ +- (void)seekToLiveWithCompletionHandler:(nullable void (^)(BOOL finished))completionHandler; + /** * Optional block which gets called right after player creation, when the player changes, or when the configuration is * reloaded by calling `-reloadPlayerConfiguration`. Does not get called when the player is set to `nil`. diff --git a/Framework/Sources/Controller/SRGLetterboxController.m b/Framework/Sources/Controller/SRGLetterboxController.m index 3fee3140f..c6807ee00 100644 --- a/Framework/Sources/Controller/SRGLetterboxController.m +++ b/Framework/Sources/Controller/SRGLetterboxController.m @@ -388,6 +388,11 @@ - (BOOL)canSeekForward return [self canSeekForwardFromTime:[self seekStartTime]]; } +- (BOOL)canSeekToLive +{ + return (self.media.contentType == SRGContentTypeLivestream && [self canSeekForward]); +} + - (void)seekBackwardWithCompletionHandler:(nullable void (^)(BOOL finished))completionHandler { [self seekBackwardFromTime:[self seekStartTime] withCompletionHandler:completionHandler]; @@ -426,7 +431,7 @@ - (BOOL)canSeekForwardFromTime:(CMTime)time || (mediaPlayerController.streamType == SRGMediaPlayerStreamTypeDVR && !mediaPlayerController.live); } -- (void)seekBackwardFromTime:(CMTime)time withCompletionHandler:(void (^)(BOOL finished))completionHandler +- (void)seekBackwardFromTime:(CMTime)time withCompletionHandler:(nullable void (^)(BOOL finished))completionHandler { if (![self canSeekBackwardFromTime:time]) { completionHandler ? completionHandler(NO) : nil; @@ -442,7 +447,7 @@ - (void)seekBackwardFromTime:(CMTime)time withCompletionHandler:(void (^)(BOOL f }]; } -- (void)seekForwardFromTime:(CMTime)time withCompletionHandler:(void (^)(BOOL finished))completionHandler +- (void)seekForwardFromTime:(CMTime)time withCompletionHandler:(nullable void (^)(BOOL finished))completionHandler { if (![self canSeekForwardFromTime:time]) { completionHandler ? completionHandler(NO) : nil; @@ -458,16 +463,18 @@ - (void)seekForwardFromTime:(CMTime)time withCompletionHandler:(void (^)(BOOL fi }]; } -- (void)seekToLiveWithCompletionHandler:(void (^)(BOOL finished))completionHandler +- (void)seekToLiveWithCompletionHandler:(nullable void (^)(BOOL finished))completionHandler { - CMTimeRange timeRange = self.mediaPlayerController.timeRange; - - [self.mediaPlayerController seekToTime:CMTimeRangeGetEnd(timeRange) - withToleranceBefore:kCMTimePositiveInfinity - toleranceAfter:kCMTimePositiveInfinity - completionHandler:^(BOOL finished) { - completionHandler ? completionHandler(finished) : nil; - }]; + if (self.media.contentType == SRGContentTypeLivestream) { + CMTimeRange timeRange = self.mediaPlayerController.timeRange; + + [self.mediaPlayerController seekEfficientlyToTime:CMTimeRangeGetEnd(timeRange) withCompletionHandler:^(BOOL finished) { + completionHandler ? completionHandler(finished) : nil; + }]; + } + else { + completionHandler ? completionHandler(NO) : nil; + } } - (void)reloadPlayerConfiguration @@ -494,15 +501,15 @@ - (void)playbackStateDidChange:(NSNotification *)notification SRGMediaPlayerPlaybackState playbackState = [notification.userInfo[SRGMediaPlayerPlaybackStateKey] integerValue]; SRGMediaPlayerPlaybackState previousPlaybackState = [notification.userInfo[SRGMediaPlayerPreviousPlaybackStateKey] integerValue]; - // Stop live stream only when pause it. - if (self.media.contentType == SRGContentTypeLivestream) { - if (self.mediaPlayerController.streamType != SRGMediaPlayerStreamTypeDVR && - ![self canSeekBackward] && - ![self canSeekForward] && - playbackState == SRGMediaPlayerPlaybackStatePlaying && - previousPlaybackState == SRGMediaPlayerPlaybackStatePaused) { - [self seekToLiveWithCompletionHandler:nil]; - } + // Seek to live for Live only stream, when it was paused. + if (self.media.contentType == SRGContentTypeLivestream && + self.mediaPlayerController.streamType != SRGMediaPlayerStreamTypeDVR && + ![self canSeekBackward] && + ![self canSeekForward] && + playbackState == SRGMediaPlayerPlaybackStatePlaying && + previousPlaybackState == SRGMediaPlayerPlaybackStatePaused) { + [self seekToLiveWithCompletionHandler:nil]; + } if (playbackState != SRGMediaPlayerPlaybackStateSeeking) { diff --git a/Framework/Sources/Views/SRGLetterboxView.m b/Framework/Sources/Views/SRGLetterboxView.m index 7cda86545..be88949c6 100644 --- a/Framework/Sources/Views/SRGLetterboxView.m +++ b/Framework/Sources/Views/SRGLetterboxView.m @@ -30,6 +30,7 @@ @interface SRGLetterboxView () @property (nonatomic, weak) IBOutlet ASValueTrackingSlider *timeSlider; @property (nonatomic, weak) IBOutlet UIButton *forwardSeekButton; @property (nonatomic, weak) IBOutlet UIButton *backwardSeekButton; +@property (nonatomic, weak) IBOutlet UIButton *seekToLiveButton; @property (nonatomic, weak) UIImageView *loadingImageView; @@ -444,6 +445,7 @@ - (void)updateInterfaceAnimated:(BOOL)animated - (void)updateStreamTypeControlsForController:(SRGLetterboxController *)controller { self.forwardSeekButton.hidden = ![controller canSeekForward]; self.backwardSeekButton.hidden = ![controller canSeekBackward]; + self.seekToLiveButton.hidden = ![controller canSeekToLive]; if (controller.media.contentType == SRGContentTypeLivestream) { if (controller.mediaPlayerController.streamType == SRGMediaPlayerStreamTypeDVR || @@ -566,6 +568,11 @@ - (IBAction)toggleFullScreen:(id)sender [self setFullScreen:!self.isFullScreen animated:YES]; } +- (IBAction)seekToLive:(id)sender +{ + [self.controller seekToLiveWithCompletionHandler:nil]; +} + #pragma mark Data display - (void)reloadDataAnimated:(BOOL)animated diff --git a/Framework/Sources/Views/SRGLetterboxView.xib b/Framework/Sources/Views/SRGLetterboxView.xib index 3f3622ec8..33530399e 100644 --- a/Framework/Sources/Views/SRGLetterboxView.xib +++ b/Framework/Sources/Views/SRGLetterboxView.xib @@ -1,5 +1,5 @@ - - + + @@ -29,6 +29,7 @@ + @@ -67,12 +68,15 @@ + + + + @@ -174,13 +187,15 @@ - + + + - + @@ -242,6 +257,7 @@ + From bc008ad26d0dfb9121c43ae000932cd192934fa8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Wed, 15 Feb 2017 06:21:05 +0100 Subject: [PATCH 141/180] Update media player library with picture in picture notification fix --- Cartfile.resolved | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Cartfile.resolved b/Cartfile.resolved index 55c2bc550..ed9f6113a 100644 --- a/Cartfile.resolved +++ b/Cartfile.resolved @@ -1,13 +1,12 @@ github "comScore/ComScore-iOS-SDK" "92f34897cd7659d56bb5a3e9e85b808cf3758bda" github "SRGSSR/FXReachability" "3cad7998f717145c90ff97eef552053d66063339" -github "bitstadium/HockeySDK-iOS" "4.1.3" github "SRGSSR/MAKVONotificationCenter" "4a127e52997889729286510103f7e27100223730" github "Mantle/Mantle" "2.1.0" github "SnapKit/Masonry" "v1.0.2" github "ibireme/YYWebImage" "1.0.5" github "ashaman/libextobjc" "e24f2be3af2cf7fc88a78295f116ef98d0832bcf" github "SRGSSR/srglogger-ios" "9a911766b46432d9a21d8b04fd4325b537b6e7b2" -github "SRGSSR/SRGMediaPlayer-iOS" "b7bedcc03f51e7a76a0d8d0b1ab49816130a3ee4" +github "SRGSSR/SRGMediaPlayer-iOS" "ecad1e8627a5f1797e680557149dd54630fe7f5a" github "SRGSSR/srgdataprovider-ios" "c9f2ccaca2efdc3355cf93ec683e7e0931e79903" github "SRGSSR/ASValueTrackingSlider" "e3a7efddc2ce1f4c1e830740be6221f5b3f1c4fe" github "SRGSSR/srganalytics-ios" "13524dc7dbe1f6bb3d93abab8f8067577a6fc023" From 0db4d2fc7ad6d3d71383de7c45724b29cbc67874 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Wed, 15 Feb 2017 07:14:10 +0100 Subject: [PATCH 142/180] Fix incomplete text --- Framework/Sources/Controller/SRGLetterboxController+Private.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Framework/Sources/Controller/SRGLetterboxController+Private.h b/Framework/Sources/Controller/SRGLetterboxController+Private.h index f4d8b8551..5fa8cde98 100644 --- a/Framework/Sources/Controller/SRGLetterboxController+Private.h +++ b/Framework/Sources/Controller/SRGLetterboxController+Private.h @@ -69,7 +69,7 @@ OBJC_EXTERN const NSInteger SRGLetterboxForwardSeekInterval; - (void)seekForwardWithCompletionHandler:(nullable void (^)(BOOL finished))completionHandler; /** - * Seek forward to the stream live, only for + * Seek forward to live conditions. * * @discussion If seeking is not possible or if a seek is interrupted, the completion handler will be called with * finished set to `NO`. From c9c6ca30bbb30d9e125b2e099dcad7746a8d27f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20De=CC=81fago?= Date: Wed, 15 Feb 2017 07:24:22 +0100 Subject: [PATCH 143/180] Fix broken layout Player layout was internally broken (visible by running the modal demo on an iPad, for example) --- Framework/Sources/Views/SRGLetterboxView.xib | 54 +++++++++----------- 1 file changed, 25 insertions(+), 29 deletions(-) diff --git a/Framework/Sources/Views/SRGLetterboxView.xib b/Framework/Sources/Views/SRGLetterboxView.xib index 33530399e..340701683 100644 --- a/Framework/Sources/Views/SRGLetterboxView.xib +++ b/Framework/Sources/Views/SRGLetterboxView.xib @@ -1,5 +1,5 @@ - - + + @@ -29,7 +29,7 @@ - + @@ -49,7 +49,7 @@