在MonoTouch中使用AVPlayer播放背景音频?

时间:2011-09-13 06:37:06

标签: iphone audio xamarin.ios multitasking avplayer

首先,我理解这是一个类似的基于C的问题的副本,但没有得到回答。

我在我的应用中使用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 个答案:

答案 0 :(得分:2)

好的,我觉得有点愚蠢。事实证明我的关键UIApplicationModes前面有一个空间。卫生署!

好吧,对于有类似问题的人,请确保您的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 :(得分:1)

好像你没有正确设置AVAudioSession。请查看thisthis

我希望这些技巧可以指导您朝着正确的方向发展。

答案 2 :(得分:0)

我有一个类似的问题,其中一个视图正在录制,另一个视图播放该录制。录制只会有时(会产生5kb文件)是空的。没有显示错误消息。经过几个小时的挫折之后,我遇到了Dermot的上述帖子,并通过在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);

答案 3 :(得分:0)

我知道这是一个老问题,只是为了增加我的经验:

  1. AVAudioSession.SharedInstance();在我的设备上没有工作,但创建一个新的实例AVAudioSession audiosession = new AVAudioSession();

  2. 在info.plist中,RequiredBackgroundModes值现在是“Audible content”而不是“Audio”

  3. 希望有所帮助。