123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- //
- // DFPlayerTool.m
- // DFPlayer
- //
- // Created by ihoudf on 2017/7/30.
- // Copyright © 2017年 ihoudf. All rights reserved.
- //
- #import "DFPlayerTool.h"
- #import <objc/runtime.h>
- #import "AFNetworkReachabilityManager.h"
- static DFPlayerNetworkStatus _networkStatus;
- @implementation DFPlayerTool
- + (NSURL *)customURL:(NSURL *)URL{
- NSString *URLString = [URL absoluteString];
- if ([URLString rangeOfString:@":"].location != NSNotFound) {
- NSString *scheme = [[URLString componentsSeparatedByString:@":"] firstObject];
- if (scheme) {
- NSString *newScheme = [scheme stringByAppendingString:@"-streaming"];
- URLString = [URLString stringByReplacingOccurrencesOfString:scheme withString:newScheme];
- return [NSURL URLWithString:URLString];
- }else{
- return nil;
- }
- }else{
- return nil;
- }
- }
- + (NSURL *)originalURL:(NSURL *)URL{
- NSURLComponents * components = [[NSURLComponents alloc] initWithURL:URL
- resolvingAgainstBaseURL:NO];
- components.scheme = [components.scheme stringByReplacingOccurrencesOfString:@"-streaming" withString:@""];
- return [components URL];
- }
- + (BOOL)isLocalAudio:(NSURL *)URL{
- return [URL.absoluteString hasPrefix:@"http"] ? NO : YES;
- }
- + (BOOL)isNSURL:(NSURL *)URL{
- return [URL isKindOfClass:[NSURL class]];
- }
- + (void)startMonitoringNetworkStatus:(void (^)(DFPlayerNetworkStatus))block{
- AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager];
- [mgr setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
- switch (status) {
- case AFNetworkReachabilityStatusUnknown:
- _networkStatus = DFPlayerNetworkStatusUnknown;
- break;
- case AFNetworkReachabilityStatusNotReachable:
- _networkStatus = DFPlayerNetworkStatusNotReachable;
- break;
- case AFNetworkReachabilityStatusReachableViaWWAN:
- _networkStatus = DFPlayerNetworkStatusReachableViaWWAN;
- break;
- case AFNetworkReachabilityStatusReachableViaWiFi:
- _networkStatus = DFPlayerNetworkStatusReachableViaWiFi;
- break;
- }
- if (block) {
- block(_networkStatus);
- }
- }];
- [mgr startMonitoring];
- }
- + (void)stopMonitoringNetwork{
- //hxd del 20241104项目里需要 检测网络 不能被第三方停止
- //[[AFNetworkReachabilityManager sharedManager] stopMonitoring];
- }
- + (DFPlayerNetworkStatus)networkStatus{
- return _networkStatus;
- }
- @end
- @implementation NSString (DFPlayerNSStringExtensions)
- - (NSString *)df_removeEmpty{
- NSString *str = [NSString stringWithFormat:@"%@",self];
- return [str stringByReplacingOccurrencesOfString:@" " withString:@""];
- }
- - (BOOL)df_isEmpty{
- if(!self || [self isEqualToString:@"(null)"] || [self isKindOfClass:[NSNull class]] || [self isEqual:[NSNull null]]){
- return YES;
- }
- return [self df_removeEmpty].length == 0;
- }
- - (BOOL)df_isContainLetter{
- NSRegularExpression *numberRegular = [NSRegularExpression regularExpressionWithPattern:@"[A-Za-z]" options:NSRegularExpressionCaseInsensitive error:nil];
- NSInteger count = [numberRegular numberOfMatchesInString:self options:NSMatchingReportProgress range:NSMakeRange(0, self.length)];
- return count > 0;
- }
- @end
- static NSString * key_ActionBlock = @"key_ActionBlock";
- @implementation UIButton(DFPlayerUIButtonExtensions)
- - (void)setHandleButtonActionBlock:(void (^)(UIButton * _Nullable))handleButtonActionBlock{
- objc_setAssociatedObject(self, &key_ActionBlock, handleButtonActionBlock, OBJC_ASSOCIATION_COPY_NONATOMIC);
- if (handleButtonActionBlock) {
- [self addTarget:self action:@selector(actionHandler) forControlEvents:UIControlEventTouchUpInside];
- }
- }
- - (void)actionHandler{
- if (self.handleButtonActionBlock) {
- self.handleButtonActionBlock(self);
- }
- }
- - (void (^)(UIButton * _Nullable))handleButtonActionBlock{
- return objc_getAssociatedObject(self, &key_ActionBlock);
- }
- @end
|