├── .gitignore ├── LICENSE ├── PlayerUI ├── Class │ ├── JGProgressHUD │ │ ├── JGProgressHUD Resources.bundle │ │ │ ├── jg_hud_error.png │ │ │ ├── jg_hud_error@2x.png │ │ │ ├── jg_hud_error@3x.png │ │ │ ├── jg_hud_success.png │ │ │ ├── jg_hud_success@2x.png │ │ │ └── jg_hud_success@3x.png │ │ ├── JGProgressHUD-Defines.h │ │ ├── JGProgressHUD.h │ │ ├── JGProgressHUD.m │ │ ├── JGProgressHUDAnimation.h │ │ ├── JGProgressHUDAnimation.m │ │ ├── JGProgressHUDErrorIndicatorView.h │ │ ├── JGProgressHUDErrorIndicatorView.m │ │ ├── JGProgressHUDFadeAnimation.h │ │ ├── JGProgressHUDFadeAnimation.m │ │ ├── JGProgressHUDFadeZoomAnimation.h │ │ ├── JGProgressHUDFadeZoomAnimation.m │ │ ├── JGProgressHUDImageIndicatorView.h │ │ ├── JGProgressHUDImageIndicatorView.m │ │ ├── JGProgressHUDIndeterminateIndicatorView.h │ │ ├── JGProgressHUDIndeterminateIndicatorView.m │ │ ├── JGProgressHUDIndicatorView.h │ │ ├── JGProgressHUDIndicatorView.m │ │ ├── JGProgressHUDPieIndicatorView.h │ │ ├── JGProgressHUDPieIndicatorView.m │ │ ├── JGProgressHUDRingIndicatorView.h │ │ ├── JGProgressHUDRingIndicatorView.m │ │ ├── JGProgressHUDSuccessIndicatorView.h │ │ └── JGProgressHUDSuccessIndicatorView.m │ ├── UIWindow+YzdHUD.h │ ├── UIWindow+YzdHUD.m │ ├── YzdHUDBackgroundView.h │ ├── YzdHUDBackgroundView.m │ ├── YzdHUDImageView.h │ ├── YzdHUDImageView.m │ ├── YzdHUDIndicator.h │ ├── YzdHUDIndicator.m │ ├── YzdHUDLabel.h │ └── YzdHUDLabel.m ├── PlayerManager.h ├── PlayerManager.m ├── Resuce │ ├── bg_screen_shot_complete.png │ ├── bg_screen_shot_frame.png │ ├── bright_point.png │ ├── brightness_bgiphone.png │ ├── brightness_bg~iphone@3x.png │ ├── danmu.png │ ├── danmu_h.png │ ├── ic_screen_shot.png │ ├── icon_bottomview_brightness_button_normal.png │ ├── icon_bottomview_brightness_button_selected.png │ ├── icon_bottomview_pause_button_normal.png │ ├── icon_bottomview_play_button_normal.png │ ├── icon_bottomview_volume_button_normal.png │ ├── icon_bottomview_volume_button_selected.png │ ├── icon_play_status.png │ ├── icon_screen_shot_action.png │ ├── icon_topview_left__button_selected.png │ ├── icon_topview_left_button_normal.png │ ├── icon_topview_right_button_normal.png │ ├── icon_topview_right_button_selected.png │ └── loading.png ├── UCloudBrightnessView.h ├── UCloudBrightnessView.m ├── UCloudLoadingView.h ├── UCloudLoadingView.m ├── UCloudMediaViewController.h ├── UCloudMediaViewController.m ├── UCloudMediaViewController.xib ├── UCloudProgressView.h ├── UCloudProgressView.m ├── UCloudReachability.h └── UCloudReachability.m ├── README.md ├── demo ├── UCloudDemo.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── UCloudDemo │ ├── AppDelegate.h │ ├── AppDelegate.m │ ├── Base.lproj │ │ ├── LaunchScreen.xib │ │ └── Main.storyboard │ ├── Images.xcassets │ │ ├── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── ic_launcher1.png │ │ │ └── ucloud_logo(1).png │ │ ├── Contents.json │ │ ├── logo-6.imageset │ │ │ ├── Contents.json │ │ │ └── logo-6.png │ │ └── setting.imageset │ │ │ ├── Contents.json │ │ │ └── setting.pdf │ ├── Info.plist │ ├── UCloudMediaViewController.h │ ├── UCloudMediaViewController.m │ ├── UCloudMediaViewController.xib │ ├── UMMobClick.framework │ │ ├── Headers │ │ ├── UMMobClick │ │ └── Versions │ │ │ ├── A │ │ │ ├── Headers │ │ │ │ ├── MobClick.h │ │ │ │ ├── MobClickGameAnalytics.h │ │ │ │ └── MobClickSocialAnalytics.h │ │ │ └── UMMobClick │ │ │ └── Current │ ├── ViewController.h │ ├── ViewController.m │ ├── en.lproj │ │ └── Main.strings │ └── main.m └── UCloudDemoTests │ ├── Info.plist │ └── UCloudDemoTests.m ├── docs └── appledoc │ ├── docset-installed.txt │ ├── docset │ └── Contents │ │ ├── Info.plist │ │ └── Resources │ │ ├── Documents │ │ ├── Blocks │ │ │ └── UCloudMediaCompletionBlock.html │ │ ├── Classes │ │ │ ├── UCloudMediaPlayer.html │ │ │ ├── UDAbstractDatabaseLogger.html │ │ │ ├── UVAbstractLogger.html │ │ │ ├── UVFileLogger.html │ │ │ ├── UVLog.html │ │ │ ├── UVLogFileFormatterDefault.html │ │ │ ├── UVLogFileInfo.html │ │ │ ├── UVLogFileManagerDefault.html │ │ │ ├── UVLogMessage.html │ │ │ └── UVTTYLogger.html │ │ ├── Constants │ │ │ ├── DecodeMethod.html │ │ │ ├── Definition.html │ │ │ ├── ErrorNum.html │ │ │ ├── SubErrorCode.html │ │ │ ├── UCloudMediaEvent.html │ │ │ ├── UVLogFlag.html │ │ │ ├── UVLogLevel.html │ │ │ ├── UVLogMessageOptions.html │ │ │ └── UrlType.html │ │ ├── Protocols │ │ │ ├── UCloudMediaSegmentResolver.html │ │ │ ├── UCloudPlayback.html │ │ │ ├── UVLogFileManager.html │ │ │ ├── UVLogFormatter.html │ │ │ ├── UVLogger.html │ │ │ └── UVRegistereUVynamicLogging.html │ │ ├── css │ │ │ ├── scss │ │ │ │ ├── _index.scss │ │ │ │ ├── _layout.scss │ │ │ │ ├── _normalize.scss │ │ │ │ ├── _object.scss │ │ │ │ ├── _print.scss │ │ │ │ ├── _variables.scss │ │ │ │ ├── _xcode.scss │ │ │ │ └── style.scss │ │ │ └── style.css │ │ ├── hierarchy.html │ │ ├── img │ │ │ ├── button_bar_background.png │ │ │ ├── disclosure.png │ │ │ ├── disclosure_open.png │ │ │ ├── library_background.png │ │ │ └── title_background.png │ │ ├── index.html │ │ └── js │ │ │ └── script.js │ │ ├── Nodes.xml │ │ ├── Tokens1.xml │ │ ├── Tokens10.xml │ │ ├── Tokens11.xml │ │ ├── Tokens12.xml │ │ ├── Tokens13.xml │ │ ├── Tokens14.xml │ │ ├── Tokens15.xml │ │ ├── Tokens16.xml │ │ ├── Tokens17.xml │ │ ├── Tokens18.xml │ │ ├── Tokens19.xml │ │ ├── Tokens2.xml │ │ ├── Tokens20.xml │ │ ├── Tokens21.xml │ │ ├── Tokens22.xml │ │ ├── Tokens23.xml │ │ ├── Tokens24.xml │ │ ├── Tokens25.xml │ │ ├── Tokens26.xml │ │ ├── Tokens3.xml │ │ ├── Tokens4.xml │ │ ├── Tokens5.xml │ │ ├── Tokens6.xml │ │ ├── Tokens7.xml │ │ ├── Tokens8.xml │ │ ├── Tokens9.xml │ │ ├── docSet.dsidx │ │ ├── docSet.dsidx-shm │ │ ├── docSet.dsidx-wal │ │ ├── docSet.mom │ │ ├── docSet.skidx │ │ ├── docSet.toc │ │ └── docSet.tokencache │ └── html │ ├── Blocks │ └── UCloudMediaCompletionBlock.html │ ├── Classes │ ├── UCloudMediaPlayer.html │ ├── UDAbstractDatabaseLogger.html │ ├── UVAbstractLogger.html │ ├── UVFileLogger.html │ ├── UVLog.html │ ├── UVLogFileFormatterDefault.html │ ├── UVLogFileInfo.html │ ├── UVLogFileManagerDefault.html │ ├── UVLogMessage.html │ └── UVTTYLogger.html │ ├── Constants │ ├── DecodeMethod.html │ ├── Definition.html │ ├── ErrorNum.html │ ├── SubErrorCode.html │ ├── UCloudMediaEvent.html │ ├── UVLogFlag.html │ ├── UVLogLevel.html │ ├── UVLogMessageOptions.html │ └── UrlType.html │ ├── Protocols │ ├── UCloudMediaSegmentResolver.html │ ├── UCloudPlayback.html │ ├── UVLogFileManager.html │ ├── UVLogFormatter.html │ ├── UVLogger.html │ └── UVRegistereUVynamicLogging.html │ ├── css │ ├── scss │ │ ├── _index.scss │ │ ├── _layout.scss │ │ ├── _normalize.scss │ │ ├── _object.scss │ │ ├── _print.scss │ │ ├── _variables.scss │ │ ├── _xcode.scss │ │ └── style.scss │ └── style.css │ ├── hierarchy.html │ ├── img │ ├── button_bar_background.png │ ├── disclosure.png │ ├── disclosure_open.png │ ├── library_background.png │ └── title_background.png │ ├── index.html │ └── js │ └── script.js ├── lib └── Player │ ├── UCloudMediaModule.h │ ├── UCloudMediaPlayback.h │ ├── UCloudMediaPlayer.h │ ├── UCloudPlayback.h │ └── libUCloudMediaPlayer.a └── screenshot ├── player1.jpeg ├── player2.jpeg ├── vod_download.png └── work_ticket.png /.gitignore: -------------------------------------------------------------------------------- 1 | # OSX 2 | .DS_Store 3 | 4 | # Xcode 5 | *.ipa 6 | *.xcuserstate 7 | *.xccheckout 8 | *.pbxuser 9 | *.xcuserdata 10 | xcuserdata -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2016 UCloud Media Development Kits 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /PlayerUI/Class/JGProgressHUD/JGProgressHUD Resources.bundle/jg_hud_error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/PlayerUI/Class/JGProgressHUD/JGProgressHUD Resources.bundle/jg_hud_error.png -------------------------------------------------------------------------------- /PlayerUI/Class/JGProgressHUD/JGProgressHUD Resources.bundle/jg_hud_error@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/PlayerUI/Class/JGProgressHUD/JGProgressHUD Resources.bundle/jg_hud_error@2x.png -------------------------------------------------------------------------------- /PlayerUI/Class/JGProgressHUD/JGProgressHUD Resources.bundle/jg_hud_error@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/PlayerUI/Class/JGProgressHUD/JGProgressHUD Resources.bundle/jg_hud_error@3x.png -------------------------------------------------------------------------------- /PlayerUI/Class/JGProgressHUD/JGProgressHUD Resources.bundle/jg_hud_success.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/PlayerUI/Class/JGProgressHUD/JGProgressHUD Resources.bundle/jg_hud_success.png -------------------------------------------------------------------------------- /PlayerUI/Class/JGProgressHUD/JGProgressHUD Resources.bundle/jg_hud_success@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/PlayerUI/Class/JGProgressHUD/JGProgressHUD Resources.bundle/jg_hud_success@2x.png -------------------------------------------------------------------------------- /PlayerUI/Class/JGProgressHUD/JGProgressHUD Resources.bundle/jg_hud_success@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/PlayerUI/Class/JGProgressHUD/JGProgressHUD Resources.bundle/jg_hud_success@3x.png -------------------------------------------------------------------------------- /PlayerUI/Class/JGProgressHUD/JGProgressHUD-Defines.h: -------------------------------------------------------------------------------- 1 | // 2 | // JGProgressHUD-Defines.h 3 | // JGProgressHUD 4 | // 5 | // Created by Jonas Gessner on 28.04.15. 6 | // Copyright (c) 2015 Jonas Gessner. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | /** 12 | Positions of the HUD. 13 | */ 14 | typedef NS_ENUM(NSUInteger, JGProgressHUDPosition) { 15 | /** Center position. */ 16 | JGProgressHUDPositionCenter = 0, 17 | /** Top left position. */ 18 | JGProgressHUDPositionTopLeft, 19 | /** Top center position. */ 20 | JGProgressHUDPositionTopCenter, 21 | /** Top right position. */ 22 | JGProgressHUDPositionTopRight, 23 | /** Center left position. */ 24 | JGProgressHUDPositionCenterLeft, 25 | /** Center right position. */ 26 | JGProgressHUDPositionCenterRight, 27 | /** Bottom left position. */ 28 | JGProgressHUDPositionBottomLeft, 29 | /** Bottom center position. */ 30 | JGProgressHUDPositionBottomCenter, 31 | /** Bottom right position. */ 32 | JGProgressHUDPositionBottomRight 33 | }; 34 | 35 | /** 36 | Appearance styles of the HUD. 37 | */ 38 | typedef NS_ENUM(NSUInteger, JGProgressHUDStyle) { 39 | /** Extra light HUD with dark elements. */ 40 | JGProgressHUDStyleExtraLight = 0, 41 | /** Light HUD with dark elemets. */ 42 | JGProgressHUDStyleLight, 43 | /** Dark HUD with light elements. */ 44 | JGProgressHUDStyleDark 45 | }; 46 | 47 | /** 48 | Interaction types. 49 | */ 50 | typedef NS_ENUM(NSUInteger, JGProgressHUDInteractionType) { 51 | /** Block all touches. No interaction behin the HUD is possible. */ 52 | JGProgressHUDInteractionTypeBlockAllTouches = 0, 53 | /** Block touches on the HUD view. */ 54 | JGProgressHUDInteractionTypeBlockTouchesOnHUDView, 55 | /** Block no touches. */ 56 | JGProgressHUDInteractionTypeBlockNoTouches 57 | }; 58 | 59 | /** 60 | Parallax Modes. 61 | */ 62 | typedef NS_ENUM(NSUInteger, JGProgressHUDParallaxMode) { 63 | /** Follows the device setting for parallax. If "Reduce Motion" is enabled, no parallax effect is added to the HUD, if "Reduce Motion" is disabled the HUD will have a parallax effect. This behaviour is only supported on iOS 8 and higher. */ 64 | JGProgressHUDParallaxModeDevice = 0, 65 | /** Always adds a parallax effect to the HUD. Parallax is only supported on iOS 7 and higher. */ 66 | JGProgressHUDParallaxModeAlwaysOn, 67 | /** Never adds a parallax effect to the HUD. */ 68 | JGProgressHUDParallaxModeAlwaysOff 69 | }; 70 | 71 | #ifndef fequal 72 | /** 73 | Macro for safe floating point comparison (for internal use in JGProgressHUD). 74 | */ 75 | #define fequal(a,b) (fabs((a) - (b)) < FLT_EPSILON) 76 | #endif 77 | -------------------------------------------------------------------------------- /PlayerUI/Class/JGProgressHUD/JGProgressHUDAnimation.h: -------------------------------------------------------------------------------- 1 | // 2 | // JGProgressHUDAnimation.h 3 | // JGProgressHUD 4 | // 5 | // Created by Jonas Gessner on 20.7.14. 6 | // Copyright (c) 2014 Jonas Gessner. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | @class JGProgressHUD; 13 | 14 | /** 15 | You may subclass this class to create a custom progress indicator view. 16 | */ 17 | @interface JGProgressHUDAnimation : NSObject 18 | 19 | /** 20 | Convenience method for initializing an animation. 21 | */ 22 | + (instancetype)animation; 23 | 24 | 25 | 26 | 27 | /** 28 | The HUD which uses this animation. 29 | */ 30 | @property (nonatomic, weak, readonly) JGProgressHUD *progressHUD; 31 | 32 | /** 33 | The @c progressHUD is hidden from screen with @c alpha = 1 and @c hidden = @c YES. Ideally, you should prepare the HUD for presentation, then set @c hidden to @c NO on the @c progressHUD and then perform the animation. 34 | @post Call @c animationFinished. 35 | */ 36 | - (void)show NS_REQUIRES_SUPER; 37 | 38 | /** 39 | The @c progressHUD wis visible on screen with @c alpha = 1 and @c hidden = @c NO. You should only perform the animation in this method, the @c progressHUD itself will take care of hiding itself and removing itself from superview. 40 | @post Call @c animationFinished. 41 | */ 42 | - (void)hide NS_REQUIRES_SUPER; 43 | 44 | /** 45 | @pre This method should only be called at the end of a @c show or @c hide animaiton. 46 | @attention ALWAYS call this method after completing a @c show or @c hide animation. 47 | */ 48 | - (void)animationFinished NS_REQUIRES_SUPER; 49 | 50 | @end 51 | -------------------------------------------------------------------------------- /PlayerUI/Class/JGProgressHUD/JGProgressHUDAnimation.m: -------------------------------------------------------------------------------- 1 | // 2 | // JGProgressHUDAnimation.m 3 | // JGProgressHUD 4 | // 5 | // Created by Jonas Gessner on 20.7.14. 6 | // Copyright (c) 2014 Jonas Gessner. All rights reserved. 7 | // 8 | 9 | #import "JGProgressHUDAnimation.h" 10 | #import "JGProgressHUD.h" 11 | 12 | @interface JGProgressHUD (Private) 13 | 14 | - (void)animationDidFinish:(BOOL)presenting; 15 | 16 | @end 17 | 18 | @interface JGProgressHUDAnimation () { 19 | BOOL _presenting; 20 | } 21 | 22 | @property (nonatomic, weak) JGProgressHUD *progressHUD; 23 | 24 | @end 25 | 26 | @implementation JGProgressHUDAnimation 27 | 28 | #pragma mark - Initializers 29 | 30 | + (instancetype)animation { 31 | return [[self alloc] init]; 32 | } 33 | 34 | #pragma mark - Public methods 35 | 36 | - (void)show { 37 | _presenting = YES; 38 | } 39 | 40 | - (void)hide { 41 | _presenting = NO; 42 | } 43 | 44 | - (void)animationFinished { 45 | [self.progressHUD animationDidFinish:_presenting]; 46 | } 47 | 48 | @end 49 | -------------------------------------------------------------------------------- /PlayerUI/Class/JGProgressHUD/JGProgressHUDErrorIndicatorView.h: -------------------------------------------------------------------------------- 1 | // 2 | // JGProgressHUDErrorIndicatorView.h 3 | // JGProgressHUD 4 | // 5 | // Created by Jonas Gessner on 19.08.14. 6 | // Copyright (c) 2014 Jonas Gessner. All rights reserved. 7 | // 8 | 9 | #import "JGProgressHUDImageIndicatorView.h" 10 | 11 | @interface JGProgressHUDErrorIndicatorView : JGProgressHUDImageIndicatorView 12 | 13 | /** 14 | Default initializer for this class. 15 | */ 16 | - (instancetype)init; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /PlayerUI/Class/JGProgressHUD/JGProgressHUDErrorIndicatorView.m: -------------------------------------------------------------------------------- 1 | // 2 | // JGProgressHUDErrorIndicatorView.m 3 | // JGProgressHUD 4 | // 5 | // Created by Jonas Gessner on 19.08.14. 6 | // Copyright (c) 2014 Jonas Gessner. All rights reserved. 7 | // 8 | 9 | #import "JGProgressHUDErrorIndicatorView.h" 10 | #import "JGProgressHUD.h" 11 | 12 | @implementation JGProgressHUDErrorIndicatorView 13 | 14 | - (instancetype)initWithContentView:(UIView *__unused)contentView { 15 | NSBundle *resourceBundle = [NSBundle bundleWithPath:[[NSBundle bundleForClass:[JGProgressHUD class]] pathForResource:@"JGProgressHUD Resources" ofType:@"bundle"]]; 16 | 17 | NSString *imgPath = [resourceBundle pathForResource:@"jg_hud_error" ofType:@"png"]; 18 | 19 | self = [super initWithImage:[UIImage imageWithContentsOfFile:imgPath]]; 20 | 21 | return self; 22 | } 23 | 24 | - (instancetype)init { 25 | return [self initWithContentView:nil]; 26 | } 27 | 28 | - (void)updateAccessibility { 29 | self.accessibilityLabel = NSLocalizedString(@"Error",); 30 | } 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /PlayerUI/Class/JGProgressHUD/JGProgressHUDFadeAnimation.h: -------------------------------------------------------------------------------- 1 | // 2 | // JGProgressHUDFadeAnimation.h 3 | // JGProgressHUD 4 | // 5 | // Created by Jonas Gessner on 20.7.14. 6 | // Copyright (c) 2014 Jonas Gessner. All rights reserved. 7 | // 8 | 9 | #import "JGProgressHUDAnimation.h" 10 | 11 | @interface JGProgressHUDFadeAnimation : JGProgressHUDAnimation 12 | 13 | /** 14 | Duration of the animation. 15 | 16 | @b Default: 0.4. 17 | */ 18 | @property (nonatomic, assign) NSTimeInterval duration; 19 | 20 | /** 21 | Animation options 22 | 23 | @b Default: UIViewAnimationOptionCurveEaseInOut. 24 | */ 25 | @property (nonatomic, assign) UIViewAnimationOptions animationOptions; 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /PlayerUI/Class/JGProgressHUD/JGProgressHUDFadeAnimation.m: -------------------------------------------------------------------------------- 1 | // 2 | // JGProgressHUDFadeAnimation.m 3 | // JGProgressHUD 4 | // 5 | // Created by Jonas Gessner on 20.7.14. 6 | // Copyright (c) 2014 Jonas Gessner. All rights reserved. 7 | // 8 | 9 | #import "JGProgressHUDFadeAnimation.h" 10 | #import "JGProgressHUD.h" 11 | 12 | @implementation JGProgressHUDFadeAnimation 13 | 14 | #pragma mark - Initializers 15 | 16 | - (instancetype)init { 17 | self = [super init]; 18 | if (self) { 19 | self.duration = 0.4; 20 | self.animationOptions = UIViewAnimationOptionCurveEaseInOut; 21 | } 22 | return self; 23 | } 24 | 25 | - (void)setAnimationOptions:(UIViewAnimationOptions)animationOptions { 26 | _animationOptions = (animationOptions | UIViewAnimationOptionBeginFromCurrentState); 27 | } 28 | 29 | #pragma mark - Showing 30 | 31 | - (void)show { 32 | [super show]; 33 | 34 | self.progressHUD.alpha = 0.0f; 35 | 36 | self.progressHUD.hidden = NO; 37 | 38 | [UIView animateWithDuration:self.duration delay:0.0 options:self.animationOptions animations:^{ 39 | self.progressHUD.alpha = 1.0f; 40 | } completion:^(BOOL __unused finished) { 41 | [self animationFinished]; 42 | }]; 43 | } 44 | 45 | #pragma mark - Hiding 46 | 47 | - (void)hide { 48 | [super hide]; 49 | 50 | [UIView animateWithDuration:self.duration delay:0.0 options:self.animationOptions animations:^{ 51 | self.progressHUD.alpha = 0.0f; 52 | } completion:^(BOOL __unused finished) { 53 | [self animationFinished]; 54 | }]; 55 | } 56 | 57 | @end 58 | -------------------------------------------------------------------------------- /PlayerUI/Class/JGProgressHUD/JGProgressHUDFadeZoomAnimation.h: -------------------------------------------------------------------------------- 1 | // 2 | // JGProgressHUDFadeZoomAnimation.h 3 | // JGProgressHUD 4 | // 5 | // Created by Jonas Gessner on 20.7.14. 6 | // Copyright (c) 2014 Jonas Gessner. All rights reserved. 7 | // 8 | 9 | #import "JGProgressHUDAnimation.h" 10 | 11 | @interface JGProgressHUDFadeZoomAnimation : JGProgressHUDAnimation 12 | 13 | /** 14 | Duration of the animation from or to the shrinked state. 15 | 16 | @b Default: 0.2. 17 | */ 18 | @property (nonatomic, assign) NSTimeInterval shrinkAnimationDuaration; 19 | 20 | /** 21 | Duration of the animation from or to the expanded state. 22 | 23 | @b Default: 0.1. 24 | */ 25 | @property (nonatomic, assign) NSTimeInterval expandAnimationDuaration; 26 | 27 | /** 28 | The scale to apply to the HUD when expanding. 29 | 30 | @b Default: (1.1f, 1.1f). 31 | */ 32 | @property (nonatomic, assign) CGSize expandScale; 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /PlayerUI/Class/JGProgressHUD/JGProgressHUDFadeZoomAnimation.m: -------------------------------------------------------------------------------- 1 | // 2 | // JGProgressHUDFadeZoomAnimation.m 3 | // JGProgressHUD 4 | // 5 | // Created by Jonas Gessner on 20.7.14. 6 | // Copyright (c) 2014 Jonas Gessner. All rights reserved. 7 | // 8 | 9 | #import "JGProgressHUDFadeZoomAnimation.h" 10 | #import "JGProgressHUD.h" 11 | 12 | @implementation JGProgressHUDFadeZoomAnimation 13 | 14 | #pragma mark - Initializers 15 | 16 | - (instancetype)init { 17 | self = [super init]; 18 | if (self) { 19 | self.shrinkAnimationDuaration = 0.2; 20 | self.expandAnimationDuaration = 0.1; 21 | self.expandScale = CGSizeMake(1.1f, 1.1f); 22 | } 23 | return self; 24 | } 25 | 26 | #pragma mark - Showing 27 | 28 | - (void)show { 29 | [super show]; 30 | 31 | self.progressHUD.alpha = 0.0f; 32 | self.progressHUD.HUDView.transform = CGAffineTransformMakeScale(0.1f, 0.1f); 33 | 34 | NSTimeInterval totalDuration = self.expandAnimationDuaration+self.shrinkAnimationDuaration; 35 | 36 | self.progressHUD.hidden = NO; 37 | 38 | [UIView animateWithDuration:totalDuration delay:0.0 options:(UIViewAnimationOptions)(UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionCurveEaseInOut) animations:^{ 39 | self.progressHUD.alpha = 1.0f; 40 | } completion:nil]; 41 | 42 | [UIView animateWithDuration:self.shrinkAnimationDuaration delay:0.0 options:(UIViewAnimationOptions)(UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionBeginFromCurrentState) animations:^{ 43 | self.progressHUD.HUDView.transform = CGAffineTransformMakeScale(self.expandScale.width, self.expandScale.height); 44 | } completion:^(BOOL __unused _finished) { 45 | [UIView animateWithDuration:self.expandAnimationDuaration delay:0.0 options:(UIViewAnimationOptions)(UIViewAnimationOptionCurveEaseOut | UIViewAnimationOptionBeginFromCurrentState) animations:^{ 46 | self.progressHUD.HUDView.transform = CGAffineTransformIdentity; 47 | } completion:^(BOOL __unused __finished) { 48 | [self animationFinished]; 49 | }]; 50 | }]; 51 | } 52 | 53 | #pragma mark - Hiding 54 | 55 | - (void)hide { 56 | [super hide]; 57 | 58 | NSTimeInterval totalDuration = self.expandAnimationDuaration+self.shrinkAnimationDuaration; 59 | 60 | [UIView animateWithDuration:totalDuration delay:0.0 options:(UIViewAnimationOptions)(UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionCurveEaseInOut) animations:^{ 61 | self.progressHUD.alpha = 0.0f; 62 | } completion:nil]; 63 | 64 | [UIView animateWithDuration:self.expandAnimationDuaration delay:0.0 options:(UIViewAnimationOptions)(UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionBeginFromCurrentState) animations:^{ 65 | self.progressHUD.HUDView.transform = CGAffineTransformMakeScale(self.expandScale.width, self.expandScale.height); 66 | } completion:^(BOOL __unused _finished) { 67 | [UIView animateWithDuration:self.shrinkAnimationDuaration delay:0.0 options:(UIViewAnimationOptions)(UIViewAnimationOptionCurveEaseOut | UIViewAnimationOptionBeginFromCurrentState) animations:^{ 68 | self.progressHUD.HUDView.transform = CGAffineTransformMakeScale(0.1f, 0.1f); 69 | } completion:^(BOOL __unused __finished) { 70 | self.progressHUD.HUDView.transform = CGAffineTransformIdentity; 71 | 72 | [self animationFinished]; 73 | }]; 74 | }]; 75 | } 76 | 77 | @end 78 | -------------------------------------------------------------------------------- /PlayerUI/Class/JGProgressHUD/JGProgressHUDImageIndicatorView.h: -------------------------------------------------------------------------------- 1 | // 2 | // JGProgressHUDImageIndicatorView.h 3 | // JGProgressHUD 4 | // 5 | // Created by Jonas Gessner on 05.08.15. 6 | // Copyright (c) 2015 Jonas Gessner. All rights reserved. 7 | // 8 | 9 | #import "JGProgressHUDIndicatorView.h" 10 | 11 | /** 12 | An indicator for displaying custom images. Supports animated images. 13 | 14 | You may subclass this class to create a custom image indicator view. 15 | */ 16 | @interface JGProgressHUDImageIndicatorView : JGProgressHUDIndicatorView 17 | 18 | /** 19 | Initializes the indicator view with an UIImageView showing the @c image. 20 | 21 | @param image The image to show in the indicator view. 22 | */ 23 | - (instancetype)initWithImage:(UIImage *)image; 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /PlayerUI/Class/JGProgressHUD/JGProgressHUDImageIndicatorView.m: -------------------------------------------------------------------------------- 1 | // 2 | // JGProgressHUDImageIndicatorView.m 3 | // JGProgressHUD 4 | // 5 | // Created by Jonas Gessner on 05.08.15. 6 | // Copyright (c) 2015 Jonas Gessner. All rights reserved. 7 | // 8 | 9 | #import "JGProgressHUDImageIndicatorView.h" 10 | 11 | @implementation JGProgressHUDImageIndicatorView 12 | 13 | - (instancetype)initWithImage:(UIImage *)image { 14 | UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; 15 | 16 | self = [super initWithContentView:imageView]; 17 | 18 | return self; 19 | } 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /PlayerUI/Class/JGProgressHUD/JGProgressHUDIndeterminateIndicatorView.h: -------------------------------------------------------------------------------- 1 | // 2 | // JGProgressHUDIndeterminateIndicatorView.h 3 | // JGProgressHUD 4 | // 5 | // Created by Jonas Gessner on 19.07.14. 6 | // Copyright (c) 2014 Hardtack. All rights reserved. 7 | // 8 | 9 | #import "JGProgressHUD-Defines.h" 10 | #import "JGProgressHUDIndicatorView.h" 11 | 12 | @interface JGProgressHUDIndeterminateIndicatorView : JGProgressHUDIndicatorView 13 | 14 | /** 15 | Initializes the indicator view and sets the correct color to match the HUD style. 16 | */ 17 | - (instancetype)initWithHUDStyle:(JGProgressHUDStyle)style; 18 | 19 | /** 20 | Set the color of the activity indicator view. 21 | @param color The color to apply to the activity indicator view. 22 | */ 23 | - (void)setColor:(UIColor *)color; 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /PlayerUI/Class/JGProgressHUD/JGProgressHUDIndeterminateIndicatorView.m: -------------------------------------------------------------------------------- 1 | // 2 | // JGProgressHUDIndeterminateIndicatorView.m 3 | // JGProgressHUD 4 | // 5 | // Created by Jonas Gessner on 19.07.14. 6 | // Copyright (c) 2014 Hardtack. All rights reserved. 7 | // 8 | 9 | #import "JGProgressHUDIndeterminateIndicatorView.h" 10 | 11 | @implementation JGProgressHUDIndeterminateIndicatorView 12 | 13 | - (instancetype)initWithHUDStyle:(JGProgressHUDStyle)style { 14 | UIActivityIndicatorView *activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; 15 | [activityIndicatorView startAnimating]; 16 | self = [super initWithContentView:activityIndicatorView]; 17 | 18 | if (self) { 19 | if (style != JGProgressHUDStyleDark) { 20 | self.color = [UIColor blackColor]; 21 | } 22 | } 23 | 24 | return self; 25 | } 26 | 27 | - (instancetype)init { 28 | return [self initWithHUDStyle:0]; 29 | } 30 | 31 | - (void)setColor:(UIColor *)color { 32 | [(UIActivityIndicatorView *)self.contentView setColor:color]; 33 | } 34 | 35 | - (void)updateAccessibility { 36 | self.accessibilityLabel = NSLocalizedString(@"Indeterminate progress",); 37 | } 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /PlayerUI/Class/JGProgressHUD/JGProgressHUDIndicatorView.h: -------------------------------------------------------------------------------- 1 | // 2 | // JGProgressHUDIndicatorView.h 3 | // JGProgressHUD 4 | // 5 | // Created by Jonas Gessner on 20.7.14. 6 | // Copyright (c) 2014 Jonas Gessner. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | /** 13 | You may subclass this class to create a custom progress indicator view. 14 | */ 15 | @interface JGProgressHUDIndicatorView : UIView 16 | 17 | /** 18 | Designated initializer for this class. 19 | 20 | @param contentView The content view to place on the container view (the container is the JGProgressHUDIndicatorView). 21 | */ 22 | - (instancetype)initWithContentView:(UIView *)contentView; 23 | 24 | 25 | 26 | 27 | /** 28 | Ranges from 0.0 to 1.0. 29 | */ 30 | @property (nonatomic, assign) float progress; 31 | 32 | /** 33 | Adjusts the current progress shown by the receiver, optionally animating the change. 34 | 35 | The current progress is represented by a floating-point value between 0.0 and 1.0, inclusive, where 1.0 indicates the completion of the task. The default value is 0.0. Values less than 0.0 and greater than 1.0 are pinned to those limits. 36 | 37 | @param progress The new progress value. 38 | @param animated YES if the change should be animated, NO if the change should happen immediately. 39 | */ 40 | - (void)setProgress:(float)progress animated:(BOOL)animated; 41 | 42 | /** 43 | The content view which displays the progress. 44 | */ 45 | @property (nonatomic, strong, readonly) UIView *contentView; 46 | 47 | /** 48 | Schedules an accessibility update on the next run loop. 49 | */ 50 | - (void)setNeedsAccessibilityUpdate; 51 | 52 | /** 53 | Runs @c updateAccessibility immediately if an accessibility update has been scheduled (through @c setNeedsAccessibilityUpdate) but has not executed yet. 54 | */ 55 | - (void)updateAccessibilityIfNeeded; 56 | 57 | /** 58 | Override to set custom accessibility properties. This method gets called once when initializing the view and after calling @c setNeedsAccessibilityUpdate. 59 | */ 60 | - (void)updateAccessibility; 61 | 62 | @end 63 | -------------------------------------------------------------------------------- /PlayerUI/Class/JGProgressHUD/JGProgressHUDIndicatorView.m: -------------------------------------------------------------------------------- 1 | // 2 | // JGProgressHUDIndicatorView.m 3 | // JGProgressHUD 4 | // 5 | // Created by Jonas Gessner on 20.7.14. 6 | // Copyright (c) 2014 Jonas Gessner. All rights reserved. 7 | // 8 | 9 | #import "JGProgressHUDIndicatorView.h" 10 | #import "JGProgressHUD.h" 11 | 12 | @interface JGProgressHUDIndicatorView () { 13 | BOOL _accessibilityUpdateScheduled; 14 | } 15 | 16 | + (void)runBlock:(void (^)(void))block; 17 | 18 | @end 19 | 20 | NS_INLINE void runOnNextRunLoop(void (^block)(void)) { 21 | [[NSRunLoop currentRunLoop] performSelector:@selector(runBlock:) target:[JGProgressHUDIndicatorView class] argument:(id)block order:0 modes:@[NSRunLoopCommonModes]]; 22 | } 23 | 24 | @implementation JGProgressHUDIndicatorView 25 | 26 | #pragma mark - Initializers 27 | 28 | - (instancetype)initWithFrame:(CGRect __unused)frame { 29 | return [self init]; 30 | } 31 | 32 | - (instancetype)init { 33 | return [self initWithContentView:nil]; 34 | } 35 | 36 | - (instancetype)initWithContentView:(UIView *)contentView { 37 | self = [super initWithFrame:(contentView ? contentView.frame : CGRectMake(0.0f, 0.0f, 50.0f, 50.0f))]; 38 | if (self) { 39 | self.opaque = NO; 40 | self.backgroundColor = [UIColor clearColor]; 41 | 42 | self.isAccessibilityElement = YES; 43 | [self setNeedsAccessibilityUpdate]; 44 | 45 | if (contentView) { 46 | _contentView = contentView; 47 | 48 | [self addSubview:self.contentView]; 49 | } 50 | } 51 | return self; 52 | } 53 | 54 | #pragma mark - Accessibility 55 | 56 | + (void)runBlock:(void (^)(void))block { 57 | if (block != nil) { 58 | block(); 59 | } 60 | } 61 | 62 | - (void)setNeedsAccessibilityUpdate { 63 | if (!_accessibilityUpdateScheduled) { 64 | _accessibilityUpdateScheduled = YES; 65 | 66 | runOnNextRunLoop(^{ 67 | [self updateAccessibilityIfNeeded]; 68 | }); 69 | } 70 | } 71 | 72 | - (void)updateAccessibilityIfNeeded { 73 | if (_accessibilityUpdateScheduled) { 74 | [self updateAccessibility]; 75 | _accessibilityUpdateScheduled = NO; 76 | } 77 | } 78 | 79 | - (void)updateAccessibility { 80 | self.accessibilityLabel = [NSLocalizedString(@"Loading",) stringByAppendingFormat:@" %.f %%", self.progress]; 81 | } 82 | 83 | #pragma mark - Getters & Setters 84 | 85 | - (void)setProgress:(float)progress { 86 | [self setProgress:progress animated:NO]; 87 | } 88 | 89 | - (void)setProgress:(float)progress animated:(__unused BOOL)animated { 90 | if (fequal(self.progress, progress)) { 91 | return; 92 | } 93 | 94 | _progress = progress; 95 | 96 | [self setNeedsAccessibilityUpdate]; 97 | } 98 | 99 | @end 100 | -------------------------------------------------------------------------------- /PlayerUI/Class/JGProgressHUD/JGProgressHUDPieIndicatorView.h: -------------------------------------------------------------------------------- 1 | // 2 | // JGProgressHUDPieIndicatorView.h 3 | // JGProgressHUD 4 | // 5 | // Created by Jonas Gessner on 19.07.14. 6 | // Copyright (c) 2014 Hardtack. All rights reserved. 7 | // 8 | 9 | #import "JGProgressHUD-Defines.h" 10 | #import "JGProgressHUDIndicatorView.h" 11 | 12 | @interface JGProgressHUDPieIndicatorView : JGProgressHUDIndicatorView 13 | 14 | /** 15 | Initializes the indicator view and sets the correct color to match the HUD style. 16 | */ 17 | - (instancetype)initWithHUDStyle:(JGProgressHUDStyle)style; 18 | 19 | /** 20 | Tint color of the Pie. 21 | 22 | @b Default: White for JGProgressHUDStyleDark, otherwise black. 23 | */ 24 | @property (nonatomic, strong) UIColor *color; 25 | 26 | /** 27 | The background fill color inside the pie. 28 | 29 | @b Default: Dark gray for JGProgressHUDStyleDark, otherwise light gray. 30 | */ 31 | @property (nonatomic, strong) UIColor *fillColor; 32 | 33 | @end 34 | -------------------------------------------------------------------------------- /PlayerUI/Class/JGProgressHUD/JGProgressHUDPieIndicatorView.m: -------------------------------------------------------------------------------- 1 | // 2 | // JGProgressHUDPieIndicatorView.m 3 | // JGProgressHUD 4 | // 5 | // Created by Jonas Gessner on 19.07.14. 6 | // Copyright (c) 2014 Hardtack. All rights reserved. 7 | // 8 | 9 | #import "JGProgressHUDPieIndicatorView.h" 10 | 11 | @interface JGProgressHUDPieIndicatorLayer : CALayer 12 | 13 | @property (nonatomic, assign) float progress; 14 | 15 | @property (nonatomic, weak) UIColor *color; 16 | 17 | @property (nonatomic, weak) UIColor *fillColor; 18 | 19 | @end 20 | 21 | @implementation JGProgressHUDPieIndicatorLayer 22 | 23 | @dynamic progress, color, fillColor; 24 | 25 | + (BOOL)needsDisplayForKey:(NSString *)key { 26 | return ([key isEqualToString:@"progress"] || [key isEqualToString:@"color"] || [key isEqualToString:@"fillColor"] || [super needsDisplayForKey:key]); 27 | } 28 | 29 | - (id )actionForKey:(NSString *)key { 30 | if ([key isEqualToString:@"progress"]) { 31 | CABasicAnimation *progressAnimation = [CABasicAnimation animation]; 32 | progressAnimation.fromValue = [self.presentationLayer valueForKey:key]; 33 | 34 | progressAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 35 | 36 | return progressAnimation; 37 | } 38 | 39 | return [super actionForKey:key]; 40 | } 41 | 42 | - (void)drawInContext:(CGContextRef)ctx { 43 | UIGraphicsPushContext(ctx); 44 | 45 | CGRect rect = self.bounds; 46 | 47 | CGPoint center = CGPointMake(rect.origin.x + (CGFloat)floor(rect.size.height/2.0f), rect.origin.y + (CGFloat)floor(rect.size.height/2.0f)); 48 | CGFloat lineWidth = 2.0f; 49 | CGFloat radius = (CGFloat)floor(MIN(rect.size.width, rect.size.height)/2.0f)-lineWidth; 50 | 51 | //Border && Fill 52 | UIBezierPath *borderPath = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:0.0f endAngle:2.0f*(CGFloat)M_PI clockwise:NO]; 53 | 54 | [borderPath setLineWidth:lineWidth]; 55 | 56 | if (self.fillColor) { 57 | [self.fillColor setFill]; 58 | 59 | [borderPath fill]; 60 | } 61 | 62 | [self.color set]; 63 | 64 | [borderPath stroke]; 65 | 66 | 67 | //Progress 68 | if (self.progress > 0.0) { 69 | UIBezierPath *processPath = [UIBezierPath bezierPath]; 70 | 71 | [processPath setLineWidth:radius]; 72 | 73 | CGFloat startAngle = -((CGFloat)M_PI/2.0f); 74 | CGFloat endAngle = startAngle + 2.0f * (CGFloat)M_PI * self.progress; 75 | 76 | [processPath addArcWithCenter:center radius:radius/2.0f startAngle:startAngle endAngle:endAngle clockwise:YES]; 77 | 78 | [processPath stroke]; 79 | 80 | UIGraphicsPopContext(); 81 | } 82 | } 83 | 84 | @end 85 | 86 | 87 | @implementation JGProgressHUDPieIndicatorView 88 | 89 | #pragma mark - Initializers 90 | 91 | - (instancetype)initWithHUDStyle:(JGProgressHUDStyle)style { 92 | self = [super init]; 93 | 94 | if (self) { 95 | self.layer.contentsScale = [UIScreen mainScreen].scale; 96 | [self.layer setNeedsDisplay]; 97 | 98 | if (style == JGProgressHUDStyleDark) { 99 | self.color = [UIColor whiteColor]; 100 | self.fillColor = [UIColor colorWithWhite:0.2f alpha:1.0f]; 101 | } 102 | else { 103 | self.color = [UIColor blackColor]; 104 | if (style == JGProgressHUDStyleLight) { 105 | self.fillColor = [UIColor colorWithWhite:0.85f alpha:1.0f]; 106 | } 107 | else { 108 | self.fillColor = [UIColor colorWithWhite:0.9f alpha:1.0f]; 109 | } 110 | } 111 | } 112 | 113 | return self; 114 | } 115 | 116 | - (instancetype)initWithContentView:(UIView *)contentView { 117 | self = [super initWithContentView:contentView]; 118 | 119 | if (self) { 120 | self.layer.contentsScale = [UIScreen mainScreen].scale; 121 | [self.layer setNeedsDisplay]; 122 | 123 | self.color = [UIColor whiteColor]; 124 | } 125 | 126 | return self; 127 | } 128 | 129 | #pragma mark - Getters & Setters 130 | 131 | - (void)setColor:(UIColor *)tintColor { 132 | if ([tintColor isEqual:self.color]) { 133 | return; 134 | } 135 | 136 | _color = tintColor; 137 | 138 | [(JGProgressHUDPieIndicatorLayer *)self.layer setColor:self.color]; 139 | } 140 | 141 | - (void)setFillColor:(UIColor *)fillColor { 142 | if ([fillColor isEqual:self.fillColor]) { 143 | return; 144 | } 145 | 146 | _fillColor = fillColor; 147 | 148 | [(JGProgressHUDPieIndicatorLayer *)self.layer setFillColor:self.fillColor]; 149 | } 150 | 151 | - (void)setProgress:(float)progress animated:(BOOL)animated { 152 | if (fequal(self.progress, progress)) { 153 | return; 154 | } 155 | 156 | [super setProgress:progress animated:animated]; 157 | 158 | [CATransaction begin]; 159 | [CATransaction setAnimationDuration:(animated ? 0.3 : 0.0)]; 160 | 161 | [(JGProgressHUDPieIndicatorLayer *)self.layer setProgress:progress]; 162 | 163 | [CATransaction commit]; 164 | } 165 | 166 | #pragma mark - Overrides 167 | 168 | + (Class)layerClass { 169 | return [JGProgressHUDPieIndicatorLayer class]; 170 | } 171 | 172 | @end 173 | -------------------------------------------------------------------------------- /PlayerUI/Class/JGProgressHUD/JGProgressHUDRingIndicatorView.h: -------------------------------------------------------------------------------- 1 | // 2 | // JGProgressHUDRingIndicatorView.h 3 | // JGProgressHUD 4 | // 5 | // Created by Jonas Gessner on 20.7.14. 6 | // Copyright (c) 2014 Jonas Gessner. All rights reserved. 7 | // 8 | 9 | #import "JGProgressHUD-Defines.h" 10 | #import "JGProgressHUDIndicatorView.h" 11 | 12 | @interface JGProgressHUDRingIndicatorView : JGProgressHUDIndicatorView 13 | 14 | /** 15 | Initializes the indicator view and sets the correct color to match the HUD style. 16 | */ 17 | - (instancetype)initWithHUDStyle:(JGProgressHUDStyle)style; 18 | 19 | /** 20 | Background color of the ring. 21 | 22 | @b Default: Black for JGProgressHUDStyleDark, light gray otherwise. 23 | */ 24 | @property (nonatomic, strong) UIColor *ringBackgroundColor; 25 | 26 | /** 27 | Progress color of the progress ring. 28 | 29 | @b Default: White for JGProgressHUDStyleDark, otherwise black. 30 | */ 31 | @property (nonatomic, strong) UIColor *ringColor; 32 | 33 | /** 34 | Sets if the progress ring should have rounded corners. 35 | 36 | @b Default: NO. 37 | */ 38 | @property (nonatomic, assign) BOOL roundProgressLine; 39 | 40 | /** 41 | Width of the ring. 42 | 43 | @b Default: 3.0. 44 | */ 45 | @property (nonatomic, assign) CGFloat ringWidth; 46 | 47 | @end 48 | -------------------------------------------------------------------------------- /PlayerUI/Class/JGProgressHUD/JGProgressHUDSuccessIndicatorView.h: -------------------------------------------------------------------------------- 1 | // 2 | // JGProgressHUDSuccessIndicatorView.h 3 | // JGProgressHUD 4 | // 5 | // Created by Jonas Gessner on 19.08.14. 6 | // Copyright (c) 2014 Jonas Gessner. All rights reserved. 7 | // 8 | 9 | #import "JGProgressHUDImageIndicatorView.h" 10 | 11 | @interface JGProgressHUDSuccessIndicatorView : JGProgressHUDImageIndicatorView 12 | 13 | /** 14 | Default initializer for this class. 15 | */ 16 | - (instancetype)init; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /PlayerUI/Class/JGProgressHUD/JGProgressHUDSuccessIndicatorView.m: -------------------------------------------------------------------------------- 1 | // 2 | // JGProgressHUDSuccessIndicatorView.m 3 | // JGProgressHUD 4 | // 5 | // Created by Jonas Gessner on 19.08.14. 6 | // Copyright (c) 2014 Jonas Gessner. All rights reserved. 7 | // 8 | 9 | #import "JGProgressHUDSuccessIndicatorView.h" 10 | #import "JGProgressHUD.h" 11 | 12 | @implementation JGProgressHUDSuccessIndicatorView 13 | 14 | - (instancetype)initWithContentView:(UIView *__unused)contentView { 15 | NSBundle *resourceBundle = [NSBundle bundleWithPath:[[NSBundle bundleForClass:[JGProgressHUD class]] pathForResource:@"JGProgressHUD Resources" ofType:@"bundle"]]; 16 | 17 | NSString *imgPath = [resourceBundle pathForResource:@"jg_hud_success" ofType:@"png"]; 18 | 19 | self = [super initWithImage:[UIImage imageWithContentsOfFile:imgPath]]; 20 | 21 | return self; 22 | } 23 | 24 | - (instancetype)init { 25 | return [self initWithContentView:nil]; 26 | } 27 | 28 | - (void)updateAccessibility { 29 | self.accessibilityLabel = NSLocalizedString(@"Success",); 30 | } 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /PlayerUI/Class/UIWindow+YzdHUD.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIWindow+YzdHUD.h 3 | // YzdHUD 4 | // 5 | // Created by ShineYang on 13-12-6. 6 | // Copyright (c) 2013年 YangZhiDa. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #pragma mark - 提示框类型 12 | typedef NS_ENUM(NSUInteger, showHUDType) { 13 | ShowLoading = 0,//加载中 14 | ShowPhotoYes,//对号 15 | ShowPhotoNo,//叉子 16 | ShowDismiss,//删除 17 | }; 18 | 19 | typedef void (^AnimationBlock)(UIView *animationView); 20 | 21 | @interface UIWindow (YzdHUD) 22 | 23 | -(void)showHUDWithText:(NSString *)text Type:(showHUDType)type Enabled:(BOOL)enabled; 24 | 25 | -(void)showHUDWithText:(NSString *)text Type:(showHUDType)type Enabled:(BOOL)enabled Bounds:(CGRect)bounds Center:(CGPoint)center BackgroundAlpha:(CGFloat)backgroundAlpha ComeTime:(CGFloat)comeTime StayTime:(CGFloat)stayTime GoTime:(CGFloat)goTime; 26 | 27 | 28 | -(void)showHUDWithText:(NSString *)text Type:(showHUDType)type Enabled:(BOOL)enabled transForm:(CGAffineTransform)trans; 29 | 30 | -(void)changeFrame:(UIInterfaceOrientation)orinentation; 31 | @end 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /PlayerUI/Class/YzdHUDBackgroundView.h: -------------------------------------------------------------------------------- 1 | // 2 | // YzdHUDBackgroundView.h 3 | // YzdHUD 4 | // 5 | // Created by ShineYang on 13-12-6. 6 | // Copyright (c) 2013年 YangZhiDa. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface YzdHUDBackgroundView : UINavigationBar 12 | +(YzdHUDBackgroundView *)shareHUDView; 13 | @end 14 | -------------------------------------------------------------------------------- /PlayerUI/Class/YzdHUDBackgroundView.m: -------------------------------------------------------------------------------- 1 | // 2 | // YzdHUDBackgroundView.m 3 | // YzdHUD 4 | // 5 | // Created by ShineYang on 13-12-6. 6 | // Copyright (c) 2013年 YangZhiDa. All rights reserved. 7 | // 8 | 9 | #import "YzdHUDBackgroundView.h" 10 | #import 11 | 12 | static YzdHUDBackgroundView *_shareHUDView = nil; 13 | @implementation YzdHUDBackgroundView 14 | 15 | - (id)initWithFrame:(CGRect)frame 16 | { 17 | self = [super initWithFrame:frame]; 18 | if (self) { 19 | // Initialization code 20 | } 21 | return self; 22 | } 23 | 24 | +(YzdHUDBackgroundView *)shareHUDView{ 25 | if (!_shareHUDView) { 26 | _shareHUDView = [[YzdHUDBackgroundView alloc] init]; 27 | _shareHUDView.alpha = 0; 28 | _shareHUDView.layer.masksToBounds = YES; 29 | _shareHUDView.layer.cornerRadius = 5; 30 | _shareHUDView.barStyle = UIBarStyleBlackTranslucent; 31 | } 32 | return _shareHUDView; 33 | } 34 | 35 | 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /PlayerUI/Class/YzdHUDImageView.h: -------------------------------------------------------------------------------- 1 | // 2 | // YzdHUDImageView.h 3 | // YzdHUD 4 | // 5 | // Created by ShineYang on 13-12-6. 6 | // Copyright (c) 2013年 YangZhiDa. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface YzdHUDImageView : UIImageView 12 | +(YzdHUDImageView *)shareHUDView; 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /PlayerUI/Class/YzdHUDImageView.m: -------------------------------------------------------------------------------- 1 | // 2 | // YzdHUDImageView.m 3 | // YzdHUD 4 | // 5 | // Created by ShineYang on 13-12-6. 6 | // Copyright (c) 2013年 YangZhiDa. All rights reserved. 7 | // 8 | 9 | #import "YzdHUDImageView.h" 10 | 11 | static YzdHUDImageView *_shareHUDView = nil; 12 | @implementation YzdHUDImageView 13 | 14 | - (id)initWithFrame:(CGRect)frame 15 | { 16 | self = [super initWithFrame:frame]; 17 | if (self) { 18 | // Initialization code 19 | } 20 | return self; 21 | } 22 | 23 | +(YzdHUDImageView *)shareHUDView{ 24 | if (!_shareHUDView) { 25 | _shareHUDView = [[YzdHUDImageView alloc] init]; 26 | _shareHUDView.alpha = 0; 27 | } 28 | return _shareHUDView; 29 | } 30 | 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /PlayerUI/Class/YzdHUDIndicator.h: -------------------------------------------------------------------------------- 1 | // 2 | // YzdHUDIndicator.h 3 | // YzdHUD 4 | // 5 | // Created by ShineYang on 13-12-6. 6 | // Copyright (c) 2013年 YangZhiDa. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | 12 | @interface YzdHUDIndicator : UIActivityIndicatorView 13 | +(YzdHUDIndicator *)shareHUDView; 14 | @end 15 | -------------------------------------------------------------------------------- /PlayerUI/Class/YzdHUDIndicator.m: -------------------------------------------------------------------------------- 1 | // 2 | // YzdHUDIndicator.m 3 | // YzdHUD 4 | // 5 | // Created by ShineYang on 13-12-6. 6 | // Copyright (c) 2013年 YangZhiDa. All rights reserved. 7 | // 8 | 9 | #import "YzdHUDIndicator.h" 10 | 11 | static YzdHUDIndicator *_shareHUDView = nil; 12 | @implementation YzdHUDIndicator 13 | 14 | - (id)initWithFrame:(CGRect)frame 15 | { 16 | self = [super initWithFrame:frame]; 17 | if (self) { 18 | // Initialization code 19 | } 20 | return self; 21 | } 22 | 23 | +(YzdHUDIndicator *)shareHUDView{ 24 | if (!_shareHUDView) { 25 | _shareHUDView = [[YzdHUDIndicator alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; 26 | } 27 | return _shareHUDView; 28 | } 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /PlayerUI/Class/YzdHUDLabel.h: -------------------------------------------------------------------------------- 1 | // 2 | // YzdHUDLabel.h 3 | // YzdHUD 4 | // 5 | // Created by ShineYang on 13-12-6. 6 | // Copyright (c) 2013年 YangZhiDa. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface YzdHUDLabel : UILabel 12 | +(YzdHUDLabel *)shareHUDView; 13 | @end 14 | -------------------------------------------------------------------------------- /PlayerUI/Class/YzdHUDLabel.m: -------------------------------------------------------------------------------- 1 | // 2 | // YzdHUDLabel.m 3 | // YzdHUD 4 | // 5 | // Created by ShineYang on 13-12-6. 6 | // Copyright (c) 2013年 YangZhiDa. All rights reserved. 7 | // 8 | 9 | #import "YzdHUDLabel.h" 10 | 11 | static YzdHUDLabel *_shareHUDView = nil; 12 | @implementation YzdHUDLabel 13 | 14 | - (id)initWithFrame:(CGRect)frame 15 | { 16 | self = [super initWithFrame:frame]; 17 | if (self) { 18 | // Initialization code 19 | } 20 | return self; 21 | } 22 | 23 | +(YzdHUDLabel *)shareHUDView{ 24 | if (!_shareHUDView) { 25 | _shareHUDView = [[YzdHUDLabel alloc] init]; 26 | _shareHUDView.numberOfLines = 0; 27 | _shareHUDView.alpha = 0; 28 | _shareHUDView.textAlignment = NSTextAlignmentCenter; 29 | _shareHUDView.backgroundColor = [UIColor clearColor]; 30 | _shareHUDView.textColor = [UIColor whiteColor]; 31 | 32 | } 33 | return _shareHUDView; 34 | } 35 | @end 36 | -------------------------------------------------------------------------------- /PlayerUI/PlayerManager.h: -------------------------------------------------------------------------------- 1 | // 2 | // PlayerManager.h 3 | // UCloudMediaRecorderDemo 4 | // 5 | // Created by yisanmao on 16/1/4. 6 | // Copyright © 2016年 zmw. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "UCloudMediaViewController.h" 11 | 12 | @interface PlayerManager : NSObject 13 | 14 | @property(strong, nonatomic) UCloudMediaPlayer *mediaPlayer; 15 | 16 | @property (assign, nonatomic) BOOL isFullscreen; //是否横屏 17 | @property (assign, nonatomic) BOOL isPortrait; 18 | @property (assign, nonatomic) UIInterfaceOrientation currentOrientation; //当前屏幕方向 19 | @property (assign, nonatomic) UIInterfaceOrientationMask supportInterOrtation; 20 | 21 | @property (strong, nonatomic) NSMutableArray *equalArray; 22 | @property (strong, nonatomic) NSMutableArray *exchangeArray; 23 | @property (strong, nonatomic) NSLayoutConstraint *vcBottomConstraint; 24 | @property (strong, nonatomic) NSLayoutConstraint *playerCenterXContraint; 25 | @property (strong, nonatomic) NSLayoutConstraint *playerHeightContraint; 26 | @property (strong, nonatomic) NSLayoutConstraint *danmuBottomContraint; 27 | @property (strong, nonatomic) NSArray *playerContraints; 28 | 29 | @property (assign, nonatomic) BOOL isPrepared; 30 | @property (assign, nonatomic) CGFloat current; 31 | 32 | @property (strong, nonatomic) UIView *view; 33 | @property (strong, nonatomic) UIViewController *viewContorller; 34 | @property (strong, nonatomic) UCloudMediaViewController *controlVC; 35 | 36 | /** 37 | * 竖屏的时候播放器高度 38 | */ 39 | @property (assign, nonatomic) float portraitViewHeight; 40 | /** 41 | * 是否支持播放器自动旋转(改变设备物理方向,自动改变播放器画面) 42 | */ 43 | @property (assign, nonatomic) BOOL supportAutomaticRotation; 44 | /** 45 | * 是否支持角度旋转(支持表示播放画面会随着推流端旋转而旋转) 46 | */ 47 | @property (assign, nonatomic) BOOL supportAngleChange; 48 | 49 | 50 | /** 51 | 初始化播放器 52 | 53 | @param path 播放地址 54 | @param urlType url类型 55 | */ 56 | - (void)buildMediaPlayer:(NSString *)playString urlType:(UrlType)urlType; 57 | 58 | - (void)rotateBegin:(UIInterfaceOrientation)noti; 59 | - (void)rotateEnd; 60 | - (void)awakeSupportInterOrtation:(UIViewController *)showVC completion:(void(^)(void))block; 61 | 62 | @end 63 | -------------------------------------------------------------------------------- /PlayerUI/Resuce/bg_screen_shot_complete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/PlayerUI/Resuce/bg_screen_shot_complete.png -------------------------------------------------------------------------------- /PlayerUI/Resuce/bg_screen_shot_frame.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/PlayerUI/Resuce/bg_screen_shot_frame.png -------------------------------------------------------------------------------- /PlayerUI/Resuce/bright_point.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/PlayerUI/Resuce/bright_point.png -------------------------------------------------------------------------------- /PlayerUI/Resuce/brightness_bgiphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/PlayerUI/Resuce/brightness_bgiphone.png -------------------------------------------------------------------------------- /PlayerUI/Resuce/brightness_bg~iphone@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/PlayerUI/Resuce/brightness_bg~iphone@3x.png -------------------------------------------------------------------------------- /PlayerUI/Resuce/danmu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/PlayerUI/Resuce/danmu.png -------------------------------------------------------------------------------- /PlayerUI/Resuce/danmu_h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/PlayerUI/Resuce/danmu_h.png -------------------------------------------------------------------------------- /PlayerUI/Resuce/ic_screen_shot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/PlayerUI/Resuce/ic_screen_shot.png -------------------------------------------------------------------------------- /PlayerUI/Resuce/icon_bottomview_brightness_button_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/PlayerUI/Resuce/icon_bottomview_brightness_button_normal.png -------------------------------------------------------------------------------- /PlayerUI/Resuce/icon_bottomview_brightness_button_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/PlayerUI/Resuce/icon_bottomview_brightness_button_selected.png -------------------------------------------------------------------------------- /PlayerUI/Resuce/icon_bottomview_pause_button_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/PlayerUI/Resuce/icon_bottomview_pause_button_normal.png -------------------------------------------------------------------------------- /PlayerUI/Resuce/icon_bottomview_play_button_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/PlayerUI/Resuce/icon_bottomview_play_button_normal.png -------------------------------------------------------------------------------- /PlayerUI/Resuce/icon_bottomview_volume_button_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/PlayerUI/Resuce/icon_bottomview_volume_button_normal.png -------------------------------------------------------------------------------- /PlayerUI/Resuce/icon_bottomview_volume_button_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/PlayerUI/Resuce/icon_bottomview_volume_button_selected.png -------------------------------------------------------------------------------- /PlayerUI/Resuce/icon_play_status.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/PlayerUI/Resuce/icon_play_status.png -------------------------------------------------------------------------------- /PlayerUI/Resuce/icon_screen_shot_action.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/PlayerUI/Resuce/icon_screen_shot_action.png -------------------------------------------------------------------------------- /PlayerUI/Resuce/icon_topview_left__button_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/PlayerUI/Resuce/icon_topview_left__button_selected.png -------------------------------------------------------------------------------- /PlayerUI/Resuce/icon_topview_left_button_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/PlayerUI/Resuce/icon_topview_left_button_normal.png -------------------------------------------------------------------------------- /PlayerUI/Resuce/icon_topview_right_button_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/PlayerUI/Resuce/icon_topview_right_button_normal.png -------------------------------------------------------------------------------- /PlayerUI/Resuce/icon_topview_right_button_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/PlayerUI/Resuce/icon_topview_right_button_selected.png -------------------------------------------------------------------------------- /PlayerUI/Resuce/loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/PlayerUI/Resuce/loading.png -------------------------------------------------------------------------------- /PlayerUI/UCloudBrightnessView.h: -------------------------------------------------------------------------------- 1 | // 2 | // UCloudBrightnessView.h 3 | // UCloudDemo 4 | // 5 | // Created by yisanmao on 15/8/31. 6 | // Copyright (c) 2015年 yisanmao. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UCloudBrightnessView : UIView 12 | @property (nonatomic) CGFloat progress; 13 | @end 14 | -------------------------------------------------------------------------------- /PlayerUI/UCloudBrightnessView.m: -------------------------------------------------------------------------------- 1 | // 2 | // UCloudBrightnessView.m 3 | // UCloudDemo 4 | // 5 | // Created by yisanmao on 15/8/31. 6 | // Copyright (c) 2015年 yisanmao. All rights reserved. 7 | // 8 | 9 | #import "UCloudBrightnessView.h" 10 | 11 | #define COUNT 16 12 | 13 | @interface UCloudBrightnessView() 14 | @property (strong, nonatomic) UIImageView *backView; 15 | @property (strong, nonatomic) UIImageView *oneView; 16 | @end 17 | 18 | @implementation UCloudBrightnessView 19 | - (id)initWithFrame:(CGRect)frame 20 | { 21 | self = [super initWithFrame:frame]; 22 | if (self) 23 | { 24 | [self build]; 25 | } 26 | return self; 27 | } 28 | 29 | - (void)build 30 | { 31 | self.backView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; 32 | 33 | // NSString *path = [[NSBundle mainBundle] pathForResource:@"Resuce" ofType:@"bundle"]; 34 | // NSURL *url = [NSURL fileURLWithPath:path]; 35 | // NSBundle *bundle = [NSBundle bundleWithURL:url]; 36 | // 37 | UIImage *backImage = nil; 38 | // if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) 39 | // { 40 | // backImage = [UIImage imageNamed:@"brightness_bgiphone.png" inBundle:bundle compatibleWithTraitCollection:nil]; 41 | // } 42 | // else 43 | // { 44 | NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"brightness_bgiphone" ofType:@"png"]; 45 | backImage = [UIImage imageWithContentsOfFile:imagePath]; 46 | // } 47 | 48 | 49 | self.backView.image = backImage; 50 | self.backView.frame = CGRectMake(0, 0, 155, 155); 51 | [self addSubview:self.backView]; 52 | 53 | 54 | CGFloat delta = 1.f; 55 | CGFloat width = 7.f; 56 | CGFloat height = 5.f; 57 | CGFloat begain = 14.f; 58 | 59 | for (int i = 0; i < COUNT; i++) 60 | { 61 | CGRect frame = CGRectMake(i*(width +delta)+begain, 133.5f, width, height); 62 | [self build:frame tag:(i+100)]; 63 | } 64 | } 65 | 66 | - (void)build:(CGRect)frame tag:(NSInteger)tag 67 | { 68 | // NSString *path = [[NSBundle mainBundle] pathForResource:@"Resuce" ofType:@"bundle"]; 69 | // NSURL *url = [NSURL fileURLWithPath:path]; 70 | // NSBundle *bundle = [NSBundle bundleWithURL:url]; 71 | UIImageView *imageView = [[UIImageView alloc] initWithFrame:frame]; 72 | 73 | UIImage *image = nil; 74 | // if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) 75 | // { 76 | // image = [UIImage imageNamed:@"bright_point.png" inBundle:bundle compatibleWithTraitCollection:nil]; 77 | // } 78 | // else 79 | // { 80 | NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"bright_point" ofType:@"png"]; 81 | image = [UIImage imageWithContentsOfFile:imagePath]; 82 | // } 83 | 84 | image = [image stretchableImageWithLeftCapWidth:image.size.width/2.f topCapHeight:image.size.height/2.f]; 85 | imageView.image = image; 86 | imageView.tag = tag; 87 | [self addSubview:imageView]; 88 | } 89 | 90 | - (void)setProgress:(CGFloat)progress 91 | { 92 | if (progress != _progress) 93 | { 94 | _progress = progress; 95 | 96 | for (int i = 0; i < COUNT; i++) 97 | { 98 | UIView *view = [self viewWithTag:(i+100)]; 99 | if (i< _progress*COUNT) 100 | { 101 | view.hidden = NO; 102 | } 103 | else 104 | { 105 | view.hidden = YES; 106 | } 107 | } 108 | 109 | 110 | } 111 | } 112 | @end 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | -------------------------------------------------------------------------------- /PlayerUI/UCloudLoadingView.h: -------------------------------------------------------------------------------- 1 | // 2 | // UCloudLoadingView.h 3 | // UCloudPlayerDemo 4 | // 5 | // Created by yisanmao on 15/8/27. 6 | // Copyright (c) 2015年 yisanmao. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UCloudLoadingView : UIView 12 | - (void)show; 13 | - (void)stop; 14 | @end 15 | 16 | 17 | @interface UCloudView : UIView 18 | //default is 1.0f 19 | @property (nonatomic, assign) CGFloat lineWidth; 20 | 21 | //default is [UIColor lightGrayColor] 22 | @property (nonatomic, strong) UIColor *lineColor; 23 | 24 | @property (nonatomic, readonly) BOOL isAnimating; 25 | 26 | //use this to init 27 | - (id)initWithFrame:(CGRect)frame; 28 | 29 | - (void)startAnimation; 30 | - (void)stopAnimation; 31 | @end 32 | -------------------------------------------------------------------------------- /PlayerUI/UCloudLoadingView.m: -------------------------------------------------------------------------------- 1 | // 2 | // UCloudLoadingView.m 3 | // UCloudPlayerDemo 4 | // 5 | // Created by yisanmao on 15/8/27. 6 | // Copyright (c) 2015年 yisanmao. All rights reserved. 7 | // 8 | 9 | #import "UCloudLoadingView.h" 10 | 11 | @interface UCloudLoadingView() 12 | @property (strong, nonatomic) UILabel *label; 13 | @property (strong, nonatomic) UCloudView *cloudView; 14 | @end 15 | 16 | @implementation UCloudLoadingView 17 | - (id)initWithFrame:(CGRect)frame 18 | { 19 | self = [super initWithFrame:frame]; 20 | if (self) 21 | { 22 | [self build]; 23 | } 24 | return self; 25 | } 26 | 27 | - (void)build 28 | { 29 | self.backgroundColor = [UIColor clearColor]; 30 | self.cloudView = [[UCloudView alloc]initWithFrame:CGRectMake(0, 0, 35, 35)]; 31 | self.cloudView.center = self.center; 32 | [self addSubview:self.cloudView]; 33 | 34 | self.label = [[UILabel alloc] initWithFrame:CGRectZero]; 35 | self.label.text = @"正在努力加载"; 36 | self.label.textColor = [UIColor whiteColor]; 37 | self.label.backgroundColor = self.backgroundColor; 38 | [self.label sizeToFit]; 39 | 40 | CGRect frame = self.label.frame; 41 | frame = CGRectMake(CGRectGetMidX(self.cloudView.frame)-frame.size.width/2.f, CGRectGetMidY(self.cloudView.frame)+frame.size.width/2.f, frame.size.width, frame.size.height); 42 | self.label.frame = frame; 43 | [self addSubview:self.label]; 44 | 45 | } 46 | 47 | - (void)show 48 | { 49 | [self.cloudView startAnimation]; 50 | } 51 | 52 | - (void)stop 53 | { 54 | [self.cloudView stopAnimation]; 55 | } 56 | @end 57 | 58 | 59 | @interface UCloudView () 60 | 61 | //0.0 - 1.0 62 | @property (nonatomic, assign) CGFloat anglePer; 63 | 64 | @property (nonatomic, strong) NSTimer *timer; 65 | 66 | @end 67 | #define ANGLE(a) 2*M_PI/360*a 68 | @implementation UCloudView 69 | 70 | - (id)initWithFrame:(CGRect)frame 71 | { 72 | self = [super initWithFrame:frame]; 73 | if (self) { 74 | self.backgroundColor = [UIColor clearColor]; 75 | } 76 | return self; 77 | } 78 | 79 | - (id)init 80 | { 81 | self = [super init]; 82 | if (self) { 83 | self.backgroundColor = [UIColor clearColor]; 84 | } 85 | return self; 86 | } 87 | 88 | - (void)setAnglePer:(CGFloat)anglePer 89 | { 90 | _anglePer = anglePer; 91 | [self setNeedsDisplay]; 92 | } 93 | 94 | - (void)startAnimation 95 | { 96 | if (self.isAnimating) { 97 | [self stopAnimation]; 98 | [self.layer removeAllAnimations]; 99 | } 100 | _isAnimating = YES; 101 | 102 | self.anglePer = 0; 103 | self.timer = [NSTimer scheduledTimerWithTimeInterval:0.02f 104 | target:self 105 | selector:@selector(drawPathAnimation:) 106 | userInfo:nil 107 | repeats:YES]; 108 | [[NSRunLoop currentRunLoop]addTimer:self.timer forMode:NSRunLoopCommonModes]; 109 | } 110 | 111 | - (void)stopAnimation 112 | { 113 | _isAnimating = NO; 114 | 115 | if ([self.timer isValid]) { 116 | [self.timer invalidate]; 117 | self.timer = nil; 118 | } 119 | [self stopRotateAnimation]; 120 | } 121 | 122 | - (void)drawPathAnimation:(NSTimer *)timer 123 | { 124 | self.anglePer += 0.03f; 125 | 126 | if (self.anglePer >= 1) { 127 | self.anglePer = 1; 128 | [timer invalidate]; 129 | self.timer = nil; 130 | [self startRotateAnimation]; 131 | } 132 | } 133 | 134 | - (void)startRotateAnimation 135 | { 136 | CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; 137 | animation.fromValue = @(0); 138 | animation.toValue = @(2*M_PI); 139 | animation.duration = 1.f; 140 | animation.repeatCount = INT_MAX; 141 | 142 | [self.layer addAnimation:animation forKey:@"keyFrameAnimation"]; 143 | } 144 | 145 | - (void)stopRotateAnimation 146 | { 147 | [UIView animateWithDuration:0.3f animations:^{ 148 | self.alpha = 0; 149 | } completion:^(BOOL finished) { 150 | self.anglePer = 0; 151 | [self.layer removeAllAnimations]; 152 | self.alpha = 1; 153 | }]; 154 | } 155 | 156 | - (void)drawRect:(CGRect)rect 157 | { 158 | if (self.anglePer <= 0) { 159 | _anglePer = 0; 160 | } 161 | 162 | CGFloat lineWidth = 1.f; 163 | UIColor *lineColor = [UIColor whiteColor]; 164 | if (self.lineWidth) { 165 | lineWidth = self.lineWidth; 166 | } 167 | if (self.lineColor) { 168 | lineColor = self.lineColor; 169 | } 170 | 171 | CGContextRef context = UIGraphicsGetCurrentContext(); 172 | CGContextSetLineWidth(context, lineWidth); 173 | CGContextSetStrokeColorWithColor(context, lineColor.CGColor); 174 | CGContextAddArc(context, 175 | CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds), 176 | CGRectGetWidth(self.bounds)/2-lineWidth, 177 | ANGLE(120), ANGLE(120)+ANGLE(330)*self.anglePer, 178 | 0); 179 | CGContextStrokePath(context); 180 | } 181 | @end 182 | -------------------------------------------------------------------------------- /PlayerUI/UCloudMediaViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // UCloudMediaViewController.h 3 | // UCloudPlayerDemo 4 | // 5 | // Created by yisanmao on 15/8/24. 6 | // Copyright (c) 2015年 yisanmao. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "UCloudMediaPlayer.h" 11 | 12 | typedef NS_ENUM(NSInteger, WebState) 13 | { 14 | WebSucess, 15 | WebFailure, 16 | }; 17 | 18 | @protocol UCloudMediaPlayback; 19 | 20 | /** 21 | * 播放器界面事件代理 22 | */ 23 | @protocol UCloudPlayerUIDelegate 24 | 25 | - (void)onClickMediaControl:(id)sender; 26 | - (void)onClickBack:(UIButton*)sender; 27 | - (void)onClickPlay:(id)sender; 28 | - (void)onClickPause:(id)sender; 29 | 30 | - (void)durationSliderTouchBegan:(id)delta; 31 | - (void)durationSliderTouchEnded:(id)delta; 32 | - (void)durationSliderValueChanged:(id)delta; 33 | 34 | - (void)clickBright:(id)sender; 35 | - (void)clickVolume:(id)sender; 36 | - (void)clickSnaphot:(id)sender; 37 | 38 | - (void)selectedDecodeMode:(UCDMediaDecodeMode)decodeMode; 39 | - (void)selectedDefinition:(Definition)definition; 40 | - (void)selectedScalingMode:(MPMovieScalingMode)scalingMode; 41 | 42 | - (void)clickFull; 43 | - (BOOL)screenState; 44 | - (void)clickDanmu:(BOOL)show; 45 | 46 | @end 47 | 48 | @class UCloudMediaPlayer; 49 | 50 | @interface UCloudMediaViewController : UIViewController 51 | 52 | @property (weak, nonatomic) IBOutlet UIView *hudView; 53 | @property (nonatomic, weak) id delegatePlayer; 54 | @property (nonatomic, weak) id delegateAction; 55 | @property (strong, nonatomic) NSArray* movieInfos; 56 | @property (assign, nonatomic) UrlType urlType; 57 | 58 | @property (assign, nonatomic) NSInteger videoQuality; 59 | @property (assign, nonatomic) NSInteger videoGravity; 60 | @property (assign, nonatomic) NSInteger videoCodec; 61 | @property (strong, nonatomic) NSString* videoTitle; 62 | @property (assign, nonatomic) CGPoint center; 63 | 64 | - (void)showNoFade; 65 | - (void)showAndFade; 66 | - (void)hide; 67 | - (void)hideMenu; 68 | - (void)stop; 69 | 70 | - (void)refreshMediaControl; 71 | - (void)refreshProgressView; 72 | - (void)refreshCenterState; 73 | 74 | - (void)setRightPanelHidden:(BOOL)hidden; 75 | - (void)setFullBtnState:(BOOL)hidden; 76 | 77 | @end 78 | -------------------------------------------------------------------------------- /PlayerUI/UCloudProgressView.h: -------------------------------------------------------------------------------- 1 | // 2 | // UCloudProgressView.h 3 | // UCloudPlayerDemo 4 | // 5 | // Created by yisanmao on 15/8/25. 6 | // Copyright (c) 2015年 yisanmao. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UCloudProgressView : UIView 12 | @property (nonatomic,assign) CGFloat progress; 13 | @property (nonatomic,assign) NSInteger cornerRadius; 14 | @property (nonatomic,assign) NSInteger borderWidth; 15 | 16 | @property (nonatomic,strong) UIColor *noColor; 17 | @property (nonatomic,strong) UIColor *prsColor; 18 | @property (nonatomic) BOOL showCorner; 19 | @property (nonatomic) BOOL isVertical; 20 | 21 | - (void)refreshProgress; 22 | @end 23 | -------------------------------------------------------------------------------- /PlayerUI/UCloudProgressView.m: -------------------------------------------------------------------------------- 1 | // 2 | // UCloudProgressView.m 3 | // UCloudPlayerDemo 4 | // 5 | // Created by yisanmao on 15/8/25. 6 | // Copyright (c) 2015年 yisanmao. All rights reserved. 7 | // 8 | 9 | #import "UCloudProgressView.h" 10 | 11 | @interface UCloudProgressView() 12 | 13 | @property (nonatomic,strong) UIView *oneView; 14 | @property (nonatomic,strong) UIView *twoView; 15 | 16 | @end 17 | 18 | @implementation UCloudProgressView 19 | - (void)awakeFromNib 20 | { 21 | [self zdInit]; 22 | [self zdFrame:self.frame]; 23 | [super awakeFromNib]; 24 | } 25 | 26 | - (id)initWithFrame:(CGRect)frame 27 | { 28 | self = [super initWithFrame:frame]; 29 | if (self) { 30 | [self zdInit]; 31 | [self zdFrame:frame]; 32 | 33 | } 34 | return self; 35 | } 36 | 37 | - (void)setFrame:(CGRect)frame 38 | { 39 | [super setFrame:frame]; 40 | [self zdFrame:frame]; 41 | } 42 | 43 | - (void)zdFrame:(CGRect)frame 44 | { 45 | if (self.showCorner) 46 | { 47 | self.layer.cornerRadius = frame.size.height/2; 48 | } 49 | 50 | if (self.isVertical) 51 | { 52 | self.oneView.frame = CGRectMake(0, self.frame.size.height*(1-_progress), self.frame.size.width, self.frame.size.height); 53 | } 54 | else 55 | { 56 | self.oneView.frame = CGRectMake(0, 0, self.frame.size.width * _progress, self.frame.size.height); 57 | } 58 | 59 | if (self.showCorner) 60 | { 61 | self.oneView.layer.cornerRadius = frame.size.height/2; 62 | } 63 | 64 | self.twoView.frame = CGRectMake(0, 0, frame.size.width, frame.size.height); 65 | } 66 | 67 | - (void)zdInit 68 | { 69 | self.borderWidth = 1; 70 | 71 | self.twoView = [[UIView alloc] init]; 72 | self.twoView.clipsToBounds = YES; 73 | [self addSubview:self.twoView]; 74 | 75 | self.oneView = [[UIView alloc] init]; 76 | self.oneView.clipsToBounds = YES; 77 | [self addSubview:self.oneView]; 78 | } 79 | 80 | #pragma property set or get 81 | - (void)setNoColor:(UIColor *)noColor 82 | { 83 | self.twoView.backgroundColor = noColor; 84 | } 85 | 86 | - (void)setPrsColor:(UIColor *)prsColor 87 | { 88 | self.layer.borderColor = prsColor.CGColor; 89 | self.oneView.backgroundColor = prsColor; 90 | } 91 | 92 | - (void)setProgress:(CGFloat)progress 93 | { 94 | if (_progress != progress || progress == 0.f) 95 | { 96 | if (self.isVertical) 97 | { 98 | self.oneView.frame = CGRectMake(0, self.frame.size.height*(1-progress), self.frame.size.width, self.frame.size.height); 99 | } 100 | else 101 | { 102 | self.oneView.frame = CGRectMake(0, 0, self.frame.size.width * progress, self.frame.size.height); 103 | } 104 | _progress = progress; 105 | } 106 | } 107 | 108 | - (void)refreshProgress 109 | { 110 | if (self.isVertical) 111 | { 112 | self.oneView.frame = CGRectMake(0, self.frame.size.height*(1-_progress), self.frame.size.width, self.frame.size.height); 113 | } 114 | else 115 | { 116 | self.oneView.frame = CGRectMake(0, 0, self.frame.size.width * _progress, self.frame.size.height); 117 | } 118 | } 119 | 120 | - (void)setBorderWidth:(NSInteger)borderWidth 121 | { 122 | self.layer.borderWidth = borderWidth; 123 | } 124 | @end 125 | -------------------------------------------------------------------------------- /PlayerUI/UCloudReachability.h: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (C) 2016 Apple Inc. All Rights Reserved. 3 | See LICENSE.txt for this sample’s licensing information 4 | 5 | Abstract: 6 | Basic demonstration of how to use the SystemConfiguration Reachablity APIs. 7 | */ 8 | 9 | #import 10 | #import 11 | #import 12 | 13 | 14 | typedef enum : NSInteger { 15 | UCloudNotReachable = 0, 16 | UCloudReachableViaWiFi, 17 | UCloudReachableViaWWAN 18 | } UCloudNetworkStatus; 19 | 20 | #pragma mark IPv6 Support 21 | //Reachability fully support IPv6. For full details, see ReadMe.md. 22 | 23 | 24 | extern NSString *UCloudReachabilityChangedNotification; 25 | 26 | 27 | @interface UCloudReachability : NSObject 28 | 29 | /*! 30 | * Use to check the reachability of a given host name. 31 | */ 32 | + (instancetype)reachabilityWithHostName:(NSString *)hostName; 33 | 34 | /*! 35 | * Use to check the reachability of a given IP address. 36 | */ 37 | + (instancetype)reachabilityWithAddress:(const struct sockaddr *)hostAddress; 38 | 39 | /*! 40 | * Checks whether the default route is available. Should be used by applications that do not connect to a particular host. 41 | */ 42 | + (instancetype)reachabilityForInternetConnection; 43 | 44 | 45 | #pragma mark reachabilityForLocalWiFi 46 | //reachabilityForLocalWiFi has been removed from the sample. See ReadMe.md for more information. 47 | //+ (instancetype)reachabilityForLocalWiFi; 48 | 49 | /*! 50 | * Start listening for reachability notifications on the current run loop. 51 | */ 52 | - (BOOL)startNotifier; 53 | 54 | - (void)stopNotifier; 55 | 56 | - (UCloudNetworkStatus)currentReachabilityStatus; 57 | 58 | /*! 59 | * WWAN may be available, but not active until a connection has been established. WiFi may require a connection for VPN on Demand. 60 | */ 61 | - (BOOL)connectionRequired; 62 | 63 | @end 64 | 65 | 66 | -------------------------------------------------------------------------------- /demo/UCloudDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /demo/UCloudDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /demo/UCloudDemo/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // UCloudDemo 4 | // 5 | // Created by yisanmao on 15/8/27. 6 | // Copyright (c) 2015年 yisanmao. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "ViewController.h" 11 | 12 | @interface AppDelegate : UIResponder 13 | 14 | @property (strong, nonatomic) UIWindow *window; 15 | 16 | @property (strong, nonatomic) ViewController *vc; 17 | @end 18 | 19 | -------------------------------------------------------------------------------- /demo/UCloudDemo/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // UCloudDemo 4 | // 5 | // Created by yisanmao on 15/8/27. 6 | // Copyright (c) 2015年 yisanmao. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | #import 11 | 12 | @interface AppDelegate () 13 | 14 | @end 15 | 16 | @implementation AppDelegate 17 | 18 | void uncaughtExceptionHandler(NSException *exception) { 19 | NSLog(@"CRASH: %@", exception); 20 | NSLog(@"Stack Trace: %@", [exception callStackSymbols]); 21 | // Internal error reporting 22 | } 23 | 24 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 25 | // Override point for customization after application launch. 26 | NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler); 27 | // [self configurePre]; 28 | // [self performSelectorOnMainThread:@selector(noti) withObject:self waitUntilDone:YES]; 29 | // 友盟统计,用于统计APP 30 | UMConfigInstance.appKey = @"58f87c76677baa3b840005fa"; 31 | [MobClick startWithConfigure:UMConfigInstance]; 32 | 33 | return YES; 34 | } 35 | 36 | #pragma mark - pre 日志分析,并不是.a文件所必需的 37 | //- (void)configurePre 38 | //{ 39 | // PreToolsConfig* config = [PreToolsConfig defaultConfig]; 40 | // config.enabledShakeReport = YES; 41 | // 42 | // [PreTools init:@"c73c904b9aaca257019bd4a5798f8d3b" channel:nil config:config]; 43 | //} 44 | 45 | - (void)applicationWillResignActive:(UIApplication *)application { 46 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 47 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 48 | } 49 | 50 | - (void)applicationDidEnterBackground:(UIApplication *)application { 51 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 52 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 53 | } 54 | 55 | - (void)applicationWillEnterForeground:(UIApplication *)application { 56 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 57 | } 58 | 59 | - (void)applicationDidBecomeActive:(UIApplication *)application { 60 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 61 | } 62 | 63 | - (void)applicationWillTerminate:(UIApplication *)application { 64 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 65 | } 66 | 67 | - (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window 68 | { 69 | /** 70 | * 这里移动要注意,条件判断成功的是在播放器播放过程中返回的 71 | 下面的是播放器没有弹出来的所支持的设备方向 72 | */ 73 | if (self.vc) 74 | { 75 | return self.vc.playerManager.supportInterOrtation; 76 | } 77 | else 78 | { 79 | return UIInterfaceOrientationMaskPortrait; 80 | } 81 | } 82 | @end 83 | -------------------------------------------------------------------------------- /demo/UCloudDemo/Base.lproj/LaunchScreen.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 24 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /demo/UCloudDemo/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "size" : "29x29", 15 | "idiom" : "iphone", 16 | "filename" : "ic_launcher1.png", 17 | "scale" : "2x" 18 | }, 19 | { 20 | "idiom" : "iphone", 21 | "size" : "29x29", 22 | "scale" : "3x" 23 | }, 24 | { 25 | "idiom" : "iphone", 26 | "size" : "40x40", 27 | "scale" : "2x" 28 | }, 29 | { 30 | "idiom" : "iphone", 31 | "size" : "40x40", 32 | "scale" : "3x" 33 | }, 34 | { 35 | "size" : "60x60", 36 | "idiom" : "iphone", 37 | "filename" : "ucloud_logo(1).png", 38 | "scale" : "2x" 39 | }, 40 | { 41 | "idiom" : "iphone", 42 | "size" : "60x60", 43 | "scale" : "3x" 44 | }, 45 | { 46 | "idiom" : "ipad", 47 | "size" : "20x20", 48 | "scale" : "1x" 49 | }, 50 | { 51 | "idiom" : "ipad", 52 | "size" : "20x20", 53 | "scale" : "2x" 54 | }, 55 | { 56 | "idiom" : "ipad", 57 | "size" : "29x29", 58 | "scale" : "1x" 59 | }, 60 | { 61 | "idiom" : "ipad", 62 | "size" : "29x29", 63 | "scale" : "2x" 64 | }, 65 | { 66 | "idiom" : "ipad", 67 | "size" : "40x40", 68 | "scale" : "1x" 69 | }, 70 | { 71 | "idiom" : "ipad", 72 | "size" : "40x40", 73 | "scale" : "2x" 74 | }, 75 | { 76 | "idiom" : "ipad", 77 | "size" : "76x76", 78 | "scale" : "1x" 79 | }, 80 | { 81 | "idiom" : "ipad", 82 | "size" : "76x76", 83 | "scale" : "2x" 84 | }, 85 | { 86 | "idiom" : "ipad", 87 | "size" : "83.5x83.5", 88 | "scale" : "2x" 89 | }, 90 | { 91 | "idiom" : "ios-marketing", 92 | "size" : "1024x1024", 93 | "scale" : "1x" 94 | } 95 | ], 96 | "info" : { 97 | "version" : 1, 98 | "author" : "xcode" 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /demo/UCloudDemo/Images.xcassets/AppIcon.appiconset/ic_launcher1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/demo/UCloudDemo/Images.xcassets/AppIcon.appiconset/ic_launcher1.png -------------------------------------------------------------------------------- /demo/UCloudDemo/Images.xcassets/AppIcon.appiconset/ucloud_logo(1).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/demo/UCloudDemo/Images.xcassets/AppIcon.appiconset/ucloud_logo(1).png -------------------------------------------------------------------------------- /demo/UCloudDemo/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /demo/UCloudDemo/Images.xcassets/logo-6.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "logo-6.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /demo/UCloudDemo/Images.xcassets/logo-6.imageset/logo-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/demo/UCloudDemo/Images.xcassets/logo-6.imageset/logo-6.png -------------------------------------------------------------------------------- /demo/UCloudDemo/Images.xcassets/setting.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "setting.pdf", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /demo/UCloudDemo/Images.xcassets/setting.imageset/setting.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/demo/UCloudDemo/Images.xcassets/setting.imageset/setting.pdf -------------------------------------------------------------------------------- /demo/UCloudDemo/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.4.4 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 2 23 | LSRequiresIPhoneOS 24 | 25 | NSAppTransportSecurity 26 | 27 | NSAllowsArbitraryLoads 28 | 29 | 30 | NSPhotoLibraryAddUsageDescription 31 | 32 | NSPhotoLibraryUsageDescription 33 | 34 | UIBackgroundModes 35 | 36 | audio 37 | 38 | UIFileSharingEnabled 39 | 40 | UILaunchStoryboardName 41 | LaunchScreen 42 | UIMainStoryboardFile 43 | Main 44 | UISupportedInterfaceOrientations 45 | 46 | UIInterfaceOrientationPortrait 47 | 48 | UISupportedInterfaceOrientations~ipad 49 | 50 | UIInterfaceOrientationPortrait 51 | UIInterfaceOrientationPortraitUpsideDown 52 | UIInterfaceOrientationLandscapeLeft 53 | UIInterfaceOrientationLandscapeRight 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /demo/UCloudDemo/UCloudMediaViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // UCloudMediaViewController.h 3 | // UCloudPlayerDemo 4 | // 5 | // Created by yisanmao on 15/8/24. 6 | // Copyright (c) 2015年 yisanmao. All rights reserved. 7 | // 8 | 9 | #import 10 | @protocol UCloudMediaPlayback; 11 | 12 | /** 13 | * 播放器界面事件代理 14 | */ 15 | @protocol UCloudPlayerUIDelegate 16 | - (void)onClickMediaControl:(id)sender; 17 | - (void)onClickBack:(UIButton *)sender; 18 | - (void)onClickPlay:(id)sender; 19 | - (void)onClickPause:(id)sender; 20 | - (void)durationSliderTouchBegan:(id)delta; 21 | - (void)durationSliderTouchEnded:(id)delta; 22 | - (void)durationSliderValueChanged:(id)delta; 23 | - (void)clickBright:(id)sender; 24 | - (void)clickVolume:(id)sender; 25 | - (void)clickShot:(id)sender; 26 | - (void)selectedMenu:(NSInteger)menu choi:(NSInteger)choi; 27 | - (void)clickFull; 28 | @end 29 | 30 | @class UCloudMediaPlayer; 31 | 32 | @interface UCloudMediaViewController : UIViewController 33 | 34 | 35 | @property(nonatomic,weak) id delegatePlayer; 36 | @property(nonatomic, weak) id delegateAction; 37 | @property(nonatomic) BOOL isPortrait; 38 | @property (strong, nonatomic) NSDictionary *movieInfos; 39 | 40 | @property (nonatomic) NSInteger defultQingXiDu; 41 | @property (nonatomic) NSInteger defultHuaFu; 42 | @property (nonatomic) NSInteger defultJieMaQi; 43 | @property (strong, nonatomic) NSString *fileName; 44 | - (void)showNoFade; 45 | - (void)showAndFade; 46 | - (void)hide; 47 | - (void)refreshMediaControl; 48 | - (void)showOrHideMenu; 49 | 50 | - (void)stop; 51 | @end 52 | -------------------------------------------------------------------------------- /demo/UCloudDemo/UMMobClick.framework/Headers: -------------------------------------------------------------------------------- 1 | Versions/Current/Headers -------------------------------------------------------------------------------- /demo/UCloudDemo/UMMobClick.framework/UMMobClick: -------------------------------------------------------------------------------- 1 | Versions/Current/UMMobClick -------------------------------------------------------------------------------- /demo/UCloudDemo/UMMobClick.framework/Versions/A/Headers/MobClickGameAnalytics.h: -------------------------------------------------------------------------------- 1 | // 2 | // MobClickGameAnalytics.h 3 | // Analytics 4 | // 5 | // Copyright (C) 2010-2014 Umeng.com . All rights reserved. 6 | 7 | @interface MobClickGameAnalytics : NSObject 8 | 9 | #pragma mark - account function 10 | /** active user sign-in. 11 | 使用sign-In函数后,如果结束该PUID的统计,需要调用sign-Off函数 12 | @param puid : user's ID 13 | @param provider : 不能以下划线"_"开头,使用大写字母和数字标识; 如果是上市公司,建议使用股票代码。 14 | @return void. 15 | */ 16 | + (void)profileSignInWithPUID:(NSString *)puid; 17 | + (void)profileSignInWithPUID:(NSString *)puid provider:(NSString *)provider; 18 | 19 | /** active user sign-off. 20 | 停止sign-in PUID的统计 21 | @return void. 22 | */ 23 | + (void)profileSignOff; 24 | 25 | #pragma mark GameLevel methods 26 | ///--------------------------------------------------------------------------------------- 27 | /// @name set game level 28 | ///--------------------------------------------------------------------------------------- 29 | 30 | /** 设置玩家的等级. 31 | */ 32 | 33 | /** 设置玩家等级属性. 34 | @param level 玩家等级 35 | @return void 36 | */ 37 | + (void)setUserLevelId:(int)level; 38 | 39 | ///--------------------------------------------------------------------------------------- 40 | /// @name 关卡统计 41 | ///--------------------------------------------------------------------------------------- 42 | 43 | /** 记录玩家进入关卡,通过关卡及失败的情况. 44 | */ 45 | 46 | 47 | /** 进入关卡. 48 | @param level 关卡 49 | @return void 50 | */ 51 | + (void)startLevel:(NSString *)level; 52 | 53 | /** 通过关卡. 54 | @param level 关卡,如果level == nil 则为当前关卡 55 | @return void 56 | */ 57 | + (void)finishLevel:(NSString *)level; 58 | 59 | /** 未通过关卡. 60 | @param level 关卡,如果level == nil 则为当前关卡 61 | @return void 62 | */ 63 | 64 | + (void)failLevel:(NSString *)level; 65 | 66 | 67 | #pragma mark - 68 | #pragma mark Pay methods 69 | 70 | ///--------------------------------------------------------------------------------------- 71 | /// @name 支付统计 72 | ///--------------------------------------------------------------------------------------- 73 | 74 | /** 记录玩家交易兑换货币的情况 75 | @param currencyAmount 现金或等价物总额 76 | @param currencyType 为ISO4217定义的3位字母代码,如CNY,USD等(如使用其它自定义等价物作为现金,可使用ISO4217中未定义的3位字母组合传入货币类型) 77 | @param virtualAmount 虚拟币数量 78 | @param channel 支付渠道 79 | @param orderId 交易订单ID 80 | @return void 81 | */ 82 | + (void)exchange:(NSString *)orderId currencyAmount:(double)currencyAmount currencyType:(NSString *)currencyType virtualCurrencyAmount:(double)virtualAmount paychannel:(int)channel; 83 | 84 | /** 玩家支付货币兑换虚拟币. 85 | @param cash 真实货币数量 86 | @param source 支付渠道 87 | @param coin 虚拟币数量 88 | @return void 89 | */ 90 | 91 | + (void)pay:(double)cash source:(int)source coin:(double)coin; 92 | 93 | /** 玩家支付货币购买道具. 94 | @param cash 真实货币数量 95 | @param source 支付渠道 96 | @param item 道具名称 97 | @param amount 道具数量 98 | @param price 道具单价 99 | @return void 100 | */ 101 | + (void)pay:(double)cash source:(int)source item:(NSString *)item amount:(int)amount price:(double)price; 102 | 103 | 104 | #pragma mark - 105 | #pragma mark Buy methods 106 | 107 | ///--------------------------------------------------------------------------------------- 108 | /// @name 虚拟币购买统计 109 | ///--------------------------------------------------------------------------------------- 110 | 111 | /** 记录玩家使用虚拟币的消费情况 112 | */ 113 | 114 | 115 | /** 玩家使用虚拟币购买道具 116 | @param item 道具名称 117 | @param amount 道具数量 118 | @param price 道具单价 119 | @return void 120 | */ 121 | + (void)buy:(NSString *)item amount:(int)amount price:(double)price; 122 | 123 | 124 | #pragma mark - 125 | #pragma mark Use methods 126 | 127 | 128 | ///--------------------------------------------------------------------------------------- 129 | /// @name 道具消耗统计 130 | ///--------------------------------------------------------------------------------------- 131 | 132 | /** 记录玩家道具消费情况 133 | */ 134 | 135 | 136 | /** 玩家使用虚拟币购买道具 137 | @param item 道具名称 138 | @param amount 道具数量 139 | @param price 道具单价 140 | @return void 141 | */ 142 | 143 | + (void)use:(NSString *)item amount:(int)amount price:(double)price; 144 | 145 | 146 | #pragma mark - 147 | #pragma mark Bonus methods 148 | 149 | 150 | ///--------------------------------------------------------------------------------------- 151 | /// @name 虚拟币及道具奖励统计 152 | ///--------------------------------------------------------------------------------------- 153 | 154 | /** 记录玩家获赠虚拟币及道具的情况 155 | */ 156 | 157 | 158 | /** 玩家获虚拟币奖励 159 | @param coin 虚拟币数量 160 | @param source 奖励方式 161 | @return void 162 | */ 163 | 164 | + (void)bonus:(double)coin source:(int)source; 165 | 166 | /** 玩家获道具奖励 167 | @param item 道具名称 168 | @param amount 道具数量 169 | @param price 道具单价 170 | @param source 奖励方式 171 | @return void 172 | */ 173 | 174 | + (void)bonus:(NSString *)item amount:(int)amount price:(double)price source:(int)source; 175 | 176 | #pragma mark DEPRECATED 177 | 178 | //已经被新的setUserLevelId:方法替代,请使用新的API。 179 | + (void)setUserLevel:(NSString *)level; 180 | 181 | //已经被新的active user方法替代,请使用新的API。 182 | + (void)setUserID:(NSString *)userId sex:(int)sex age:(int)age platform:(NSString *)platform; 183 | 184 | @end 185 | -------------------------------------------------------------------------------- /demo/UCloudDemo/UMMobClick.framework/Versions/A/Headers/MobClickSocialAnalytics.h: -------------------------------------------------------------------------------- 1 | // 2 | // MobClickSocialAnalytics.h 3 | // SocialSDK 4 | // 5 | // Created by yeahugo on 13-3-4. 6 | // Copyright (c) 2013年 Umeng. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | typedef NSString * MobClickSocialTypeString; 12 | 13 | extern MobClickSocialTypeString const MobClickSocialTypeSina; //新浪微博 14 | extern MobClickSocialTypeString const MobClickSocialTypeTencent; //腾讯微博 15 | extern MobClickSocialTypeString const MobClickSocialTypeRenren; //人人网 16 | extern MobClickSocialTypeString const MobClickSocialTypeQzone; //Qzone 17 | extern MobClickSocialTypeString const MobClickSocialTypeRenren; //人人网 18 | extern MobClickSocialTypeString const MobClickSocialTypeDouban; //douban 19 | extern MobClickSocialTypeString const MobClickSocialTypeWxsesion; //微信好友分享 20 | extern MobClickSocialTypeString const MobClickSocialTypeWxtimeline; //微信朋友圈 21 | extern MobClickSocialTypeString const MobClickSocialTypeHuaban; //花瓣 22 | extern MobClickSocialTypeString const MobClickSocialTypeKaixin; //开心 23 | extern MobClickSocialTypeString const MobClickSocialTypeFacebook; //facebook 24 | extern MobClickSocialTypeString const MobClickSocialTypeTwitter; //twitter 25 | extern MobClickSocialTypeString const MobClickSocialTypeInstagram; //instagram 26 | extern MobClickSocialTypeString const MobClickSocialTypeFlickr; //flickr 27 | extern MobClickSocialTypeString const MobClickSocialTypeQQ; //qq 28 | extern MobClickSocialTypeString const MobClickSocialTypeWxfavorite; //微信收藏 29 | extern MobClickSocialTypeString const MobClickSocialTypeLwsession; //来往 30 | extern MobClickSocialTypeString const MobClickSocialTypeLwtimeline; //来往动态 31 | extern MobClickSocialTypeString const MobClickSocialTypeYxsession; //易信 32 | extern MobClickSocialTypeString const MobClickSocialTypeYxtimeline; //易信朋友圈 33 | 34 | 35 | /** 36 | 微博类,发送微博之后在回调方法初始化此对象 37 | 38 | */ 39 | @interface MobClickSocialWeibo : NSObject 40 | 41 | 42 | /** 43 | 微博平台类型,使用上面定义的几种常量字符串 44 | */ 45 | @property (nonatomic, copy) NSString *platformType; 46 | 47 | /** 48 | 微博id 49 | */ 50 | @property (nonatomic, copy) NSString *weiboId; 51 | 52 | /** 53 | 用户在微博平台的id 54 | */ 55 | @property (nonatomic, copy) NSString *userId; 56 | 57 | /** 58 | 微博平台的自定义字段,例如定义{‘gender’:0,’name’:’xxx’} 59 | */ 60 | @property (nonatomic, strong) NSDictionary *param; 61 | 62 | 63 | /** 64 | 初始化方法,在发送微博结束的回调方法使用此初始化方法 65 | 66 | @param platformType 微博平台类型 67 | @param weiboId 微博id,可以设置为nil 68 | @param userId 用户id 69 | @param param 微博平台自定义字段,可以设置为nil 70 | 71 | @return 微博对象 72 | */ 73 | -(id)initWithPlatformType:(MobClickSocialTypeString)platformType weiboId:(NSString *)weiboId usid:(NSString *)usid param:(NSDictionary *)param; 74 | 75 | @end 76 | 77 | /** 78 | 发送统计完成的block对象 79 | */ 80 | typedef void (^MobClickSocialAnalyticsCompletion)(NSDictionary * response, NSError *error); 81 | 82 | 83 | /** 84 | 负责统计微博类。 85 | 分享微博完成之后需要先构造`MobClickSocialWeibo`组成微博数组,然后再用类方法发送微博数组 86 | 87 | ``` 88 | +(void)postWeiboCounts:(NSArray *)weibos appKey:(NSString *)appKey topic:(NSString *)topic completion:(MobClickSocialAnalyticsCompletion)completion; 89 | ``` 90 | 91 | 例如 92 | 93 | 94 | MobClickSocialWeibo *tencentWeibo = [[MobClickSocialWeibo alloc] initWithPlatformType:UMSocialTypeTencent weiboId:nil userId:@"tencent123" param:@{@"gender":@"1"}]; 95 | [MobClickSocialAnalytics postWeibos:@[tencentWeibo] appKey:@"507fcab25270157b37000010" topic:@"test" completion:^(NSDictionary *result, NSError *error) { 96 | NSLog(@"result is %@", result); 97 | }]; 98 | 99 | */ 100 | 101 | @interface MobClickSocialAnalytics : NSObject 102 | /** 103 | 发送统计微博 104 | 105 | @param weibos UMSocialWeibo对象组成的数组 106 | @param appKey 友盟appkey 107 | @param topic 话题,可选,可以设置为nil 108 | @parma completion 发送完成的事件处理block 109 | 110 | */ 111 | +(void)postWeiboCounts:(NSArray *)weibos appKey:(NSString *)appKey topic:(NSString *)topic completion:(MobClickSocialAnalyticsCompletion)completion; 112 | @end 113 | -------------------------------------------------------------------------------- /demo/UCloudDemo/UMMobClick.framework/Versions/A/UMMobClick: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/demo/UCloudDemo/UMMobClick.framework/Versions/A/UMMobClick -------------------------------------------------------------------------------- /demo/UCloudDemo/UMMobClick.framework/Versions/Current: -------------------------------------------------------------------------------- 1 | A -------------------------------------------------------------------------------- /demo/UCloudDemo/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // UCloudPlayerDemo 4 | // 5 | // Created by yisanmao on 15/8/19. 6 | // Copyright (c) 2015年 yisanmao. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "PlayerManager.h" 11 | 12 | #define PlayPortrait 0 13 | 14 | 15 | @interface ViewController : UIViewController 16 | @property (strong, nonatomic) PlayerManager *playerManager; 17 | @end 18 | 19 | -------------------------------------------------------------------------------- /demo/UCloudDemo/en.lproj/Main.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "UIButton"; normalTitle = "Play"; ObjectID = "D8f-hM-rzh"; */ 3 | "D8f-hM-rzh.normalTitle" = "Play"; 4 | 5 | /* Class = "UINavigationItem"; title = "Player"; ObjectID = "bZ2-tQ-TEs"; */ 6 | "bZ2-tQ-TEs.title" = "Player"; 7 | -------------------------------------------------------------------------------- /demo/UCloudDemo/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // UCloudDemo 4 | // 5 | // Created by yisanmao on 15/8/27. 6 | // Copyright (c) 2015年 yisanmao. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | }; 17 | -------------------------------------------------------------------------------- /demo/UCloudDemoTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | cn.ucloud.umplayer.$(PRODUCT_NAME:rfc1034identifier) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /demo/UCloudDemoTests/UCloudDemoTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // UCloudDemoTests.m 3 | // UCloudDemoTests 4 | // 5 | // Created by yisanmao on 15/8/27. 6 | // Copyright (c) 2015年 yisanmao. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | @interface UCloudDemoTests : XCTestCase 13 | 14 | @end 15 | 16 | @implementation UCloudDemoTests 17 | 18 | - (void)setUp { 19 | [super setUp]; 20 | // Put setup code here. This method is called before the invocation of each test method in the class. 21 | } 22 | 23 | - (void)tearDown { 24 | // Put teardown code here. This method is called after the invocation of each test method in the class. 25 | [super tearDown]; 26 | } 27 | 28 | - (void)testExample { 29 | // This is an example of a functional test case. 30 | XCTAssert(YES, @"Pass"); 31 | } 32 | 33 | - (void)testPerformanceExample { 34 | // This is an example of a performance test case. 35 | [self measureBlock:^{ 36 | // Put the code you want to measure the time of here. 37 | }]; 38 | } 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /docs/appledoc/docset-installed.txt: -------------------------------------------------------------------------------- 1 | Documentation set was installed to Xcode! 2 | 3 | Path: /Users/Sidney/Library/Developer/Shared/Documentation/DocSets/cn.UCloud.IJKMediaPlayer-static.docset 4 | Time: 2017-04-18 10:19:24 +0000 -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleIdentifier 8 | cn.UCloud.IJKMediaPlayer-static 9 | CFBundleName 10 | IJKMediaPlayer-static Documentation 11 | CFBundleShortVersionString 12 | 1.0 13 | CFBundleVersion 14 | 1.0 15 | 16 | 17 | 18 | DocSetFallbackURL 19 | https://ucloud.cn//UCloud 20 | DocSetFeedName 21 | IJKMediaPlayer-static Documentation 22 | DocSetFeedURL 23 | https://ucloud.cn//UCloud/cn.UCloud.IJKMediaPlayer-static.atom 24 | DocSetMinimumXcodeVersion 25 | 3.0 26 | DocSetPlatformFamily 27 | iphoneos 28 | DashDocSetFamily 29 | appledoc 30 | DocSetPublisherIdentifier 31 | cn.UCloud.documentation 32 | DocSetPublisherName 33 | UCloud 34 | NSHumanReadableCopyright 35 | Copyright © 2017 UCloud. All rights reserved. 36 | 37 | 38 | -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/Documents/Blocks/UCloudMediaCompletionBlock.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | UCloudMediaCompletionBlock Block Reference 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 |
15 | 16 |

