Воспроизведение двух песен с защитой DRM одновременно с разной громкостью

Я пытаюсь создать эффект с двумя разными MPMusicPlayerControllers с разной громкостью. Я могу создать один MPMusicPlayerController и установить для него громкость

let musicPlayerController = MPMusicPlayerController.systemMusicPlayer

let volumeController = MPVolumeView(frame: CGRect(x: 0, y: 0, width: 1, height: 1))
self.view.addSubview(volumeController)

// get the UISlider for the MPVolumeView
let volumeSlider = volumeController.volumeSlider
volumeSlider.value = 0.5

musicPlayerController.play()

Но теперь, когда MPMusicPlayerController.volume устарел, я не могу понять способ создать два MPMusicPlayerControllers с разными объемами... Я ищу что-то вроде этого

let musicPlayerController = MPMusicPlayerController()
musicPlayerController.volume = 0.5
//set the song
musicPlayerController.play()

let otherPlayerController = MPMusicPlayerController()
otherPlayerController = 0.5
//set the song
otherPlayerController.play()

Я не могу использовать AVAudioPlayer из-за ограничений, которые он имеет с файлами, защищенными DRM. По сути, я пытаюсь одновременно воспроизводить два музыкальных файла с защитой DRM на разных уровнях громкости.

Есть ли способ создать (или иметь такой же эффект) два разных MPMusicPlayerControllers с разной громкостью в iOS 10 или 11 (что-то вроде воспроизведения двух песен с разной громкостью на одном и том же MPMusicPlayerController)? Приветствуются хакерские обходные пути.


person Jojodmo    schedule 06.08.2017    source источник
comment
Я думаю, что systemMusicPlayer — это всего лишь ссылка на общесистемный музыкальный проигрыватель, который является синглтоном. Попробуйте appMusicPlayer и посмотрите, получится ли другой результат. let player01 = MPMusicPlayerController.applicationMusicPlayer() let player02 = MPMusicPlayerController.applicationMusicPlayer()   -  person solenoid    schedule 07.08.2017
comment
@solenoid Спасибо за ответ! Я пытался это сделать, но не могу понять, как изменить громкость двух независимо друг от друга (я упомянул об этом позже в вопросе, но, вероятно, должен был включить это в заголовок — я только что обновил сообщение)   -  person Jojodmo    schedule 07.08.2017
comment
Ааа объем - у меня есть сомнения на этот счет. Из любопытства, какая музыка не воспроизводится в AVPlayer? В моем приложении я играю только местную музыку, и только песни со старым DRM не загружаются.   -  person solenoid    schedule 07.08.2017
comment
@solenoid Я загружаю песни, загруженные из Apple Music, в плейлист на телефоне пользователя. когда я использую MPMediaItem.assetURL, я получаю URL вида ipod-library://item/item.m4a?id= 3816532951739856891. Когда я создаю новый AVAudioPlayer с этим URL-адресом и вызываю play(), я не получаю никакой ошибки, но из устройства не выходит звук. Когда я использую MPItem.filepathURL, я получаю ноль.   -  person Jojodmo    schedule 07.08.2017
comment
Хм, я помню, что-то подобное происходило из-за ненастроенной AVAudiosession... вы сделали { try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback) } catch let error { print(Error with audio session, error)} I am не уверен, что filepathURL когда-либо возвращает что-либо, я проверю позже, если вышеприведенное не решит это   -  person solenoid    schedule 08.08.2017
comment
@solenoid Я только что попробовал это, а также try AVAudioSession.sharedInstance().setActive(true) после этого, создав AVAudioPlayer(contentsOf: myMPMediaItem.assetURL!), а затем вызвав play() на новом аудиоплеере, но звук все еще не воспроизводится ...   -  person Jojodmo    schedule 08.08.2017
comment
Давайте продолжим обсуждение в чате.   -  person solenoid    schedule 08.08.2017
comment
@Jojodmo ты нашел решение?   -  person Arpit B Parekh    schedule 08.12.2017
comment
@ArpitBParekh К сожалению, пока нет.   -  person Jojodmo    schedule 11.12.2017
comment
Могу ли я каким-либо образом воспроизводить треки DRM, кроме MPMusicPlayer? Спасибо за ответ @Jojodmo   -  person Arpit B Parekh    schedule 11.12.2017
comment
@ArpitBParekh Насколько мне известно, нет. Если вы случайно наткнетесь на решение, было бы очень признательно, если бы вы разместили его здесь.   -  person Jojodmo    schedule 11.12.2017
comment
Хм, спасибо. Обязательно напишу, если что-то положительное.   -  person Arpit B Parekh    schedule 11.12.2017
comment
Я пытаюсь с Pandora Player (github.com/ApplikeySolutions/PandoraPlayer) показать ошибку запуска проекта, и и во-вторых, я попробую использовать AVAudioEngine, во время игры он показывал исключения. Мне нужно проверить.   -  person Arpit B Parekh    schedule 11.12.2017
comment
@JojodmoЯ получаю нулевой URL-адрес для загруженных песен из Apple Music. У вас это сработало?   -  person Ravi Chokshi    schedule 12.12.2017


Ответы (1)


Я связался с Apple, и они подтвердили, что в настоящее время нет способа сделать это. Я подал предложение о функции, так что, надеюсь, мы сможем увидеть это в будущем.

В моем предложении по функции предлагается использовать глобальный обработчик и делегат, что позволяет приложению отправлять команды обработчику (что-то вроде MPDRMMusicHandler.shared), а затем получать ответы на эти команды через делегата MPDRMMusicDelegate, назначенного сеансу музыкального обработчика MPDRMMusicHandler.

Приложение ни в коем случае не сможет получить доступ к незашифрованным необработанным музыкальным данным, поскольку приложение сможет только отправлять запросы на воспроизведение музыки и устанавливать ее характеристики. Затем в ответ на эти команды будут вызываться функции делегата, указывающие, были ли команды успешными, или сообщающие об ошибках, если они не удались. Расшифровка музыки, защищенной DRM, будет выполняться iOS отдельно от приложения (или, по крайней мере, в частной библиотеке, к которой разработчики «не могут» получить доступ).

person Jojodmo    schedule 24.08.2017