概述
接下來是音頻和視頻的播放,這裏只是簡單的展示播放的基本操作。關於複雜的操作還涉及很多的音視頻專門的知識,例如播放器的“生命週期”、播放和屏幕狀態的配合、播放器是否可以兼顧到絕大多數的音視頻文件格式等等。
本文的內容:
- 使用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