117 音乐的流媒体播放
来源:互联网 发布:交通可视化仿真软件 编辑:程序博客网 时间:2024/06/07 22:17
1.使用字系统自带类AVPlayer实现MP3
流媒体播放:
NSURL *url = [NSURL URLWithString:@"http://192.168.1111.1111:8080/MJServer/resources/images/1.mp3"]; self.player = [[AVPlayer alloc] initWithURL:url]; [self.player play];
2.使用豆瓣框架播放:DOUAudioStreamer
github地址:https://github.com/douban/DOUAudioStreamer
下载之后将src文件夹拖进工程
1>编译报错:
解决办法:
2>第二个报错:
解决办法:
之后在xcode7就可以编译成功!
DOUAudioStreamer的使用:
1>导入#import “DOUAudioStreamer.h”并生成一个属性
@property (nonatomic, strong) DOUAudioStreamer *streamer;
model类生成:
示例代码:
#pragma mark - 定时器- (void)addTimer{ self.currentTimeTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateCurrentTime) userInfo:nil repeats:YES]; [[NSRunLoop mainRunLoop] addTimer:self.currentTimeTimer forMode:NSRunLoopCommonModes];}- (void)removeTimer{ [self.currentTimeTimer invalidate]; self.currentTimeTimer = nil;}- (void)viewDidLoad{ [super viewDidLoad]; // 创建音频文件模型(提供音频文件路径) // 创建播放器 self.streamer = [DOUAudioStreamer streamerWithAudioFile:[[DOUModel alloc] init]]; // KVO监听streamer的属性(Key value Observing) [self.streamer addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionOld context:nil]; [self.streamer addObserver:self forKeyPath:@"bufferingRatio" options:NSKeyValueObservingOptionOld context:nil]; // 播放 [self.streamer play]; [self addTimer];}- (void)dealloc{ [self.streamer removeObserver:self forKeyPath:@"status"]; [self.streamer removeObserver:self forKeyPath:@"bufferingRatio"];}/** 利用KVO监听的属性值改变了,就会调用 */- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ dispatch_async(dispatch_get_main_queue(), ^{ if ([keyPath isEqualToString:@"status"]) { // 监听到播放器状态改变了 // NSLog(@"状态改变了----%d", self.streamer.status); } else if ([keyPath isEqualToString:@"bufferingRatio"]) { // 监听到缓冲比例改变 double unit = 1000.0; // 总长度 double expectedLength = self.streamer.expectedLength / unit / unit; // 已经下载长度 double receivedLength = self.streamer.receivedLength / unit / unit; // 下载速度 double downloadSpeed = self.streamer.downloadSpeed / unit; NSString *str = [NSString stringWithFormat:@"缓冲:%.2fMB/%.2fMB(%.0f%%)\n下载速度:%.2fKB/s", receivedLength, expectedLength, (receivedLength/ expectedLength) * 100, downloadSpeed]; NSLog(@"------rate-----%@",str); } });}- (void)updateCurrentTime{ //播放进度 double progress = self.streamer.currentTime / self.streamer.duration; NSLog(@"progress:%f",progress);}
补充1:
@property (nonatomic, readonly) NSString *cachedPath;@property (nonatomic, readonly) NSURL *cachedURL;可以使用这两个属性将缓存的文件从temp转移到document中,相当于下载volumekey 设置声音
补充2:上一首,下一首
1>移除KVO(否则出错)[self.streamer removeObserver:self forKeyPath:@"status"];[self.streamer removeObserver:self forKeyPath:@"bufferingRatio"];2>置空self.streamer[self.streamer stop];self.streamer = nil;3>重新创建self.streamer并监听即可 // 创建音频文件模型(提供音频文件路径) DOUModel *model = [[DOUModel alloc] init]; model.audioFileURL = [NSURL URLWithString:@"http://10.20.82.21:8080/MJServer/resources/images/1.mp3"]; // 创建播放器 self.streamer = [DOUAudioStreamer streamerWithAudioFile:model];4.因为model实现DOUAudioFile协议中的- (NSURL *)audioFileURL;方法,如果在这里返回url会播放固定的一首解决办法是:不实现协议方法,用属性来代替@property(nonatomic,strong)NSURL *audioFileURL;这个属性会默认生成- (NSURL *)audioFileURL;方法在model类创建之后立刻设置url,然后再将model给self.streamer使用,这样即可
音频总结:
一、音频播放
1.音效播放(短时间的音频文件)
1> AudioServicesCreateSystemSoundID
2> AudioServicesPlaySystemSound
2.音乐播放(长时间的音频文件)
1> AVAudioPlayer
只能播放本地的音频文件
2> AVPlayer
能播放本地、远程的音频、视频文件
基于Layer显示,得自己去编写控制面板
3> MPMoviePlayerController
能播放本地、远程的音频、视频文件
自带播放控制面板(暂停、播放、播放进度、是否要全屏)
4> MPMoviewPlayerViewController
能播放本地、远程的音频、视频文件
内部是封装了MPMoviePlayerController
播放界面默认就是全屏的
如果播放功能比较简单,仅仅是简单地播放远程、本地的视频文件,建议用这个
5> DOUAudioStreamer
能播放远程、本地的音频文件
监听缓冲进度、下载速度、下载进度
- 117 音乐的流媒体播放
- nginx的流媒体播放
- 用第三方FreeStreamer实现网络流媒体音乐播放
- 播放音乐的脚本
- 音乐播放的问题?
- 音乐的播放
- 音乐的随机播放
- 播放简短的音乐
- 简单的音乐播放
- 安卓端的音乐播放
- android_音乐的播放
- 简易的音乐播放
- 简单的音乐播放
- IOS音频的流媒体播放
- 播放流媒体
- 简单的播放应用内音乐的音乐播放器
- Android音乐播放器的播放实例
- 音频的播放、简单音乐播放器
- 《启示录》阅读笔记(七)——产品评审团
- 解决linux VPS安装weblogic时碰到的显示问题Checking monitor: must be configured to display at least 256 colors
- JSP中多种include标签的区别?
- 双目测距的实现
- UVa 1587 - Box
- 117 音乐的流媒体播放
- Java观察者模式的理解
- GCD入门介绍一
- 自适应管线场景符号配置操作流程
- boost库安装过程(Linux)
- 软件测试之功能测试
- RadioGroup调用check(id)方法时,OnCheckedChangedListener被多次回调问题
- SQLite 时间 查询
- PHP底层的运行机制与原理