Как установить метаданные звуковой дорожки (обложка, альбом и т.д.) на экране блокировки iOS?

#ios #iphone #avplayer #ipod

#iOS #iPhone #avplayer #ipod

Вопрос:

Я пытаюсь разработать простое приложение для аудиоплеера для iPhone или iPad. Я работаю в фоновом режиме и управляю воспроизведением на экране блокировки, но я не могу установить данные о текущей музыкальной дорожке (обложка, альбом и т.д.) На экране блокировки, как это работает на музыкальном проигрывателе iOS по умолчанию. Как я могу это сделать? Заранее приветствуется любая помощь, спасибо.

Ответ №1:

Я решил эту проблему. Чтобы отобразить метаданные о звуковой дорожке (обложка, альбом, название и т.д.) На экране блокировки iOS, вы должны использовать класс MPNowPlayingInfoCenter. Например:

     MPMediaItemArtwork *albumArtwork = [[MPMediaItemArtwork alloc] initWithImage:[UIImage imageNamed:@"artwork.png"]];
    NSDictionary *nowPlayingInfo = @{MPMediaItemPropertyTitle: @"Title",
                                     MPMediaItemPropertyArtist: @"Artist",
                                     MPMediaItemPropertyAlbumTitle: @"Album",
                                     MPMediaItemPropertyArtwork: albumArtwork};
    [[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:nowPlayingInfo];
  

Ответ №2:

  //  set Audio file metadata  Modify and get //

AVAssetExportSession *session = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetPassthrough];
session.outputURL =  [NSURL fileURLWithPath:_audioPath];
session.outputFileType = AVFileTypeAppleM4A;

AVMutableMetadataItem *Titlenm = [[AVMutableMetadataItem alloc] init];
Titlenm.identifier = AVMetadataCommonIdentifierTitle;
Titlenm.dataType = (__bridge NSString *)kCMMetadataBaseDataType_UTF8;     // more in CoreMedia/CMMetadata.h

Titlenm.value =@" Enter Audio Title";



AVMutableMetadataItem *Artistnm = [[AVMutableMetadataItem alloc] init];
Artistnm.identifier = AVMetadataCommonIdentifierArtist;
Artistnm.dataType = (__bridge NSString *)kCMMetadataBaseDataType_UTF8;
Artistnm.value  =@" Enter Audio ArtistName";


AVMutableMetadataItem *AlbumName = [[AVMutableMetadataItem alloc] init];
AlbumName.identifier = AVMetadataCommonIdentifierAlbumName;
AlbumName.dataType = (__bridge NSString *)kCMMetadataBaseDataType_UTF8;
AlbumName.value =@" Enter Audio AlbumName";;



AVMutableMetadataItem *dateset = [[AVMutableMetadataItem alloc] init];
dateset.identifier = AVMetadataCommonIdentifierCreationDate;
dateset.dataType = (__bridge NSString *)kCMMetadataBaseDataType_UTF8;
dateset.value = self.datelbl.text;




AVMutableMetadataItem *audioArtwork = [[AVMutableMetadataItem alloc]init];

//self.audioimg.image in this line set image
audioArtwork.value = UIImagePNGRepresentation(self.audioimg.image);

audioArtwork.dataType = (__bridge NSString * _Nullable)(kCMMetadataBaseDataType_PNG);
audioArtwork.identifier = AVMetadataCommonIdentifierArtwork;
audioArtwork.extendedLanguageTag =@"und";

session.metadata = @[Titlenm, AlbumName,Artistnm,dateset,audioArtwork];

[session exportAsynchronouslyWithCompletionHandler:
 ^{

     if (session.status == AVAssetExportSessionStatusCompleted)
     {

         AVAsset *asset = [AVURLAsset URLAssetWithURL:outputURL options:nil];
         NSArray *metadata = [asset commonMetadata];






        finalurl=outputURL;


         for(AVMetadataItem* item in metadata)
         {
             NSString *key = [item commonKey];
             NSString *value = [item stringValue];
             NSLog(@"key = %@, value = %@", key,value);
         }



         [self performSelectorOnMainThread:@selector(myviewpresent) withObject:self waitUntilDone:YES];

     }

 }];