我正在尝试编写一个简单的个人广播应用程序,但遇到了一个烦人的问题。
我尝试使用 AVPlayer 从远程服务器播放 .pls(流)文件,我成功地使其工作。我现在可以播放流,但正如我在标题中提到的,当应用程序处于后台时,我无法远程控制播放/暂停选项。
我在互联网上搜索了很多关于该主题的内容,并找到了两种解决方案。
1- 就像在 Apple 的远程控制事件文档中一样,使用“MPRemoteCommandCenter”类来处理这个问题,但是对于这个解决方案,我找不到任何很好的解释来说明我将如何使用 AVPlayer。这让我想到了第二个解决方案,因为我不知道如何使用 MPRemoteCommandCenter 类。
2- 几乎所有人都提到过 remoteControlReceivedWithEvent:方法。但是,当我尝试使用这种方法时,我无法得到回应。我的remoteControlReceivedWithEvent:方法从未被调用过。这是我如何实现行为的代码:
我有两个类,一个叫做 EGPlayRadio.m,它包含 AVPlayer 和 AVAudioSession 的东西,另一个是 EGMainMenuViewController.m,它显示一个播放按钮和暂停按钮来播放广播。
我祈祷,注意第一次调用[AVSession sharedInstance]之前调用[[UIApplication的sharedApplication] beginReceivingRemoteControlEvents]方法。
我还注意到从项目的构建设置中授予应用程序后台音频播放权限。
但是,在互联网上搜索了很多之后,我找不到适合我的问题的解决方案。这是我实现的两个类:
EGPlayRadio.m
#import "EGPlayRadio.h"
#import <MediaPlayer/MediaPlayer.h>
#import <AVFoundation/AVFoundation.h>
@interface EGPlayRadio () <AVAudioPlayerDelegate>
@property (nonatomic, strong) AVAudioSession *audioSession;
@property (nonatomic, strong) AVPlayer *player;
@end
@implementation EGPlayRadio
- (id)initDefault
{
self = [super init];
if (self)
{
_audioSession = [AVAudioSession sharedInstance];
[_audioSession setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error:nil];
[[AVAudioSession …
Run Code Online (Sandbox Code Playgroud)