Использование MPMediaItem с simpleaudioengine

Я делал проект в cocos-2dx, но мне нужно было создать .mm для выбора музыки из библиотеки iOS для воспроизведения в фоновом режиме. Я заработал, играя музыку в файле .mm, но по разным причинам он должен воспроизводиться в cocos-2dx с использованием SimpleAudioEngine. Я попытался преобразовать url absoluteString в NSString в идентификатор в const char*, чтобы переместить его обратно в файлы cocos-2dx, но он все равно не запустился.

Это то, что он дал мне для absoluteString (ipod-library://item/item.m4a?id=456458322781804615)

.cc-

-(void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)collection{
if(collection){
    MPMusicPlayerController* appMusicPlayer = [MPMusicPlayerController applicationMusicPlayer];
    [appMusicPlayer setQueueWithItemCollection:collection];
    [appMusicPlayer play];
    MPMusicPlayerController *iPodMusicPlayerController = [MPMusicPlayerController iPodMusicPlayer];
    MPMediaItem *nowPlayingItem = [iPodMusicPlayerController nowPlayingItem];

    NSURL *url = [nowPlayingItem valueForProperty:MPMediaItemPropertyAssetURL];
    NSString *filePath= [url absoluteString];
    NSString *filePath2 = [url path];
    _songUrl = filePath;
 }
 -(id)returnsongUrl{
     return _songUrl;
 }

Второй .мм

 const char* MediaPicker::songUrl(){
     id na1 = [[MediaPickerWrapper sharedIntance] returnsongUrl];
    const char *cString =  [na1 cStringUsingEncoding:NSASCIIStringEncoding];
    return  cString;
 }

Файл Cocos-2dx

  CocosDenshion::SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic(media->songUrl());
  CocosDenshion::SimpleAudioEngine::sharedEngine()->playBackgroundMusic(media->songUrl(),false);

person Justin Buergi    schedule 27.06.2015    source источник


Ответы (1)


Он фильтруется до вызова метода initWithContentsOfURL: AVAudioPlayer и должен работать с URL-адресами мультимедийных элементов iPod. Однако AVAudioPlayer получил поддержку URL-адресов iPod только в iOS6. Возможно, вам потребуется установить точку останова, чтобы убедиться, что URL-адрес вашего iPod правильно передается методу CDAudioManager's load.

Вам придется написать свою собственную оболочку и использовать AVPlayer или AVQueuePlayer, если вы хотите ориентироваться на устройства до iOS6.

https://developer.apple.com/library/prerelease/ios/releasenotes/General/WhatsNewIniOS/Articles/iOS6.html#//apple_ref/doc/uid/TP40011812-SW1

person Steve T    schedule 03.07.2015