DFPlayerTool.m 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. //
  2. // DFPlayerTool.m
  3. // DFPlayer
  4. //
  5. // Created by ihoudf on 2017/7/30.
  6. // Copyright © 2017年 ihoudf. All rights reserved.
  7. //
  8. #import "DFPlayerTool.h"
  9. #import <objc/runtime.h>
  10. #import "AFNetworkReachabilityManager.h"
  11. static DFPlayerNetworkStatus _networkStatus;
  12. @implementation DFPlayerTool
  13. + (NSURL *)customURL:(NSURL *)URL{
  14. NSString *URLString = [URL absoluteString];
  15. if ([URLString rangeOfString:@":"].location != NSNotFound) {
  16. NSString *scheme = [[URLString componentsSeparatedByString:@":"] firstObject];
  17. if (scheme) {
  18. NSString *newScheme = [scheme stringByAppendingString:@"-streaming"];
  19. URLString = [URLString stringByReplacingOccurrencesOfString:scheme withString:newScheme];
  20. return [NSURL URLWithString:URLString];
  21. }else{
  22. return nil;
  23. }
  24. }else{
  25. return nil;
  26. }
  27. }
  28. + (NSURL *)originalURL:(NSURL *)URL{
  29. NSURLComponents * components = [[NSURLComponents alloc] initWithURL:URL
  30. resolvingAgainstBaseURL:NO];
  31. components.scheme = [components.scheme stringByReplacingOccurrencesOfString:@"-streaming" withString:@""];
  32. return [components URL];
  33. }
  34. + (BOOL)isLocalAudio:(NSURL *)URL{
  35. return [URL.absoluteString hasPrefix:@"http"] ? NO : YES;
  36. }
  37. + (BOOL)isNSURL:(NSURL *)URL{
  38. return [URL isKindOfClass:[NSURL class]];
  39. }
  40. + (void)startMonitoringNetworkStatus:(void (^)(DFPlayerNetworkStatus))block{
  41. AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager];
  42. [mgr setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
  43. switch (status) {
  44. case AFNetworkReachabilityStatusUnknown:
  45. _networkStatus = DFPlayerNetworkStatusUnknown;
  46. break;
  47. case AFNetworkReachabilityStatusNotReachable:
  48. _networkStatus = DFPlayerNetworkStatusNotReachable;
  49. break;
  50. case AFNetworkReachabilityStatusReachableViaWWAN:
  51. _networkStatus = DFPlayerNetworkStatusReachableViaWWAN;
  52. break;
  53. case AFNetworkReachabilityStatusReachableViaWiFi:
  54. _networkStatus = DFPlayerNetworkStatusReachableViaWiFi;
  55. break;
  56. }
  57. if (block) {
  58. block(_networkStatus);
  59. }
  60. }];
  61. [mgr startMonitoring];
  62. }
  63. + (void)stopMonitoringNetwork{
  64. [[AFNetworkReachabilityManager sharedManager] stopMonitoring];
  65. }
  66. + (DFPlayerNetworkStatus)networkStatus{
  67. return _networkStatus;
  68. }
  69. @end
  70. @implementation NSString (DFPlayerNSStringExtensions)
  71. - (NSString *)df_removeEmpty{
  72. NSString *str = [NSString stringWithFormat:@"%@",self];
  73. return [str stringByReplacingOccurrencesOfString:@" " withString:@""];
  74. }
  75. - (BOOL)df_isEmpty{
  76. if(!self || [self isEqualToString:@"(null)"] || [self isKindOfClass:[NSNull class]] || [self isEqual:[NSNull null]]){
  77. return YES;
  78. }
  79. return [self df_removeEmpty].length == 0;
  80. }
  81. - (BOOL)df_isContainLetter{
  82. NSRegularExpression *numberRegular = [NSRegularExpression regularExpressionWithPattern:@"[A-Za-z]" options:NSRegularExpressionCaseInsensitive error:nil];
  83. NSInteger count = [numberRegular numberOfMatchesInString:self options:NSMatchingReportProgress range:NSMakeRange(0, self.length)];
  84. return count > 0;
  85. }
  86. @end
  87. static NSString * key_ActionBlock = @"key_ActionBlock";
  88. @implementation UIButton(DFPlayerUIButtonExtensions)
  89. - (void)setHandleButtonActionBlock:(void (^)(UIButton * _Nullable))handleButtonActionBlock{
  90. objc_setAssociatedObject(self, &key_ActionBlock, handleButtonActionBlock, OBJC_ASSOCIATION_COPY_NONATOMIC);
  91. if (handleButtonActionBlock) {
  92. [self addTarget:self action:@selector(actionHandler) forControlEvents:UIControlEventTouchUpInside];
  93. }
  94. }
  95. - (void)actionHandler{
  96. if (self.handleButtonActionBlock) {
  97. self.handleButtonActionBlock(self);
  98. }
  99. }
  100. - (void (^)(UIButton * _Nullable))handleButtonActionBlock{
  101. return objc_getAssociatedObject(self, &key_ActionBlock);
  102. }
  103. @end