NIMKitAudioCenter.m 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. //
  2. // NIMKitAudioCenter.m
  3. // NIMKit
  4. //
  5. // Created by chris on 2017/1/13.
  6. // Copyright © 2017年 NetEase. All rights reserved.
  7. //
  8. #import "NIMKitAudioCenter.h"
  9. #import <NIMSDK/NIMSDK.h>
  10. @interface NIMKitAudioCenter()<NIMMediaManagerDelegate>
  11. @property (nonatomic,assign) NSInteger retryCount;
  12. @end
  13. @implementation NIMKitAudioCenter
  14. + (instancetype)instance
  15. {
  16. static NIMKitAudioCenter *instance;
  17. static dispatch_once_t onceToken;
  18. dispatch_once(&onceToken, ^{
  19. instance = [[NIMKitAudioCenter alloc] init];
  20. });
  21. return instance;
  22. }
  23. - (instancetype)init
  24. {
  25. self = [super init];
  26. if (self) {
  27. [[NIMSDK sharedSDK].mediaManager addDelegate:self];
  28. [self resetRetryCount];
  29. }
  30. return self;
  31. }
  32. - (void)resetRetryCount
  33. {
  34. _retryCount = 3;
  35. }
  36. - (void)play:(NIMMessage *)message
  37. {
  38. NIMAudioObject *audioObject = (NIMAudioObject *)message.messageObject;
  39. if ([audioObject isKindOfClass:[NIMAudioObject class]]) {
  40. self.currentPlayingMessage = message;
  41. message.isPlayed = YES;
  42. [[NIMSDK sharedSDK].mediaManager play:audioObject.path];
  43. }
  44. }
  45. #pragma mark - NIMMediaManagerDelegate
  46. - (void)playAudio:(NSString *)filePath didBeganWithError:(NSError *)error
  47. {
  48. if (error)
  49. {
  50. if (_retryCount > 0)
  51. {
  52. _retryCount--;
  53. // iPhone4 和 iPhone 4S 上连播会由于设备释放过慢导致 AudioQueue 启动不了的问题,这里做个延迟重试,最多重试 3 次 ( code -66681 )
  54. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  55. [[NIMSDK sharedSDK].mediaManager play:filePath];
  56. });
  57. }
  58. else
  59. {
  60. self.currentPlayingMessage = nil;
  61. [self resetRetryCount];
  62. }
  63. }
  64. else
  65. {
  66. [self resetRetryCount];
  67. }
  68. }
  69. - (void)playAudio:(NSString *)filePath didCompletedWithError:(nullable NSError *)error
  70. {
  71. self.currentPlayingMessage = nil;
  72. }
  73. @end