AFSoundItem.m 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. //
  2. // AFSoundItem.m
  3. // AFSoundManager-Demo
  4. //
  5. // Created by Alvaro Franco on 20/01/15.
  6. // Copyright (c) 2015 AlvaroFranco. All rights reserved.
  7. //
  8. #import "AFSoundItem.h"
  9. #import "AFSoundManager.h"
  10. @implementation AFSoundItem
  11. -(id)initWithLocalResource:(NSString *)name atPath:(NSString *)path {
  12. if (self == [super init]) {
  13. _type = AFSoundItemTypeLocal;
  14. NSString *itemPath;
  15. if (!path) {
  16. NSString *resourcePath = [[NSBundle mainBundle] resourcePath];
  17. itemPath = [resourcePath stringByAppendingPathComponent:name];
  18. } else {
  19. itemPath = [path stringByAppendingPathComponent:name];
  20. }
  21. _URL = [NSURL fileURLWithPath:itemPath];
  22. [self fetchMetadata];
  23. }
  24. return self;
  25. }
  26. -(id)initWithStreamingURL:(NSURL *)URL {
  27. if (self == [super init]) {
  28. _type = AFSoundItemTypeStreaming;
  29. _URL = URL;
  30. [self fetchMetadata];
  31. }
  32. return self;
  33. }
  34. -(void)fetchMetadata {
  35. AVPlayerItem *playerItem = [[AVPlayerItem alloc] initWithURL:_URL];
  36. NSArray *metadata = [playerItem.asset commonMetadata];
  37. for (AVMetadataItem *metadataItem in metadata) {
  38. [metadataItem loadValuesAsynchronouslyForKeys:@[AVMetadataKeySpaceCommon] completionHandler:^{
  39. if ([metadataItem.commonKey isEqualToString:@"title"]) {
  40. _title = (NSString *)metadataItem.value;
  41. } else if ([metadataItem.commonKey isEqualToString:@"albumName"]) {
  42. _album = (NSString *)metadataItem.value;
  43. } else if ([metadataItem.commonKey isEqualToString:@"artist"]) {
  44. _artist = (NSString *)metadataItem.value;
  45. } else if ([metadataItem.commonKey isEqualToString:@"artwork"]) {
  46. if ([metadataItem.keySpace isEqualToString:AVMetadataKeySpaceID3]) {
  47. _artwork = [UIImage imageWithData:[[metadataItem.value copyWithZone:nil] objectForKey:@"data"]];
  48. } else if ([metadataItem.keySpace isEqualToString:AVMetadataKeySpaceiTunes]) {
  49. _artwork = [UIImage imageWithData:[metadataItem.value copyWithZone:nil]];
  50. }
  51. }
  52. }];
  53. }
  54. }
  55. -(void)setInfoFromItem:(AVPlayerItem *)item {
  56. _duration = CMTimeGetSeconds(item.duration);
  57. _timePlayed = CMTimeGetSeconds(item.currentTime);
  58. }
  59. @end