我只需要确认 iPhone 应用程序是否可以在后台播放或流式传输广播。
我创建了一个运行良好的收音机应用程序。
我想添加一个功能,用户可以通过它在后台进程中播放收音机,即他们不必保持应用程序打开来播放收音机。
他们可以关闭应用程序,收音机仍在播放。
我很久以前读到苹果有一个私有 API,应用程序可以通过它在后台运行收音机,但由于它是私有的,我不能使用它。
有什么建议么?
我只需要确认 iPhone 应用程序是否可以在后台播放或流式传输广播。
我创建了一个运行良好的收音机应用程序。
我想添加一个功能,用户可以通过它在后台进程中播放收音机,即他们不必保持应用程序打开来播放收音机。
他们可以关闭应用程序,收音机仍在播放。
我很久以前读到苹果有一个私有 API,应用程序可以通过它在后台运行收音机,但由于它是私有的,我不能使用它。
有什么建议么?
iOS SDK 应在 4.0 以上;首先在您的委托代码中:
- (void)applicationDidEnterBackground:(UIApplication *)application {
if (isAbove4_0)
{
CTCallCenter *_center = [[CTCallCenter alloc] init];
_center.callEventHandler = ^(CTCall *call)
{
//NSLog(@"call:%@", call.callState);
if ([call.callState isEqualToString:CTCallStateIncoming])
{
[RadioPlayer pausePlayer];
}
};
}
}
然后,我用了MPMoviePlayerController,AVPlayer就OK了;
if (isAbove4_0) {
if (_mpmovieplayer == nil) {
_mpmovieplayer = [[MPMoviePlayerController alloc] initWithContentURL:url];
[_mpmovieplayer setMovieControlMode:MPMovieControlModeHidden];
}
[_mpmovieplayer setContentURL:url];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
[[AVAudioSession sharedInstance] setActive: YES error: nil];
// This is necessary if you want to play a sequence of songs, otherwise your app will be
// killed after the first one finishes.
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
UIBackgroundTaskIdentifier newTaskId = UIBackgroundTaskInvalid;
[_mpmovieplayer play];
newTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL];
if (newTaskId != UIBackgroundTaskInvalid && bgTaskId != UIBackgroundTaskInvalid)
[[UIApplication sharedApplication] endBackgroundTask: bgTaskId];
bgTaskId = newTaskId;
}
PS:我的英文很差,希望对你有帮助:)
您可以使用这些音频流媒体之一在后台播放
https://github.com/mattgallagher/AudioStreamer
https://github.com/DigitalDJ/AudioStreamer
它可能会帮助你。
这就是它对我的工作方式。
将以下内容添加到您的 app-info.plist 文件中
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>
然后在 application:didFinishLaunchingWithOptions 添加以下
UIBackgroundTaskIdentifier backgroundTask = [application beginBackgroundTaskWithExpirationHandler:^{
/* just fail if this happens. */
NSLog(@"BackgroundTask Expiration Handler is called");
[application endBackgroundTask:backgroundTask];
}];