概述
接下来是音频和视频的播放,这里只是简单的展示播放的基本操作。关于复杂的操作还涉及很多的音视频专门的知识,例如播放器的“生命周期”、播放和屏幕状态的配合、播放器是否可以兼顾到绝大多数的音视频文件格式等等。
本文的内容:
- 使用iOS自带的AVAudioPlayer播放音频(本地的mp3文件)。
- 音频音量控制
- 音频播放进度展示
示例
将mp3文件放到工程根目录中。
仔细看实例代码注释,很简单
ViewController.h
#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>
//AVAudioPlayerDelegate:音频播放协议代理
@interface ViewController : UIViewController <AVAudioPlayerDelegate>
{
//控制按钮
UIButton* _btnPlay;
UIButton* _btnPause;
UIButton* _btnStop;
//进度条
UIProgressView* _progressView;
//控制音量
UISlider* _slider;
//音频播放器
AVAudioPlayer* _player;
//定时器,更新进度条
NSTimer* _timer;
}
@end
ViewController.m
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
//实例化三个按钮,控制音频播放、暂停、停止
_btnPlay = [UIButton buttonWithType:UIButtonTypeRoundedRect];
_btnPlay.frame = CGRectMake(100, 100, 100, 40);
[_btnPlay setTitle:@"播放" forState:UIControlStateNormal];
[_btnPlay addTarget:self action:@selector(playRadio:) forControlEvents:UIControlEventTouchUpInside];
_btnPause = [UIButton buttonWithType:UIButtonTypeRoundedRect];
_btnPause.frame = CGRectMake(100, 150, 100, 40);
[_btnPause setTitle:@"暂停" forState:UIControlStateNormal];
[_btnPause addTarget:self action:@selector(pauseRadio:) forControlEvents:UIControlEventTouchUpInside];
_btnStop = [UIButton buttonWithType:UIButtonTypeRoundedRect];
_btnStop.frame = CGRectMake(100, 200, 100, 40);
[_btnStop setTitle:@"停止" forState:UIControlStateNormal];
[_btnStop addTarget:self action:@selector(stopRadio:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:_btnPlay];
[self.view addSubview:_btnPause];
[self.view addSubview:_btnStop];
//实例化音频播放进度条
_progressView = [UIProgressView new];
_progressView.frame = CGRectMake(10, 300, 300, 20);
_progressView.progress = 0;
[self.view addSubview:_progressView];
//实例化音量控制条
_slider = [UISlider new];
_slider.frame = CGRectMake(10, 350, 300, 20);
_slider.maximumValue = 100;
_slider.minimumValue = 0;
[_slider addTarget:self action:@selector(volueChange:) forControlEvents:UIControlEventValueChanged];
[self.view addSubview:_slider];
[self createAVRplayer];
[self createTimer];
//设置本视图控制器实例为播放器代理
_player.delegate = self;
}
-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag{
//音频播放完成之后,将定时器停掉
[_timer invalidate];
}
//初始化定时器,并启动
//p1 刷新间隔
//p2 函数执行对象
//p3 执行函数
//p4 额外参数
//p5 是否重复
-(void) createTimer{
_timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateT) userInfo:nil repeats:YES];
}
//更新音频进度条
-(void)updateT{
_progressView.progress = _player.currentTime/_player.duration;
}
//创建音频播放器并进行相应配置
-(void) createAVRplayer{
//获取mp3文件路径字符串
NSString* path = [[NSBundle mainBundle] pathForResource:@"xue" ofType:@"mp3"];
//路径字符串转化为url
NSURL* urlMusic = [NSURL fileURLWithPath:path];
//初始化播放器
_player = [[AVAudioPlayer alloc] initWithContentsOfURL:urlMusic error: nil];
//准备播放,解码
[_player prepareToPlay];
//循环次数。-1:无限次;
_player.numberOfLoops = 1;
//音量
_player.volume = 0.5;
}
-(void)playRadio:(UIButton*) btn{
NSLog(@"播放");
//播放音频
[_player play];
}
-(void)pauseRadio:(UIButton*) btn{
NSLog(@"暂停");
//暂停音频
[_player pause];
}
-(void)stopRadio:(UIButton*) btn{
NSLog(@"停止");
//停止播放音频
[_player stop];
//将播放器进度置0
_player.currentTime = 0;
}
-(void)volueChange:(UISlider*) slider{
NSLog(@"value==%f",slider.value);
//设置音量
_player.volume = slider.value/100;
}
@end