iOS网络音频播放器

iOS 的网络播放器,功能挺全,玩法也不少。不光是简单播放音频,还涉及网络求、数据解析、缓存策略、UI 交互等等,做得好就是一个小型网易云。用URLSession拉数据,再配合AVFoundation来播音频,基本架子就搭起来了。音频流、断点续传、后台播放、UI 进度同步这些,都是提升体验的关键点。

网络求URLSession就够用了,响应也快,支持异步。你可以直接拉 MP3 链接,或者先拉 JSON 再解析出播放地址。断点续传?也有现成封装可以用,比如Swift 断点续传封装,还挺方便。

数据解析嘛,常见的JSON直接上JSONSerialization,或者你偷懒也能用SwiftyJSON搭配Alamofire。要是接口给 XML,那你就得整XMLParser或者找个三方库代劳。

音频播放主力就是AVAudioPlayer,单曲播放轻轻松松。要边播边拉流?那可以试试AVPlayer,或者封装下AVAudioEngine来做扩展,效果还不错。

缓冲机制得搞一下,不然网慢的时候容易卡顿。你可以设个合适的缓存大小,加点预加载逻辑,用户体验会舒服多。对了,URLSession 的downloadTask也能帮你实现边下边播。

播放控制不用说,暂停、继续、跳转这些功能基本都靠AVFoundation的接口。加上AVAudioSession,还能支持后台播放,锁屏也能继续听。

UI 部分就看你想怎么设计了。播放按钮、进度条、列表、封面图,老老实实用UIKit就行,AutoLayout 配合起来布局也还顺手。

数据持久化可以用UserDefaults记录播放进度、收藏状态,要高级点就上CoreData或者直接搞SQLite,也都行。

离线播放也不是啥难事,直接用URLSessionDownloadTask搞定下载,再把文件扔到沙盒目录里。你要是涉及 DRM,嗯,那就得整FairPlay那一套了,复杂点,但必要。

,如果你要搞一个比较完整的 iOS 播放器,这套资源和技术路线还是蛮值得一看的。想快速上手断点续传?你可以看看DownAndASIRequest 示例,里面的代码挺直观。

如果你有打算做离线缓存功能,可以关注下NSURLSessionresumeData用法,配合AFNet 的断点续传实现也蛮靠谱。

zip
GetData.zip 预估大小:89个文件
folder
GetData 文件夹
folder
GetData 文件夹
file
FetchDataFromNet.m 8KB
file
surf.jpg 12KB
folder
CollectDataModel.xcdatamodeld 文件夹
folder
CollectDataModel.xcdatamodel 文件夹
file
contents 1KB
file
main.m 333B
file
SDWebImageDownloaderOperation.m 18KB
file
MusicData.h 722B
file
UIImage+GIF.h 382B
file
CollectViewCell.m 1KB
file
CollectViewCell.h 264B
file
MKAnnotationView+WebCache.h 6KB
file
UIImage+WebP.h 490B
file
SDWebImageDownloader.h 7KB
file
UIView+WebCacheOperation.m 2KB
file
SDImageCache.h 8KB
file
SDWebImageCompat.h 2KB
file
SearchSongVC.h 208B
file
DBManager.h 605B
file
UIView+WebCacheOperation.h 970B
file
AlbumData.m 527B
file
open.jpg 23KB
file
CollectMusicVC.m 4KB
file
SDWebImageManager.m 14KB
file
SDWebImageCompat.m 2KB
file
PlayMusicVC.h 206B
file
SDWebImagePrefetcher.m 5KB
file
UIImage+GIF.m 5KB
file
SDWebImagePrefetcher.h 4KB
file
CollectionViewCell.m 3KB
file
MusicData.m 1KB
file
AppDelegate.h 637B
file
AppDelegate.m 6KB
file
UIButton+WebCache.h 13KB
file
DBManager.m 1KB
file
collectionCell.xib 5KB
folder
Base.lproj 文件夹
file
LaunchScreen.xib 2KB
file
Main.storyboard 13KB
file
UIImageView+WebCache.h 10KB
file
SDWebImageDecoder.m 3KB
file
UIImage+MultiFormat.h 263B
file
FetchDataFromNet.h 783B
file
UIImage+MultiFormat.m 3KB
file
UIImage+WebP.m 2KB
file
PlayMusic.h 338B
file
.DS_Store 8KB
file
SDWebImageManager.h 11KB
file
PlayMusicVC.m 805B
file
CollectMusicVC.h 217B
file
SDWebImageDownloader.m 11KB
file
SDWebImageDecoder.h 453B
file
UIButton+WebCache.m 12KB
file
UIImageView+WebCache.m 8KB
file
SDImageCache.m 20KB
file
SearchSongVC.m 6KB
file
CollectionViewCell.h 360B
file
NSData+ImageContentType.h 565B
file
AlbumData.h 400B
file
ViewController.h 214B
file
MKAnnotationView+WebCache.m 5KB
file
NSData+ImageContentType.m 1KB
folder
Images.xcassets 文件夹
folder
AppIcon.appiconset 文件夹
file
Contents.json 771B
file
logo120_120.png 8KB
file
logo58_58.png 5KB
file
logo80_80.png 6KB
file
logo87_87.png 6KB
file
logo120_120-1.png 8KB
file
UIImageView+HighlightedWebCache.m 5KB
file
PlayMusic.m 916B
file
SDWebImageOperation.h 329B
file
Info.plist 1KB
file
CollectViewCell.xib 3KB
file
ViewController.m 770B
file
UIImageView+HighlightedWebCache.h 5KB
file
SDWebImageDownloaderOperation.h 3KB
file
Music.h 669B
folder
GetData.xcodeproj 文件夹
folder
project.xcworkspace 文件夹
file
contents.xcworkspacedata 152B
folder
xcuserdata 文件夹
folder
codancer.xcuserdatad 文件夹
file
UserInterfaceState.xcuserstate 120KB
folder
JinChengXueYuan.xcuserdatad 文件夹
file
UserInterfaceState.xcuserstate 43KB
folder
xcshareddata 文件夹
file
GetData.xccheckout 1KB
file
project.pbxproj 39KB
folder
xcuserdata 文件夹
folder
codancer.xcuserdatad 文件夹
folder
xcschemes 文件夹
file
GetData.xcscheme 4KB
file
xcschememanagement.plist 569B
folder
xcdebugger 文件夹
file
Breakpoints_v2.xcbkptlist 4KB
folder
JinChengXueYuan.xcuserdatad 文件夹
folder
xcschemes 文件夹
file
GetData.xcscheme 4KB
file
xcschememanagement.plist 569B
folder
xcdebugger 文件夹
file
Breakpoints_v2.xcbkptlist 473B
file
Music.m 354B
folder
GetDataTests 文件夹
file
GetDataTests.m 858B
file
Info.plist 747B
file
.DS_Store 8KB
...
zip 文件大小:268.78KB