Files
peko-ios/YuMi/Modules/YMMessage/View/MessageAudioCenter.m

75 lines
1.8 KiB
Mathematica
Raw Normal View History

2023-07-06 16:54:13 +08:00
//
2023-07-14 18:50:55 +08:00
// MessageAudioCenter.m
2023-07-06 16:54:13 +08:00
// YUMI
//
// Created by YUMI on 2022/4/22.
//
2023-07-14 18:50:55 +08:00
#import "MessageAudioCenter.h"
2023-07-06 16:54:13 +08:00
#import <NIMSDK/NIMSDK.h>
2023-07-14 18:50:55 +08:00
@interface MessageAudioCenter ()<NIMMediaManagerDelegate>
2023-07-06 16:54:13 +08:00
@property (nonatomic,assign) NSInteger retryCount;
2023-07-14 18:50:55 +08:00
@property (nonatomic,strong,nullable) NIMMessage *currentPlayingMessage;
2023-07-06 16:54:13 +08:00
@end
2023-07-14 18:50:55 +08:00
@implementation MessageAudioCenter
2023-07-06 16:54:13 +08:00
2023-07-14 18:50:55 +08:00
+ (instancetype)shareInstance {
static MessageAudioCenter *instance;
2023-07-06 16:54:13 +08:00
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
2023-07-14 18:50:55 +08:00
instance = [[MessageAudioCenter alloc] init];
2023-07-06 16:54:13 +08:00
});
return instance;
}
- (instancetype)init {
self = [super init];
if (self) {
[[NIMSDK sharedSDK].mediaManager addDelegate:self];
2023-07-14 18:50:55 +08:00
[self resetRetryCount];
2023-07-06 16:54:13 +08:00
}
return self;
}
2023-07-14 18:50:55 +08:00
- (void)resetRetryCount {
2023-07-06 16:54:13 +08:00
_retryCount = 3;
}
- (void)play:(NIMMessage *)message {
NIMAudioObject *audioObject = (NIMAudioObject *)message.messageObject;
if ([audioObject isKindOfClass:[NIMAudioObject class]]) {
2023-07-14 18:50:55 +08:00
self.currentPlayingMessage = message;
2023-07-06 16:54:13 +08:00
message.isPlayed = YES;
[[NIMSDK sharedSDK].mediaManager play:audioObject.path];
}
}
#pragma mark - NIMMediaManagerDelegate
- (void)playAudio:(NSString *)filePath didBeganWithError:(NSError *)error
{
if (error) {
if (_retryCount > 0){
2023-07-14 18:50:55 +08:00
// iPhone4 iPhone 4S AudioQueue 3 ( code -66681 )
2023-07-06 16:54:13 +08:00
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[[NIMSDK sharedSDK].mediaManager play:filePath];
});
}else{
2023-07-14 18:50:55 +08:00
self.currentPlayingMessage = nil;
[self resetRetryCount];
2023-07-06 16:54:13 +08:00
}
} else {
2023-07-14 18:50:55 +08:00
[self resetRetryCount];
2023-07-06 16:54:13 +08:00
}
}
- (void)playAudio:(NSString *)filePath didCompletedWithError:(nullable NSError *)error {
2023-07-14 18:50:55 +08:00
self.currentPlayingMessage = nil;
2023-07-06 16:54:13 +08:00
}
@end