DFPlayerTool.m 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  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. //hxd del 20241104项目里需要 检测网络 不能被第三方停止
  65. //[[AFNetworkReachabilityManager sharedManager] stopMonitoring];
  66. }
  67. + (DFPlayerNetworkStatus)networkStatus{
  68. return _networkStatus;
  69. }
  70. @end
  71. @implementation NSString (DFPlayerNSStringExtensions)
  72. - (NSString *)df_removeEmpty{
  73. NSString *str = [NSString stringWithFormat:@"%@",self];
  74. return [str stringByReplacingOccurrencesOfString:@" " withString:@""];
  75. }
  76. - (BOOL)df_isEmpty{
  77. if(!self || [self isEqualToString:@"(null)"] || [self isKindOfClass:[NSNull class]] || [self isEqual:[NSNull null]]){
  78. return YES;
  79. }
  80. return [self df_removeEmpty].length == 0;
  81. }
  82. - (BOOL)df_isContainLetter{
  83. NSRegularExpression *numberRegular = [NSRegularExpression regularExpressionWithPattern:@"[A-Za-z]" options:NSRegularExpressionCaseInsensitive error:nil];
  84. NSInteger count = [numberRegular numberOfMatchesInString:self options:NSMatchingReportProgress range:NSMakeRange(0, self.length)];
  85. return count > 0;
  86. }
  87. @end
  88. static NSString * key_ActionBlock = @"key_ActionBlock";
  89. @implementation UIButton(DFPlayerUIButtonExtensions)
  90. - (void)setHandleButtonActionBlock:(void (^)(UIButton * _Nullable))handleButtonActionBlock{
  91. objc_setAssociatedObject(self, &key_ActionBlock, handleButtonActionBlock, OBJC_ASSOCIATION_COPY_NONATOMIC);
  92. if (handleButtonActionBlock) {
  93. [self addTarget:self action:@selector(actionHandler) forControlEvents:UIControlEventTouchUpInside];
  94. }
  95. }
  96. - (void)actionHandler{
  97. if (self.handleButtonActionBlock) {
  98. self.handleButtonActionBlock(self);
  99. }
  100. }
  101. - (void (^)(UIButton * _Nullable))handleButtonActionBlock{
  102. return objc_getAssociatedObject(self, &key_ActionBlock);
  103. }
  104. @end