17 | IJKMediaPlayer-static 18 |

19 | 20 |

21 | UCloud 22 |

23 | 24 |
25 |
26 | 27 | 57 | 58 |
59 |
60 |
61 |
62 |

UCloudMediaCompletionBlock Block Reference

63 | 64 | 65 |
66 | 67 | 68 | 69 | 70 |
Declared inUCloudMediaPlayer.h
71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 |

Block Definition

82 |

UCloudMediaCompletionBlock

83 | 84 | 85 | typedef void (^UCloudMediaCompletionBlock) (NSInteger defaultNum, NSArray *data) 86 | 87 | 88 | 89 | 90 | 91 |
92 | 93 |
94 | 102 |
103 |
104 |
105 |
106 | 107 | 108 | 109 | -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/Documents/Classes/UVLogFileInfo.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | UVLogFileInfo Class Reference 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 |
15 | 16 |

17 | IJKMediaPlayer-static 18 |

19 | 20 |

21 | UCloud 22 |

23 | 24 |
25 |
26 | 27 | 67 | 68 |
69 |
70 |
71 |
72 |

UVLogFileInfo Class Reference

73 | 74 | 75 |
76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 |
Inherits fromNSObject
Declared inUVFileLogger.h
84 | 85 | 86 | 87 | 88 |
89 | 90 |

