TDAudioPlayer是一个用于从HTTP或NSInputStream源播放流的库。它的初始动机来自在多对等连接应用中通过NSInputStreams流式传输音频的需求,并且演进到支持HTTP流。
要使用CocoaPods进行安装,将以下内容添加到您的Podfile
pod 'TDAudioPlayer'
然后在您的shell中运行以下命令
pod install
TDAudioPlayer是用XCode 5编写的,并针对iOS 7进行了测试;然而,我相信它在iOS 6上也能正常运行。我将更改podspec,一旦它在iOS 6上经过测试。
要从HTTP或NSInputStream源播放音频,请使用
NSURL *url = [NSURL urlFromString:@"http://web.url/to/my/audio/file"];
[[TDAudioPlayer sharedAudioPlayer] loadAudioFromURL:url];
[[TDAudioPlayer sharedAudioPlayer] play];
或者
NSInputStream *stream = [self myMethodThatGetsAnInputStream];
[[TDAudioPlayer sharedAudioPlayer] loadAudioFromStream:stream];
[[TDAudioPlayer sharedAudioPlayer] play];
当使用音频播放器单例[TDAudioPlayer sharedAudioPlayer]
时,音频会话将被适当地配置,以保持音频在您的应用后台运行或设备锁定时的播放。它还可以将当前播放的曲目信息发送到您的设备上的现在播放媒体信息,这将允许您在锁屏上看到正在播放的内容。
要查看当前播放音频的信息,创建
标题
轨道、歌曲或音频片段的标题艺术家
编曲者的名字专辑封面(低分辨率)
到低分辨率专辑封面图像的URL字符串专辑封面(高分辨率)
到高分辨率专辑封面图像的URL字符串时长
流中音频的秒数然后将这些元信息以及源传递给
TDAudioMetaInfo *meta = [[TDAudioMetaInfo alloc] init];
meta.title = @"Title of the Track";
meta.artist = @"Artist Name";
meta.albumArtSmall = @"http://www.some-address.com/track_id/low_res_image.png";
meta.albumArtLarge = @"http://www.some-address.com/track_id/high_res_image.png";
meta.duration = @356;
然后
NSURL *url = [NSURL urlFromString:@"http://web.url/to/my/audio/file"];
[[TDAudioPlayer sharedAudioPlayer] loadAudioFromURL:url withMetaData:meta];
[[TDAudioPlayer sharedAudioPlayer] play];
或者
NSInputStream *stream = [self myMethodThatGetsAnInputStream];
[[TDAudioPlayer sharedAudioPlayer] loadAudioFromStream:stream withMetaData:meta];
[[TDAudioPlayer sharedAudioPlayer] play];
使用以下方法来控制音频播放器。
[[TDAudioPlayer sharedAudioPlayer] play];
[[TDAudioPlayer sharedAudioPlayer] pause];
[[TDAudioPlayer sharedAudioPlayer] stop];
您可以使用低级别类
NSURL *url = [NSURL urlFromString:@"http://web.url/to/my/audio/file"];
TDAudioInputStreamer *streamer = [[TDAudioInputStreamer alloc] initWithURL:url];
要开始播放音频,请调用 start
。然后使用以下方法来控制音频流。
[streamer start];
[streamer pause];
[streamer resume];
[streamer stop];
在使用 TDAudioPlayer
单例类时,它将在音频播放的某些点发布通知。
TDAudioPlayerDidChangeAudioNotification
当新音频流加载到播放器中时发布。TDAudioPlayerDidPauseNotification
当音频播放器暂停动作执行时发布。TDAudioPlayerDidPlayNotification
当音频播放器播放动作执行时发布。TDAudioPlayerDidStopNotification
当音频播放器停止动作执行时发布。TDAudioStreamDidStartPlayingNotification
当音频开始播放时发布。TDAudioStreamDidFinishPlayingNotification
当音频播放完毕时发布。如果您正在使用底层类 TDAudioInputStreamer
,则只会发布最后两个通知。(TDAudioStreamDidStartPlayingNotification
和 TDAudioStreamDidFinishPlayingNotification
)
还有另外两个对在应用程序中实现播放列表有用的通知。如果您在下一节中实现了锁屏和远程音频控件,这些通知将可用。
TDAudioPlayerNextTrackRequestNotification
当用户在锁屏或远程设备上触摸“下一曲”时发布。TDAudioPlayerPreviousTrackRequestNotification
当用户在锁屏或远程设备上触摸“上一曲”时发布。在您的播放列表类中监听这些通知,并将下一曲或上一曲音频流加载到 TDAudioPlayer
中。
要从锁屏或远程设备接收音频控制事件,您必须开启事件监听,然后将事件传递给 TDAudioPlayer
单例事件处理程序。您可以在演示的 App Delegate 中看到这个示例。
将此方法调用添加到您的 App Delegate 的 application:didFinishLaunchingWithOptions:
方法中,以开始接收远程控制事件。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// your custom startup code
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
return YES;
}
然后,将相反的方法调用添加到您的 App Delegate 的 applicationWillTerminate:
方法中,以停止接收事件。
- (void)applicationWillTerminate:(UIApplication *)application
{
[[UIApplication sharedApplication] endReceivingRemoteControlEvents];
}
最后,捕获远程控制事件并将它们传递到 [TDAudioPlayer sharedAudioPlayer]
或编写您自己的逻辑。
- (void)remoteControlReceivedWithEvent:(UIEvent *)event
{
[[TDAudioPlayer sharedAudioPlayer] handleRemoteControlEvent:event];
}
有几个示例您可以查看以开始使用。有一个快速播放单个文件并使用底层类在 TDSingleStreamViewController 中快速播放单个文件的示例。查看 TDMultiStreamViewController 及其相关类以了解实现播放列表的示例。
此库在 Console.fm 中使用。查看此项目以获得另一个很好的示例。
此库由 Anthony(Tony) DiPasquale 编写,参考了 Apple 提供的示例代码和 Matt Gallagher 的 AudioStreamer 项目。
TDAudioPlayer 是 Copyright (c) 2013 Anthony DiPasquale。它是免费软件,可能根据LICENSE文件中指定的条款进行分发。