Воспроизвести фоновый звук с AVPlayer в MonoTouch? - PullRequest
2 голосов
/ 13 сентября 2011

Во-первых, я понимаю, что это копия похожего вопроса на основе цели С., но на него не было ответа.

Я использую AVPlayer для аудио в моем приложении. Он воспроизводит звук, правильно настраивает аудио сеанс (мне кажется, значок воспроизведения отображается в строке состояния, когда я воспроизводю аудиодорожки в своем приложении, а значок приложения отображается рядом с элементами управления транспортом проигрывателя в многозадачной док-станции). Однако я не могу заставить его продолжать играть в фоновом режиме, когда нажимаю кнопку «Домой». Музыка просто затухает и останавливается.

У меня есть следующий ключ в моем info.plist:

<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>

В моем классе, который обрабатывает воспроизведение, у меня есть:

AVAudioSession audioSession = AVAudioSession.SharedInstance();
NSError error;
audioSession.SetCategory(AVAudioSession.CategoryPlayback.ToString(),out   error);
audioSession.SetActive(true,out error);

UIApplication.SharedApplication.BeginReceivingRemoteControlEvents();

int taskID = 0;
taskID = UIApplication.SharedApplication.BeginBackgroundTask(delegate
{
    if(taskID !=0)
    {
        UIApplication.SharedApplication.EndBackgroundTask(taskID);
        taskID = 0;
    }
});


PlaylistManager = new ApolloPlaylistManager();
AudioPlayer = new AVPlayer();

Не уверен, нужна ли мне эта часть BeginBackgroundTask, но она не работает, если она включена или выключена, я уверен, что она мне не нужна. Любые советы очень ценятся, так как я застрял на этом в течение нескольких дней: - (

Ответы [ 4 ]

2 голосов
/ 14 сентября 2011

Хорошо, я чувствую себя немного глупо.Оказывается, у моего ключевого UIApplicationModes был пробел перед ним.Doh!

Ну, для тех, у кого есть подобные проблемы, убедитесь, что ваш info.plist выглядит так

<key>UIBackgroundModes</key>
<array>
 <string>audio</string>
</array>

и настройте код воспроизведения следующим образом (помните, это Monotouch):

AVAudioSession audioSession = AVAudioSession.SharedInstance();
NSError error;
audioSession.SetCategory(AVAudioSession.CategoryPlayback.ToString(),out error);
        audioSession.SetActive(true,out error);

        UIApplication.SharedApplication.BeginReceivingRemoteControlEvents();

        AudioPlayer = new AVPlayer();
1 голос
/ 13 сентября 2011

Кажется, вы не настроили AVAudioSession правильно.Взгляните на это и это .

Я надеюсь, что эти советы помогут вам в правильном направлении.

0 голосов
/ 12 августа 2013

Я знаю, что это старый вопрос, но просто добавлю, что я испытал:

  1. AVAudioSession.SharedInstance ();не работает на моем устройстве, но создание нового экземпляра делает AVAudioSession audiosession = new AVAudioSession ();

  2. В info.plist значение RequiredBackgroundModes теперь «Звуковой контент», а не «Аудио»

Надеюсь, это поможет.

0 голосов
/ 02 апреля 2012

У меня была похожая проблема, когда один вид записывал, а другой просматривал эту запись. Запись будет работать только иногда (будет производить 5 КБ файлов), которые были пусты. Сообщение об ошибке не отображается. После нескольких часов разочарования я наткнулся на вышеупомянутую запись Дермота и заставил ее работать, добавив AVAudioSession перед AVAudioRecorder:

AVAudioSession audioSession = AVAudioSession.SharedInstance ();

            audioSession.SetCategory (AVAudioSession.CategoryRecord,out error);
            audioSession.SetActive(true, out error);


        recorder = AVAudioRecorder.ToUrl (url, settings, out error);

И тот же код, но измененный CategoryRecord на CategoryPlayback.

audioSession.SetCategory (AVAudioSession.CategoryPlayback,out error);
...