Overview

91 |

UVLogFileInfo is a simple class that provides access to various file attributes. 92 | It provides good performance as it only fetches the information if requested, 93 | and it caches the information to prevent duplicate fetches.

94 | 95 |

It was designed to provide quick snapshots of the current state of log files, 96 | and to help sort log files in an array.

97 | 98 |

This class does not monitor the files, or update it’s cached attribute values if the file changes on disk. 99 | This is not what the class was designed for.

100 | 101 |

If you absolutely must get updated values, 102 | you can invoke the reset method which will clear the cache.

103 |
104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 |
115 | 116 |
117 | 125 |
126 |
127 |
128 |
129 | 130 | 131 | 132 | -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/Documents/Constants/DecodeMethod.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | DecodeMethod Constants Reference 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 |
15 | 16 |

17 | IJKMediaPlayer-static 18 |

19 | 20 |

21 | UCloud 22 |

23 | 24 |
25 |
26 | 27 | 57 | 58 |
59 |
60 |
61 |
62 |

DecodeMethod Constants Reference

63 | 64 | 65 |
66 | 67 | 68 | 69 | 70 |
Declared inUCloudMediaPlayer.h
71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 |

DecodeMethod

79 | 80 | 81 |
82 |

解码器

83 |
84 | 85 | 86 |
87 | 88 | 89 |

