Files
real-e-party-iOS/YuMi/Modules/YMMessage/View/MessageAudioCenter.m
edwinQQQ a35a711be6 chore: Initial clean commit
- Removed YuMi/Library/ (138 MB, not tracked)
- Removed YuMi/Resources/ (23 MB, not tracked)
- Removed old version assets (566 files, not tracked)
- Excluded Pods/, xcuserdata/ and other build artifacts
- Clean repository optimized for company server deployment
2025-10-09 16:19:14 +08:00

75 lines
1.8 KiB
Objective-C

//
// MessageAudioCenter.m
// YUMI
//
// Created by YUMI on 2022/4/22.
//
#import "MessageAudioCenter.h"
#import <NIMSDK/NIMSDK.h>
@interface MessageAudioCenter ()<NIMMediaManagerDelegate>
@property (nonatomic,assign) NSInteger retryCount;
@property (nonatomic,strong,nullable) NIMMessage *currentPlayingMessage;
@end
@implementation MessageAudioCenter
+ (instancetype)shareInstance {
static MessageAudioCenter *instance;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[MessageAudioCenter alloc] init];
});
return instance;
}
- (instancetype)init {
self = [super init];
if (self) {
[[NIMSDK sharedSDK].mediaManager addDelegate:self];
[self resetRetryCount];
}
return self;
}
- (void)resetRetryCount {
_retryCount = 3;
}
- (void)play:(NIMMessage *)message {
NIMAudioObject *audioObject = (NIMAudioObject *)message.messageObject;
if ([audioObject isKindOfClass:[NIMAudioObject class]]) {
self.currentPlayingMessage = message;
message.isPlayed = YES;
[[NIMSDK sharedSDK].mediaManager play:audioObject.path];
}
}
#pragma mark - NIMMediaManagerDelegate
- (void)playAudio:(NSString *)filePath didBeganWithError:(NSError *)error
{
if (error) {
if (_retryCount > 0){
// iPhone4 和 iPhone 4S 上连播会由于设备释放过慢导致 AudioQueue 启动不了的问题,这里做个延迟重试,最多重试 3 次 ( code -66681 )
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[[NIMSDK sharedSDK].mediaManager play:filePath];
});
}else{
self.currentPlayingMessage = nil;
[self resetRetryCount];
}
} else {
[self resetRetryCount];
}
}
- (void)playAudio:(NSString *)filePath didCompletedWithError:(nullable NSError *)error {
self.currentPlayingMessage = nil;
}
@end