Definition

90 | typedef NS_ENUM(NSInteger, DecodeMethod ) {
91 | 92 |    DecodeMethodSoft,
93 | 94 |    DecodeMethodHard,
95 | 96 | };
97 | 98 |
99 | 100 |
101 |

Constants

102 |
103 | 104 |
DecodeMethodSoft
105 |
106 | 107 | 108 |

软解码

109 | 110 | 111 | 112 | 113 | 114 | 115 |

116 | Declared In UCloudMediaPlayer.h. 117 |

118 | 119 |
120 | 121 |
DecodeMethodHard
122 |
123 | 124 | 125 |

硬解码

126 | 127 | 128 | 129 | 130 | 131 | 132 |

133 | Declared In UCloudMediaPlayer.h. 134 |

135 | 136 |
137 | 138 |
139 |
140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 |
149 |

Declared In

150 |

UCloudMediaPlayer.h

151 |
152 | 153 | 154 | 155 | 156 | 157 |
158 | 159 |
160 | 168 |
169 |
170 |
171 |
172 | 173 | 174 | 175 | -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/Documents/Protocols/UCloudMediaSegmentResolver.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | UCloudMediaSegmentResolver Protocol Reference 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 |
15 | 16 |

17 | IJKMediaPlayer-static 18 |

19 | 20 |

21 | UCloud 22 |

23 | 24 |
25 |
26 | 27 | 67 | 68 |
69 |
70 |
71 |
72 |

UCloudMediaSegmentResolver Protocol Reference

73 | 74 | 75 |
76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 |
Conforms toNSObject
Declared inUCloudPlayback.h
84 | 85 | 86 | 87 | 88 |
89 | 90 |

Overview

91 |

缓冲buffer变更的Key,直播下cachedDuration>0才生效

92 |
93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 |
104 | 105 |
106 | 114 |
115 |
116 |
117 |
118 | 119 | 120 | 121 | -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/Documents/Protocols/UVRegistereUVynamicLogging.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | UVRegistereUVynamicLogging Protocol Reference 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 |
15 | 16 |

17 | IJKMediaPlayer-static 18 |

19 | 20 |

21 | UCloud 22 |

23 | 24 |
25 |
26 | 27 | 75 | 76 |
77 |
78 |
79 |
80 |

UVRegistereUVynamicLogging Protocol Reference

81 | 82 | 83 |
84 | 85 | 86 | 87 | 88 |
Declared inUVLog.h
89 | 90 | 91 | 92 | 93 |
94 | 95 |

Overview

96 |

This protocol describes a dynamic logging component

97 |
98 | 99 | 100 | 101 | 102 | 103 |
104 | 105 | 106 | 107 | 108 | 109 | 110 |
111 |
112 | 113 |

  UVLogLevel 114 | required method

115 | 116 |
117 |
118 | 119 |
120 | 121 | 122 |
123 |

Implement these methods to allow a file’s log level to be managed from a central location.

124 |
125 | 126 | 127 | 128 |
@property (class, nonatomic, readwrite, setter=UVSetLogLevel:) UVLogLevel
129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 |
139 |

Discussion

140 |

This is useful if you’d like to be able to change log levels for various parts 141 | of your code from within the running application.

142 | 143 |

Imagine pulling up the settings for your application, 144 | and being able to configure the logging level on a per file basis.

145 | 146 |

The implementation can be very straight-forward:

147 | 148 |
+ (int)UVLogLevel
149 | {
150 | return UVLogLevel;
151 | }
152 | 
153 | + (void)UVSetLogLevel:(UVLogLevel)level
154 | {
155 | UVLogLevel = level;
156 | }
157 | 
158 |
159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 |
167 |

Declared In

168 |

UVLog.h

169 |
170 | 171 | 172 |
173 |
174 |
175 |
176 | 177 |
178 | 179 | 180 | 181 | 182 | 183 | 184 |
185 | 186 |
187 | 195 |
196 |
197 |
198 |
199 | 200 | 201 | 202 | -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/Documents/css/scss/_index.scss: -------------------------------------------------------------------------------- 1 | .index-container { 2 | display: flex; 3 | flex-direction: row; 4 | flex-wrap: wrap; 5 | 6 | @media (max-width: $mobile-max-width) { 7 | flex-direction: column; 8 | } 9 | 10 | .index-column { 11 | flex: 1 1 33%; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/Documents/css/scss/_object.scss: -------------------------------------------------------------------------------- 1 | .section-specification { 2 | table { 3 | width: auto; 4 | 5 | th { 6 | text-align: left; 7 | } 8 | } 9 | } 10 | 11 | .method-title { 12 | margin-left: -15px; 13 | margin-bottom: 8px; 14 | transition: margin-left .3s ease-out; 15 | 16 | .section-method.hide & { 17 | margin-left: 0; 18 | } 19 | 20 | code { 21 | font-weight: 400; 22 | font-size: .85em; 23 | } 24 | } 25 | 26 | .method-info { 27 | background: $object-background; 28 | border-bottom: 1px solid $object-border; 29 | margin: 0 -25px; 30 | padding: 20px 25px 0 25px; 31 | transition: height .3s ease-out; 32 | 33 | position: relative; 34 | 35 | .pointy-thing { 36 | background: $content-background; 37 | height: 10px; 38 | border-bottom: 1px solid $object-border; 39 | margin: -20px -25px 16px -25px; 40 | 41 | &:before { 42 | display: inline-block; 43 | content: ""; 44 | 45 | background: $object-background; 46 | border: 1px solid $object-border; 47 | border-bottom: 0; 48 | border-right: 0; 49 | 50 | position: absolute; 51 | left: 21px; 52 | top: 3px; 53 | width: 12px; 54 | height: 12px; 55 | transform: rotate(45deg); 56 | } 57 | } 58 | 59 | .method-subsection { 60 | margin-bottom: 15px; 61 | 62 | .argument-name { 63 | width: 1px; 64 | text-align: right; 65 | 66 | code { 67 | color: #808080; 68 | font-style: italic; 69 | font-weight: 400; 70 | } 71 | } 72 | } 73 | } 74 | 75 | .section-method { 76 | &.hide .method-info { 77 | height: 0 !important; 78 | overflow: hidden; 79 | display: none; 80 | } 81 | 82 | &.hide.animating .method-info { 83 | display: block; 84 | } 85 | 86 | &.animating .method-info { 87 | overflow: hidden; 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/Documents/css/scss/_print.scss: -------------------------------------------------------------------------------- 1 | @media print { 2 | body { 3 | background: #fff; 4 | padding: 8px; 5 | } 6 | 7 | header { 8 | position: static; 9 | background: #fff; 10 | color: #000; 11 | } 12 | 13 | aside { 14 | display: none; 15 | } 16 | 17 | .container { 18 | max-width: none; 19 | padding: 0; 20 | } 21 | 22 | article { 23 | margin-top: 0; 24 | 25 | #content { 26 | border: 0; 27 | background: #fff; 28 | padding: 15px 0 0 0; 29 | 30 | .title { 31 | margin-top: 0; 32 | padding-top: 0; 33 | } 34 | } 35 | } 36 | 37 | .method-info { 38 | &, & .pointy-thing { 39 | background: #fff; 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/Documents/css/scss/_variables.scss: -------------------------------------------------------------------------------- 1 | $body-font: -apple-system-font, "Helvetica Neue", Helvetica, sans-serif; 2 | $code-font: "Source Code Pro", Monaco, Menlo, Consolas, monospace; 3 | 4 | $body-background: #f2f2f2; 5 | $content-background: #fff; 6 | $content-border: #e9e9e9; 7 | $tint-color: #08c; 8 | $object-background: #f9f9f9; 9 | $object-border: #e9e9e9; 10 | 11 | $mobile-max-width: 650px; 12 | -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/Documents/css/scss/_xcode.scss: -------------------------------------------------------------------------------- 1 | .xcode { 2 | header, aside { 3 | display: none; 4 | } 5 | 6 | .container { 7 | padding: 0; 8 | } 9 | 10 | article { 11 | margin-top: 0; 12 | 13 | #content { 14 | border: 0; 15 | margin: 0; 16 | } 17 | } 18 | 19 | .method-info { 20 | &, .section-method.hide & { 21 | max-height: auto; 22 | overflow: visible; 23 | 24 | &.hiding { 25 | display: block; 26 | } 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/Documents/css/scss/style.scss: -------------------------------------------------------------------------------- 1 | @import "variables", "normalize", "layout", "index", "object", "print", "xcode"; 2 | -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/Documents/hierarchy.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | IJKMediaPlayer-static Hierarchy 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 |
15 | 16 |

17 | IJKMediaPlayer-static 18 |

19 | 20 |

21 | UCloud 22 |

23 | 24 |
25 |
26 | 27 | 36 | 37 |
38 |
39 |
40 |
41 |

IJKMediaPlayer-static Hierarchy

42 | 43 | 44 |
45 |

Class Hierarchy

46 | 47 | 86 | 87 |
88 | 89 | 90 | 91 |
92 | 93 |

Protocol References

94 | 109 | 110 | 111 |

Constant References

112 | 133 | 134 | 135 |
136 | 137 | 138 |
139 | 147 |
148 |
149 |
150 |
151 |
152 | 153 | 154 | 155 | -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/Documents/img/button_bar_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/docs/appledoc/docset/Contents/Resources/Documents/img/button_bar_background.png -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/Documents/img/disclosure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/docs/appledoc/docset/Contents/Resources/Documents/img/disclosure.png -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/Documents/img/disclosure_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/docs/appledoc/docset/Contents/Resources/Documents/img/disclosure_open.png -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/Documents/img/library_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/docs/appledoc/docset/Contents/Resources/Documents/img/library_background.png -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/Documents/img/title_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/docs/appledoc/docset/Contents/Resources/Documents/img/title_background.png -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/Documents/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | IJKMediaPlayer-static Reference 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 |
15 | 16 |

17 | IJKMediaPlayer-static 18 |

19 | 20 |

21 | UCloud 22 |

23 | 24 |
25 |
26 | 27 | 36 | 37 |
38 |
39 |
40 |
41 |

IJKMediaPlayer-static Reference

42 | 43 | 44 | 45 |
46 | 47 | 48 | 49 |
50 |

Class References

51 | 74 |
75 | 76 | 77 | 78 |
79 | 80 |

Protocol References

81 | 96 | 97 | 98 | 99 |

Constant References

100 | 121 | 122 | 123 | 124 |
125 | 126 |
127 | 128 |
129 | 137 |
138 |
139 |
140 |
141 |
142 | 143 | 144 | 145 | -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/Documents/js/script.js: -------------------------------------------------------------------------------- 1 | function $() { 2 | return document.querySelector.apply(document, arguments); 3 | } 4 | 5 | if (navigator.userAgent.indexOf("Xcode") != -1) { 6 | document.documentElement.classList.add("xcode"); 7 | } 8 | 9 | var jumpTo = $("#jump-to"); 10 | 11 | if (jumpTo) { 12 | jumpTo.addEventListener("change", function(e) { 13 | location.hash = this.options[this.selectedIndex].value; 14 | }); 15 | } 16 | 17 | function hashChanged() { 18 | if (/^#\/\/api\//.test(location.hash)) { 19 | var element = document.querySelector("a[name='" + location.hash.substring(1) + "']"); 20 | 21 | if (!element) { 22 | return; 23 | } 24 | 25 | element = element.parentNode; 26 | 27 | element.classList.remove("hide"); 28 | fixScrollPosition(element); 29 | } 30 | } 31 | 32 | function fixScrollPosition(element) { 33 | var scrollTop = element.offsetTop - 150; 34 | document.documentElement.scrollTop = scrollTop; 35 | document.body.scrollTop = scrollTop; 36 | } 37 | 38 | [].forEach.call(document.querySelectorAll(".section-method"), function(element) { 39 | element.classList.add("hide"); 40 | 41 | element.querySelector(".method-title a").addEventListener("click", function(e) { 42 | var info = element.querySelector(".method-info"), 43 | infoContainer = element.querySelector(".method-info-container"); 44 | 45 | element.classList.add("animating"); 46 | info.style.height = (infoContainer.clientHeight + 40) + "px"; 47 | fixScrollPosition(element); 48 | element.classList.toggle("hide"); 49 | if (element.classList.contains("hide")) { 50 | e.preventDefault(); 51 | } 52 | setTimeout(function() { 53 | element.classList.remove("animating"); 54 | }, 300); 55 | }); 56 | }); 57 | 58 | window.addEventListener("hashchange", hashChanged); 59 | hashChanged(); 60 | -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/Tokens11.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | //apple_ref/occ/intf/UCloudMediaSegmentResolver 7 | 缓冲buffer变更的Key,直播下cachedDuration>0才生效 8 | UCloudPlayback.h 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/Tokens14.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | //apple_ref/occ/intf/UVLogFormatter 7 | This protocol describes the behavior of a log formatter 8 | UVLog.h 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | //apple_ref/occ/intfm/UVLogFormatter/formatLogMessage:NS_SWIFT_NAME: 17 | Formatters may optionally be added to any logger. 18 | This allows for increased flexibility in the logging environment. 19 | For example, log messages for log files may be formatted differently than log messages for the console. 20 | UVLog.h 21 | 22 | - (NSString *__nullable)formatLogMessage:(UVLogMessage *)logMessage NS_SWIFT_NAME 23 | 24 | 25 | //api/name/formatLogMessage:NS_SWIFT_NAME: 26 | 27 | 28 | 29 | 30 | //apple_ref/occ/intfm/UVLogFormatter/didaddToLogger: 31 | A single formatter instance can be added to multiple loggers. 32 | These methods provides hooks to notify the formatter of when it's added/removed. 33 | UVLog.h 34 | 35 | - (void)didaddToLogger:(id<UVLogger>)logger 36 | 37 | 38 | //api/name/didaddToLogger: 39 | 40 | 41 | 42 | 43 | //apple_ref/occ/intfm/UVLogFormatter/didaddToLogger:inQueue: 44 | * A single formatter instance can be added to multiple loggers. 45 | * These methods provides hooks to notify the formatter of when it's added/removed. 46 | * 47 | * This is primarily for thread-safety. 48 | * If a formatter is explicitly not thread-safe, it may wish to throw an exception if added to multiple loggers. 49 | * Or if a formatter has potentially thread-unsafe code (e.g. NSDateFormatter), 50 | * it could possibly use these hooks to switch to thread-safe versions of the code or use dispatchsetspecific() 51 | .* to add its own specific values. 52 | * 53 | UVLog.h 54 | 55 | - (void)didaddToLogger:(id<UVLogger>)logger inQueue:(dispatch_queue_t)queue 56 | 57 | 58 | //api/name/didaddToLogger:inQueue: 59 | 60 | 61 | 62 | 63 | //apple_ref/occ/intfm/UVLogFormatter/willRemoveFromLogger: 64 | See the above description for didaddToLogger: 65 | UVLog.h 66 | 67 | - (void)willRemoveFromLogger:(id<UVLogger>)logger 68 | 69 | 70 | //api/name/willRemoveFromLogger: 71 | 72 | 73 | 74 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/Tokens16.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | //apple_ref/occ/intf/UVRegistereUVynamicLogging 7 | This protocol describes a dynamic logging component 8 | UVLog.h 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | //apple_ref/occ/intfm/UVRegistereUVynamicLogging/UVSetLogLevel: 17 | Implement these methods to allow a file's log level to be managed from a central location. 18 | UVLog.h 19 | 20 | @property (class, nonatomic, readwrite, setter=UVSetLogLevel:) UVLogLevel 21 | 22 | 23 | //api/name/UVLogLevel 24 | 25 | 26 | 27 | 28 | //apple_ref/occ/intfm/UVRegistereUVynamicLogging/UVLogLevel 29 | Implement these methods to allow a file's log level to be managed from a central location. 30 | UVLog.h 31 | 32 | @property (class, nonatomic, readwrite, setter=UVSetLogLevel:) UVLogLevel 33 | 34 | 35 | //api/name/UVLogLevel 36 | 37 | 38 | 39 | 40 | //apple_ref/occ/intfp/UVRegistereUVynamicLogging/UVLogLevel 41 | Implement these methods to allow a file's log level to be managed from a central location. 42 | UVLog.h 43 | 44 | @property (class, nonatomic, readwrite, setter=UVSetLogLevel:) UVLogLevel 45 | 46 | 47 | //api/name/UVLogLevel 48 | 49 | 50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/Tokens17.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | //apple_ref/c/tdef/DecodeMethod 7 | 解码器 8 | UCloudMediaPlayer.h 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | //apple_ref/c/econst/DecodeMethodSoft 18 | 软解码 19 | 20 | DecodeMethodSoft 21 | 22 | UCloudMediaPlayer.h 23 | 24 | 25 | 26 | 27 | 28 | //apple_ref/c/econst/DecodeMethodHard 29 | 硬解码 30 | 31 | DecodeMethodHard 32 | 33 | UCloudMediaPlayer.h 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/Tokens18.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | //apple_ref/c/tdef/Definition 7 | 清晰度 8 | UCloudMediaPlayer.h 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | //apple_ref/c/econst/Definition_fhd 18 | 蓝光 19 | Definition_fhd 20 | 21 | UCloudMediaPlayer.h 22 | 23 | 24 | 25 | 26 | 27 | //apple_ref/c/econst/Definition_shd 28 | 超清 29 | Definition_shd 30 | 31 | UCloudMediaPlayer.h 32 | 33 | 34 | 35 | 36 | 37 | //apple_ref/c/econst/Definition_hd 38 | 高清 39 | Definition_hd 40 | 41 | UCloudMediaPlayer.h 42 | 43 | 44 | 45 | 46 | 47 | //apple_ref/c/econst/Definition_sd 48 | 标清 49 | Definition_sd 50 | 51 | UCloudMediaPlayer.h 52 | 53 | 54 | 55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/Tokens19.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | //apple_ref/c/tdef/ErrorNum 7 | 错误码 8 | UCloudMediaPlayer.h 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | //apple_ref/c/econst/ErrorNumShowViewIsNull 18 | 19 | ErrorNumShowViewIsNull 20 | 21 | UCloudMediaPlayer.h 22 | 23 | 24 | 25 | 26 | 27 | //apple_ref/c/econst/ErrorNumUrlIsNull 28 | 29 | ErrorNumUrlIsNull 30 | 31 | UCloudMediaPlayer.h 32 | 33 | 34 | 35 | 36 | 37 | //apple_ref/c/econst/ErrorNumSaveShotError 38 | 39 | ErrorNumSaveShotError 40 | 41 | UCloudMediaPlayer.h 42 | 43 | 44 | 45 | 46 | 47 | //apple_ref/c/econst/ErrorNumUrlIsWrong 48 | 49 | ErrorNumUrlIsWrong 50 | 51 | UCloudMediaPlayer.h 52 | 53 | 54 | 55 | 56 | 57 | //apple_ref/c/econst/ErrorNumdrm 58 | 59 | ErrorNumdrm 60 | 61 | UCloudMediaPlayer.h 62 | 63 | 64 | 65 | 66 | 67 | //apple_ref/c/econst/ErrorNumCgiLostPars 68 | 69 | ErrorNumCgiLostPars 70 | 71 | UCloudMediaPlayer.h 72 | 73 | 74 | 75 | 76 | 77 | //apple_ref/c/econst/ErrorNumCgiRequest 78 | 79 | ErrorNumCgiRequest 80 | 81 | UCloudMediaPlayer.h 82 | 83 | 84 | 85 | 86 | 87 | //apple_ref/c/econst/ErrorNumCgiAuthFail 88 | 89 | ErrorNumCgiAuthFail 90 | 91 | UCloudMediaPlayer.h 92 | 93 | 94 | 95 | 96 | 97 | //apple_ref/c/econst/ErrorNumCgiMovieCannotFound 98 | 99 | ErrorNumCgiMovieCannotFound 100 | 101 | UCloudMediaPlayer.h 102 | 103 | 104 | 105 | 106 | 107 | //apple_ref/c/econst/ErrorNumCgiDomainError 108 | 不会构建videoview 109 | ErrorNumCgiDomainError 110 | 111 | UCloudMediaPlayer.h 112 | 113 | 114 | 115 | 116 | 117 | //apple_ref/c/econst/ErrorNumCgiServerError 118 | 119 | ErrorNumCgiServerError 120 | 121 | UCloudMediaPlayer.h 122 | 123 | 124 | 125 | 126 | 127 | //apple_ref/c/econst/ErrorNumCgiTimeOut 128 | 129 | ErrorNumCgiTimeOut 130 | 131 | UCloudMediaPlayer.h 132 | 133 | 134 | 135 | 136 | 137 | 138 | -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/Tokens20.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | //apple_ref/c/tdef/SubErrorCode 7 | 播放错误时的子错误码 8 | UCloudMediaPlayer.h 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | //apple_ref/c/econst/SubErrorCodeDefault 18 | 默认错误 19 | SubErrorCodeDefault 20 | 21 | UCloudMediaPlayer.h 22 | 23 | 24 | 25 | 26 | 27 | //apple_ref/c/econst/SubErrorCodePrepareTimeout 28 | 准备播放超时 29 | SubErrorCodePrepareTimeout 30 | 31 | UCloudMediaPlayer.h 32 | 33 | 34 | 35 | 36 | 37 | //apple_ref/c/econst/SubErrorCodeAVFrameTimeout 38 | 获取音频或视频帧超时 39 | SubErrorCodeAVFrameTimeout 40 | 41 | UCloudMediaPlayer.h 42 | 43 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/Tokens21.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | //apple_ref/c/tdef/UCloudMediaEvent 7 | 8 | UCloudMediaUrlOpenData.h 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | //apple_ref/c/econst/UCloudMediaEvent_WillHttpOpen 18 | 19 | UCloudMediaEvent_WillHttpOpen 20 | 21 | UCloudMediaUrlOpenData.h 22 | 23 | 24 | 25 | 26 | 27 | //apple_ref/c/econst/UCloudMediaEvent_DidHttpOpen 28 | 29 | UCloudMediaEvent_DidHttpOpen 30 | 31 | UCloudMediaUrlOpenData.h 32 | 33 | 34 | 35 | 36 | 37 | //apple_ref/c/econst/UCloudMediaEvent_WillHttpSeek 38 | 39 | UCloudMediaEvent_WillHttpSeek 40 | 41 | UCloudMediaUrlOpenData.h 42 | 43 | 44 | 45 | 46 | 47 | //apple_ref/c/econst/UCloudMediaEvent_DidHttpSeek 48 | 49 | UCloudMediaEvent_DidHttpSeek 50 | 51 | UCloudMediaUrlOpenData.h 52 | 53 | 54 | 55 | 56 | 57 | //apple_ref/c/econst/UCloudMediaCtrl_WillTcpOpen 58 | 59 | UCloudMediaCtrl_WillTcpOpen 60 | 61 | UCloudMediaUrlOpenData.h 62 | 63 | 64 | 65 | 66 | 67 | //apple_ref/c/econst/UCloudMediaCtrl_DidTcpOpen 68 | 69 | UCloudMediaCtrl_DidTcpOpen 70 | 71 | UCloudMediaUrlOpenData.h 72 | 73 | 74 | 75 | 76 | 77 | //apple_ref/c/econst/UCloudMediaCtrl_WillHttpOpen 78 | 79 | UCloudMediaCtrl_WillHttpOpen 80 | 81 | UCloudMediaUrlOpenData.h 82 | 83 | 84 | 85 | 86 | 87 | //apple_ref/c/econst/UCloudMediaCtrl_WillLiveOpen 88 | 89 | UCloudMediaCtrl_WillLiveOpen 90 | 91 | UCloudMediaUrlOpenData.h 92 | 93 | 94 | 95 | 96 | 97 | //apple_ref/c/econst/UCloudMediaCtrl_WillConcatSegmentOpen 98 | 99 | UCloudMediaCtrl_WillConcatSegmentOpen 100 | 101 | UCloudMediaUrlOpenData.h 102 | 103 | 104 | 105 | 106 | 107 | 108 | -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/Tokens22.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | //apple_ref/c/tdef/UVLogFlag 7 | Flags accompany each log. They are used together with levels to filter out logs. 8 | UVLog.h 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | //apple_ref/c/econst/UVLogFlagError 18 | 0...00001 UVLogFlagError 19 | 20 | UVLogFlagError 21 | 22 | UVLog.h 23 | 24 | 25 | 26 | 27 | 28 | //apple_ref/c/econst/UVLogFlagWarning 29 | 0...00010 UVLogFlagWarning 30 | 31 | UVLogFlagWarning 32 | 33 | UVLog.h 34 | 35 | 36 | 37 | 38 | 39 | //apple_ref/c/econst/UVLogFlagInfo 40 | 0...00100 UVLogFlagInfo 41 | 42 | UVLogFlagInfo 43 | 44 | UVLog.h 45 | 46 | 47 | 48 | 49 | 50 | //apple_ref/c/econst/UVLogFlagDebug 51 | 0...01000 UVLogFlagDebug 52 | 53 | UVLogFlagDebug 54 | 55 | UVLog.h 56 | 57 | 58 | 59 | 60 | 61 | //apple_ref/c/econst/UVLogFlagVerbose 62 | 0...10000 UVLogFlagVerbose 63 | 64 | UVLogFlagVerbose 65 | 66 | UVLog.h 67 | 68 | 69 | 70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/Tokens23.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | //apple_ref/c/tdef/UVLogLevel 7 | Log levels are used to filter out logs. Used together with flags. 8 | UVLog.h 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | //apple_ref/c/econst/UVLogLevelOff 18 | No logs 19 | 20 | UVLogLevelOff 21 | 22 | UVLog.h 23 | 24 | 25 | 26 | 27 | 28 | //apple_ref/c/econst/UVLogLevelError 29 | Error logs only 30 | 31 | UVLogLevelError 32 | 33 | UVLog.h 34 | 35 | 36 | 37 | 38 | 39 | //apple_ref/c/econst/UVLogLevelWarning 40 | Error and warning logs 41 | 42 | UVLogLevelWarning 43 | 44 | UVLog.h 45 | 46 | 47 | 48 | 49 | 50 | //apple_ref/c/econst/UVLogLevelInfo 51 | Error, warning and info logs 52 | 53 | UVLogLevelInfo 54 | 55 | UVLog.h 56 | 57 | 58 | 59 | 60 | 61 | //apple_ref/c/econst/UVLogLevelDebug 62 | Error, warning, info and debug logs 63 | 64 | UVLogLevelDebug 65 | 66 | UVLog.h 67 | 68 | 69 | 70 | 71 | 72 | //apple_ref/c/econst/UVLogLevelVerbose 73 | Error, warning, info, debug and verbose logs 74 | 75 | UVLogLevelVerbose 76 | 77 | UVLog.h 78 | 79 | 80 | 81 | 82 | 83 | //apple_ref/c/econst/UVLogLevelAll 84 | All logs (1...11111) 85 | 86 | UVLogLevelAll 87 | 88 | UVLog.h 89 | 90 | 91 | 92 | 93 | 94 | 95 | -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/Tokens24.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | //apple_ref/c/tdef/UVLogMessageOptions 7 | Log message options, allow copying certain log elements 8 | UVLog.h 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | //apple_ref/c/econst/UVLogMessageCopyFile 18 | Use this to use a copy of the file path 19 | 20 | UVLogMessageCopyFile 21 | 22 | UVLog.h 23 | 24 | 25 | 26 | 27 | 28 | //apple_ref/c/econst/UVLogMessageCopyFunction 29 | Use this to use a copy of the function name 30 | 31 | UVLogMessageCopyFunction 32 | 33 | UVLog.h 34 | 35 | 36 | 37 | 38 | 39 | //apple_ref/c/econst/UVLogMessageDontCopyMessage 40 | Use this to use avoid a copy of the message 41 | 42 | UVLogMessageDontCopyMessage 43 | 44 | UVLog.h 45 | 46 | 47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/Tokens25.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | //apple_ref/c/tdef/UrlType 7 | url类型值 8 | UCloudMediaPlayer.h 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | //apple_ref/c/econst/UrlTypeAuto 18 | 自动,程序会根据相关规则为你选择播放类型,如果是http-flv直播,请必须设置为UrlTypeLive 19 | UrlTypeAuto 20 | 21 | UCloudMediaPlayer.h 22 | 23 | 24 | 25 | 26 | 27 | //apple_ref/c/econst/UrlTypeLocal 28 | 本地视频 29 | UrlTypeLocal 30 | 31 | UCloudMediaPlayer.h 32 | 33 | 34 | 35 | 36 | 37 | //apple_ref/c/econst/UrlTypeHttp 38 | 网络视频(非直播) 39 | UrlTypeHttp 40 | 41 | UCloudMediaPlayer.h 42 | 43 | 44 | 45 | 46 | 47 | //apple_ref/c/econst/UrlTypeLive 48 | 直播 49 | UrlTypeLive 50 | 51 | UCloudMediaPlayer.h 52 | 53 | 54 | 55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/Tokens26.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/Tokens6.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | //apple_ref/occ/cl/UVLogFileFormatterDefault 7 | Most users will want file log messages to be prepended with the date and time. 8 | Rather than forcing the majority of users to write their own formatter, 9 | we will supply a logical default formatter. 10 | Users can easily replace this formatter with their own by invoking the setLogFormatter: method. 11 | It can also be removed by calling setLogFormatter:, and passing a nil parameter. 12 | UVFileLogger.h 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | //apple_ref/occ/instm/UVLogFileFormatterDefault/init 21 | Default initializer 22 | UVFileLogger.h 23 | 24 | - (instancetype)init 25 | 26 | 27 | //api/name/init 28 | 29 | 30 | 31 | 32 | //apple_ref/occ/instm/UVLogFileFormatterDefault/initWithDateFormatter: 33 | Designated initializer, requires a date formatter 34 | UVFileLogger.h 35 | 36 | - (instancetype)initWithDateFormatter:(NSDateFormatter *)dateFormatter 37 | 38 | 39 | //api/name/initWithDateFormatter: 40 | 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/Tokens7.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | //apple_ref/occ/cl/UVLogFileInfo 7 | UVLogFileInfo is a simple class that provides access to various file attributes. 8 | It provides good performance as it only fetches the information if requested, 9 | and it caches the information to prevent duplicate fetches. 10 | UVFileLogger.h 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/Tokens8.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | //apple_ref/occ/cl/UVLogFileManagerDefault 7 | Default log file manager. 8 | UVFileLogger.h 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | //apple_ref/occ/instm/UVLogFileManagerDefault/init 17 | Default initializer 18 | UVFileLogger.h 19 | 20 | - (instancetype)init 21 | 22 | 23 | //api/name/init 24 | 25 | 26 | 27 | 28 | //apple_ref/occ/instm/UVLogFileManagerDefault/initWithLogsDirectory: 29 | Designated initialized, requires the logs directory 30 | UVFileLogger.h 31 | 32 | - (instancetype)initWithLogsDirectory:(NSString *)logsDirectory 33 | 34 | 35 | //api/name/initWithLogsDirectory: 36 | 37 | 38 | 39 | 40 | //apple_ref/occ/instm/UVLogFileManagerDefault/setNewLogFileName: 41 | Generates log file name with default format "<bundle identifier> <date> <time>.log" 42 | Example: MobileSafari 2013-12-03 17-14.log 43 | UVFileLogger.h 44 | 45 | @property (readonly, copy) NSString *newLogFileName 46 | 47 | 48 | //api/name/newLogFileName 49 | 50 | 51 | 52 | 53 | //apple_ref/occ/instm/UVLogFileManagerDefault/newLogFileName 54 | Generates log file name with default format "<bundle identifier> <date> <time>.log" 55 | Example: MobileSafari 2013-12-03 17-14.log 56 | UVFileLogger.h 57 | 58 | @property (readonly, copy) NSString *newLogFileName 59 | 60 | 61 | //api/name/newLogFileName 62 | 63 | 64 | 65 | 66 | //apple_ref/occ/instp/UVLogFileManagerDefault/newLogFileName 67 | Generates log file name with default format "<bundle identifier> <date> <time>.log" 68 | Example: MobileSafari 2013-12-03 17-14.log 69 | UVFileLogger.h 70 | 71 | @property (readonly, copy) NSString *newLogFileName 72 | 73 | 74 | //api/name/newLogFileName 75 | 76 | 77 | 78 | 79 | //apple_ref/occ/instm/UVLogFileManagerDefault/isLogFile:NS_SWIFT_NAME: 80 | Default log file name is "<bundle identifier> <date> <time>.log". 81 | Example: MobileSafari 2013-12-03 17-14.log 82 | UVFileLogger.h 83 | 84 | - (BOOL)isLogFile:(NSString *)fileName NS_SWIFT_NAME 85 | 86 | 87 | //api/name/isLogFile:NS_SWIFT_NAME: 88 | 89 | 90 | 91 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/Tokens9.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | //apple_ref/occ/cl/UVLogMessage 7 | The UVLogMessage class encapsulates information about the log message. 8 | If you write custom loggers or formatters, you will be dealing with objects of this class. 9 | UVLog.h 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | //apple_ref/occ/instm/UVLogMessage/init 18 | Default init for empty messages. 19 | UVLog.h 20 | 21 | - (instancetype)init 22 | 23 | 24 | //api/name/init 25 | 26 | 27 | 28 | 29 | //apple_ref/occ/instm/UVLogMessage/initWithMessage:level:flag:context:file:function:line:tag:options:timestamp: 30 | Standard init method for a log message object. 31 | Used by the logging primitives. (And the macros use the logging primitives.) 32 | UVLog.h 33 | 34 | - (instancetype)initWithMessage:(NSString *)message level:(UVLogLevel)level flag:(UVLogFlag)flag context:(NSInteger)context file:(NSString *)file function:(NSString *__null_unspecified)function line:(NSUInteger)line tag:(id __nullable)tag options:(UVLogMessageOptions)options timestamp:(NSDate *__nullable)timestamp 35 | 36 | 37 | message 38 | the message 39 | 40 | level 41 | the log level 42 | 43 | flag 44 | the log flag 45 | 46 | context 47 | the context (if any is defined) 48 | 49 | file 50 | the current file 51 | 52 | function 53 | the current function 54 | 55 | line 56 | the current code line 57 | 58 | tag 59 | potential tag 60 | 61 | options 62 | a bitmask which supports UVLogMessageCopyFile and UVLogMessageCopyFunction. 63 | 64 | timestamp 65 | the log timestamp 66 | 67 | 68 | a new instance of a log message model object 69 | //api/name/initWithMessage:level:flag:context:file:function:line:tag:options:timestamp: 70 | 71 | 72 | 73 | 74 | //apple_ref/occ/instm/UVLogMessage/setMessage: 75 | The log message 76 | UVLog.h 77 | 78 | @property (readonly, nonatomic) NSString *message 79 | 80 | 81 | //api/name/message 82 | 83 | 84 | 85 | 86 | //apple_ref/occ/instm/UVLogMessage/message 87 | The log message 88 | UVLog.h 89 | 90 | @property (readonly, nonatomic) NSString *message 91 | 92 | 93 | //api/name/message 94 | 95 | 96 | 97 | 98 | //apple_ref/occ/instp/UVLogMessage/message 99 | The log message 100 | UVLog.h 101 | 102 | @property (readonly, nonatomic) NSString *message 103 | 104 | 105 | //api/name/message 106 | 107 | 108 | 109 | 110 | 111 | 112 | -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/docSet.dsidx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/docs/appledoc/docset/Contents/Resources/docSet.dsidx -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/docSet.dsidx-shm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/docs/appledoc/docset/Contents/Resources/docSet.dsidx-shm -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/docSet.dsidx-wal: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/docs/appledoc/docset/Contents/Resources/docSet.dsidx-wal -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/docSet.mom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/docs/appledoc/docset/Contents/Resources/docSet.mom -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/docSet.skidx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/docs/appledoc/docset/Contents/Resources/docSet.skidx -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/docSet.toc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/docs/appledoc/docset/Contents/Resources/docSet.toc -------------------------------------------------------------------------------- /docs/appledoc/docset/Contents/Resources/docSet.tokencache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/docs/appledoc/docset/Contents/Resources/docSet.tokencache -------------------------------------------------------------------------------- /docs/appledoc/html/Blocks/UCloudMediaCompletionBlock.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | UCloudMediaCompletionBlock Block Reference 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 |
15 | 16 |

17 | IJKMediaPlayer-static 18 |

19 | 20 |

21 | UCloud 22 |

23 | 24 |
25 |
26 | 27 | 57 | 58 |
59 |
60 |
61 |
62 |

UCloudMediaCompletionBlock Block Reference

63 | 64 | 65 |
66 | 67 | 68 | 69 | 70 |
Declared inUCloudMediaPlayer.h
71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 |

Block Definition

82 |

UCloudMediaCompletionBlock

83 | 84 | 85 | typedef void (^UCloudMediaCompletionBlock) (NSInteger defaultNum, NSArray *data) 86 | 87 | 88 | 89 | 90 | 91 |
92 | 93 |
94 | 102 |
103 |
104 |
105 |
106 | 107 | 108 | 109 | -------------------------------------------------------------------------------- /docs/appledoc/html/Classes/UVLogFileInfo.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | UVLogFileInfo Class Reference 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 |
15 | 16 |

17 | IJKMediaPlayer-static 18 |

19 | 20 |

21 | UCloud 22 |

23 | 24 |
25 |
26 | 27 | 67 | 68 |
69 |
70 |
71 |
72 |

UVLogFileInfo Class Reference

73 | 74 | 75 |
76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 |
Inherits fromNSObject
Declared inUVFileLogger.h
84 | 85 | 86 | 87 | 88 |
89 | 90 |

Overview

91 |

UVLogFileInfo is a simple class that provides access to various file attributes. 92 | It provides good performance as it only fetches the information if requested, 93 | and it caches the information to prevent duplicate fetches.

94 | 95 |

It was designed to provide quick snapshots of the current state of log files, 96 | and to help sort log files in an array.

97 | 98 |

This class does not monitor the files, or update it’s cached attribute values if the file changes on disk. 99 | This is not what the class was designed for.

100 | 101 |

If you absolutely must get updated values, 102 | you can invoke the reset method which will clear the cache.

103 |
104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 |
115 | 116 |
117 | 125 |
126 |
127 |
128 |
129 | 130 | 131 | 132 | -------------------------------------------------------------------------------- /docs/appledoc/html/Constants/DecodeMethod.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | DecodeMethod Constants Reference 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 |
15 | 16 |

17 | IJKMediaPlayer-static 18 |

19 | 20 |

21 | UCloud 22 |

23 | 24 |
25 |
26 | 27 | 57 | 58 |
59 |
60 |
61 |
62 |

DecodeMethod Constants Reference

63 | 64 | 65 |
66 | 67 | 68 | 69 | 70 |
Declared inUCloudMediaPlayer.h
71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 |

DecodeMethod

79 | 80 | 81 |
82 |

解码器

83 |
84 | 85 | 86 |
87 | 88 | 89 |

Definition

90 | typedef NS_ENUM(NSInteger, DecodeMethod ) {
91 | 92 |    DecodeMethodSoft,
93 | 94 |    DecodeMethodHard,
95 | 96 | };
97 | 98 |
99 | 100 |
101 |

Constants

102 |
103 | 104 |
DecodeMethodSoft
105 |
106 | 107 | 108 |

软解码

109 | 110 | 111 | 112 | 113 | 114 | 115 |

116 | Declared In UCloudMediaPlayer.h. 117 |

118 | 119 |
120 | 121 |
DecodeMethodHard
122 |
123 | 124 | 125 |

硬解码

126 | 127 | 128 | 129 | 130 | 131 | 132 |

133 | Declared In UCloudMediaPlayer.h. 134 |

135 | 136 |
137 | 138 |
139 |
140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 |
149 |

Declared In

150 |

UCloudMediaPlayer.h

151 |
152 | 153 | 154 | 155 | 156 | 157 |
158 | 159 |
160 | 168 |
169 |
170 |
171 |
172 | 173 | 174 | 175 | -------------------------------------------------------------------------------- /docs/appledoc/html/Protocols/UCloudMediaSegmentResolver.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | UCloudMediaSegmentResolver Protocol Reference 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 |
15 | 16 |

17 | IJKMediaPlayer-static 18 |

19 | 20 |

21 | UCloud 22 |

23 | 24 |
25 |
26 | 27 | 67 | 68 |
69 |
70 |
71 |
72 |

UCloudMediaSegmentResolver Protocol Reference

73 | 74 | 75 |
76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 |
Conforms toNSObject
Declared inUCloudPlayback.h
84 | 85 | 86 | 87 | 88 |
89 | 90 |

Overview

91 |

缓冲buffer变更的Key,直播下cachedDuration>0才生效

92 |
93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 |
104 | 105 |
106 | 114 |
115 |
116 |
117 |
118 | 119 | 120 | 121 | -------------------------------------------------------------------------------- /docs/appledoc/html/Protocols/UVRegistereUVynamicLogging.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | UVRegistereUVynamicLogging Protocol Reference 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 |
15 | 16 |

17 | IJKMediaPlayer-static 18 |

19 | 20 |

21 | UCloud 22 |

23 | 24 |
25 |
26 | 27 | 75 | 76 |
77 |
78 |
79 |
80 |

UVRegistereUVynamicLogging Protocol Reference

81 | 82 | 83 |
84 | 85 | 86 | 87 | 88 |
Declared inUVLog.h
89 | 90 | 91 | 92 | 93 |
94 | 95 |

Overview

96 |

This protocol describes a dynamic logging component

97 |
98 | 99 | 100 | 101 | 102 | 103 |
104 | 105 | 106 | 107 | 108 | 109 | 110 |
111 |
112 | 113 |

  UVLogLevel 114 | required method

115 | 116 |
117 |
118 | 119 |
120 | 121 | 122 |
123 |

Implement these methods to allow a file’s log level to be managed from a central location.

124 |
125 | 126 | 127 | 128 |
@property (class, nonatomic, readwrite, setter=UVSetLogLevel:) UVLogLevel
129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 |
139 |

Discussion

140 |

This is useful if you’d like to be able to change log levels for various parts 141 | of your code from within the running application.

142 | 143 |

Imagine pulling up the settings for your application, 144 | and being able to configure the logging level on a per file basis.

145 | 146 |

The implementation can be very straight-forward:

147 | 148 |
+ (int)UVLogLevel
149 | {
150 | return UVLogLevel;
151 | }
152 | 
153 | + (void)UVSetLogLevel:(UVLogLevel)level
154 | {
155 | UVLogLevel = level;
156 | }
157 | 
158 |
159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 |
167 |

Declared In

168 |

UVLog.h

169 |
170 | 171 | 172 |
173 |
174 |
175 |
176 | 177 |
178 | 179 | 180 | 181 | 182 | 183 | 184 |
185 | 186 |
187 | 195 |
196 |
197 |
198 |
199 | 200 | 201 | 202 | -------------------------------------------------------------------------------- /docs/appledoc/html/css/scss/_index.scss: -------------------------------------------------------------------------------- 1 | .index-container { 2 | display: flex; 3 | flex-direction: row; 4 | flex-wrap: wrap; 5 | 6 | @media (max-width: $mobile-max-width) { 7 | flex-direction: column; 8 | } 9 | 10 | .index-column { 11 | flex: 1 1 33%; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /docs/appledoc/html/css/scss/_object.scss: -------------------------------------------------------------------------------- 1 | .section-specification { 2 | table { 3 | width: auto; 4 | 5 | th { 6 | text-align: left; 7 | } 8 | } 9 | } 10 | 11 | .method-title { 12 | margin-left: -15px; 13 | margin-bottom: 8px; 14 | transition: margin-left .3s ease-out; 15 | 16 | .section-method.hide & { 17 | margin-left: 0; 18 | } 19 | 20 | code { 21 | font-weight: 400; 22 | font-size: .85em; 23 | } 24 | } 25 | 26 | .method-info { 27 | background: $object-background; 28 | border-bottom: 1px solid $object-border; 29 | margin: 0 -25px; 30 | padding: 20px 25px 0 25px; 31 | transition: height .3s ease-out; 32 | 33 | position: relative; 34 | 35 | .pointy-thing { 36 | background: $content-background; 37 | height: 10px; 38 | border-bottom: 1px solid $object-border; 39 | margin: -20px -25px 16px -25px; 40 | 41 | &:before { 42 | display: inline-block; 43 | content: ""; 44 | 45 | background: $object-background; 46 | border: 1px solid $object-border; 47 | border-bottom: 0; 48 | border-right: 0; 49 | 50 | position: absolute; 51 | left: 21px; 52 | top: 3px; 53 | width: 12px; 54 | height: 12px; 55 | transform: rotate(45deg); 56 | } 57 | } 58 | 59 | .method-subsection { 60 | margin-bottom: 15px; 61 | 62 | .argument-name { 63 | width: 1px; 64 | text-align: right; 65 | 66 | code { 67 | color: #808080; 68 | font-style: italic; 69 | font-weight: 400; 70 | } 71 | } 72 | } 73 | } 74 | 75 | .section-method { 76 | &.hide .method-info { 77 | height: 0 !important; 78 | overflow: hidden; 79 | display: none; 80 | } 81 | 82 | &.hide.animating .method-info { 83 | display: block; 84 | } 85 | 86 | &.animating .method-info { 87 | overflow: hidden; 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /docs/appledoc/html/css/scss/_print.scss: -------------------------------------------------------------------------------- 1 | @media print { 2 | body { 3 | background: #fff; 4 | padding: 8px; 5 | } 6 | 7 | header { 8 | position: static; 9 | background: #fff; 10 | color: #000; 11 | } 12 | 13 | aside { 14 | display: none; 15 | } 16 | 17 | .container { 18 | max-width: none; 19 | padding: 0; 20 | } 21 | 22 | article { 23 | margin-top: 0; 24 | 25 | #content { 26 | border: 0; 27 | background: #fff; 28 | padding: 15px 0 0 0; 29 | 30 | .title { 31 | margin-top: 0; 32 | padding-top: 0; 33 | } 34 | } 35 | } 36 | 37 | .method-info { 38 | &, & .pointy-thing { 39 | background: #fff; 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /docs/appledoc/html/css/scss/_variables.scss: -------------------------------------------------------------------------------- 1 | $body-font: -apple-system-font, "Helvetica Neue", Helvetica, sans-serif; 2 | $code-font: "Source Code Pro", Monaco, Menlo, Consolas, monospace; 3 | 4 | $body-background: #f2f2f2; 5 | $content-background: #fff; 6 | $content-border: #e9e9e9; 7 | $tint-color: #08c; 8 | $object-background: #f9f9f9; 9 | $object-border: #e9e9e9; 10 | 11 | $mobile-max-width: 650px; 12 | -------------------------------------------------------------------------------- /docs/appledoc/html/css/scss/_xcode.scss: -------------------------------------------------------------------------------- 1 | .xcode { 2 | header, aside { 3 | display: none; 4 | } 5 | 6 | .container { 7 | padding: 0; 8 | } 9 | 10 | article { 11 | margin-top: 0; 12 | 13 | #content { 14 | border: 0; 15 | margin: 0; 16 | } 17 | } 18 | 19 | .method-info { 20 | &, .section-method.hide & { 21 | max-height: auto; 22 | overflow: visible; 23 | 24 | &.hiding { 25 | display: block; 26 | } 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /docs/appledoc/html/css/scss/style.scss: -------------------------------------------------------------------------------- 1 | @import "variables", "normalize", "layout", "index", "object", "print", "xcode"; 2 | -------------------------------------------------------------------------------- /docs/appledoc/html/hierarchy.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | IJKMediaPlayer-static Hierarchy 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 |
15 | 16 |

17 | IJKMediaPlayer-static 18 |

19 | 20 |

21 | UCloud 22 |

23 | 24 |
25 |
26 | 27 | 36 | 37 |
38 |
39 |
40 |
41 |

IJKMediaPlayer-static Hierarchy

42 | 43 | 44 |
45 |

Class Hierarchy

46 | 47 | 86 | 87 |
88 | 89 | 90 | 91 |
92 | 93 |

Protocol References

94 | 109 | 110 | 111 |

Constant References

112 | 133 | 134 | 135 |
136 | 137 | 138 |
139 | 147 |
148 |
149 |
150 |
151 |
152 | 153 | 154 | 155 | -------------------------------------------------------------------------------- /docs/appledoc/html/img/button_bar_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/docs/appledoc/html/img/button_bar_background.png -------------------------------------------------------------------------------- /docs/appledoc/html/img/disclosure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/docs/appledoc/html/img/disclosure.png -------------------------------------------------------------------------------- /docs/appledoc/html/img/disclosure_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/docs/appledoc/html/img/disclosure_open.png -------------------------------------------------------------------------------- /docs/appledoc/html/img/library_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/docs/appledoc/html/img/library_background.png -------------------------------------------------------------------------------- /docs/appledoc/html/img/title_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/docs/appledoc/html/img/title_background.png -------------------------------------------------------------------------------- /docs/appledoc/html/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | IJKMediaPlayer-static Reference 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 |
15 | 16 |

17 | IJKMediaPlayer-static 18 |

19 | 20 |

21 | UCloud 22 |

23 | 24 |
25 |
26 | 27 | 36 | 37 |
38 |
39 |
40 |
41 |

IJKMediaPlayer-static Reference

42 | 43 | 44 | 45 |
46 | 47 | 48 | 49 |
50 |

Class References

51 | 74 |
75 | 76 | 77 | 78 |
79 | 80 |

Protocol References

81 | 96 | 97 | 98 | 99 |

Constant References

100 | 121 | 122 | 123 | 124 |
125 | 126 |
127 | 128 |
129 | 137 |
138 |
139 |
140 |
141 |
142 | 143 | 144 | 145 | -------------------------------------------------------------------------------- /docs/appledoc/html/js/script.js: -------------------------------------------------------------------------------- 1 | function $() { 2 | return document.querySelector.apply(document, arguments); 3 | } 4 | 5 | if (navigator.userAgent.indexOf("Xcode") != -1) { 6 | document.documentElement.classList.add("xcode"); 7 | } 8 | 9 | var jumpTo = $("#jump-to"); 10 | 11 | if (jumpTo) { 12 | jumpTo.addEventListener("change", function(e) { 13 | location.hash = this.options[this.selectedIndex].value; 14 | }); 15 | } 16 | 17 | function hashChanged() { 18 | if (/^#\/\/api\//.test(location.hash)) { 19 | var element = document.querySelector("a[name='" + location.hash.substring(1) + "']"); 20 | 21 | if (!element) { 22 | return; 23 | } 24 | 25 | element = element.parentNode; 26 | 27 | element.classList.remove("hide"); 28 | fixScrollPosition(element); 29 | } 30 | } 31 | 32 | function fixScrollPosition(element) { 33 | var scrollTop = element.offsetTop - 150; 34 | document.documentElement.scrollTop = scrollTop; 35 | document.body.scrollTop = scrollTop; 36 | } 37 | 38 | [].forEach.call(document.querySelectorAll(".section-method"), function(element) { 39 | element.classList.add("hide"); 40 | 41 | element.querySelector(".method-title a").addEventListener("click", function(e) { 42 | var info = element.querySelector(".method-info"), 43 | infoContainer = element.querySelector(".method-info-container"); 44 | 45 | element.classList.add("animating"); 46 | info.style.height = (infoContainer.clientHeight + 40) + "px"; 47 | fixScrollPosition(element); 48 | element.classList.toggle("hide"); 49 | if (element.classList.contains("hide")) { 50 | e.preventDefault(); 51 | } 52 | setTimeout(function() { 53 | element.classList.remove("animating"); 54 | }, 300); 55 | }); 56 | }); 57 | 58 | window.addEventListener("hashchange", hashChanged); 59 | hashChanged(); 60 | -------------------------------------------------------------------------------- /lib/Player/UCloudMediaModule.h: -------------------------------------------------------------------------------- 1 | // 2 | // UCloudMediaModule.h 3 | // 4 | 5 | #import 6 | 7 | @interface UCloudMediaModule : NSObject 8 | 9 | + (UCloudMediaModule *)sharedModule; 10 | //用户可以使用该值来控制播放器全局锁屏开/关 11 | @property(atomic, getter=isAppIdleTimerDisabled) BOOL appIdleTimerDisabled; 12 | //播放器内部使用,禁止外部操作 13 | @property(atomic, getter=isMediaModuleIdleTimerDisabled) BOOL mediaModuleIdleTimerDisabled; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /lib/Player/UCloudMediaPlayback.h: -------------------------------------------------------------------------------- 1 | /* 2 | * UCloudPlayback.h 3 | * 4 | */ 5 | 6 | #import 7 | #import "UCloudPlayback.h" 8 | 9 | @protocol UCloudMediaPlayback; 10 | 11 | 12 | #pragma mark UCloudMediaPlayback 13 | 14 | @protocol UCloudMediaPlayback 15 | 16 | #pragma mark Notifications 17 | 18 | /** 19 | * 点击返回按钮 20 | */ 21 | UCLOUD_EXTERN NSString *const UCloudMoviePlayerClickBack; 22 | 23 | /** 24 | * 跳转进度完成 25 | */ 26 | UCLOUD_EXTERN NSString *const UCloudMoviePlayerSeekCompleted; 27 | 28 | /** 29 | * 播放器所在的视图控制器旋转完成的时候发布这个通知 30 | */ 31 | UCLOUD_EXTERN NSString *const UCloudViewControllerDidRotate; 32 | 33 | /** 34 | * 播放器所在的视图控制器将要旋转的时候发布这个通知 35 | */ 36 | UCLOUD_EXTERN NSString *const UCloudViewControllerWillRotate; 37 | 38 | @end 39 | -------------------------------------------------------------------------------- /lib/Player/libUCloudMediaPlayer.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/lib/Player/libUCloudMediaPlayer.a -------------------------------------------------------------------------------- /screenshot/player1.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/screenshot/player1.jpeg -------------------------------------------------------------------------------- /screenshot/player2.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/screenshot/player2.jpeg -------------------------------------------------------------------------------- /screenshot/vod_download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/screenshot/vod_download.png -------------------------------------------------------------------------------- /screenshot/work_ticket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umdk/UCDMediaPlayer_iOS/d8f8c8e8440e3eddde50072b3b131e15713a13b3/screenshot/work_ticket.png --------------------------------------------------------------------------------