1、音頻
音樂播放用到一個叫作AVAudioPlayer的類,這個類能夠用於播放手機本地的音樂文件。
AVAudioPlayer類依賴於AVFoundation框架,所以使用該類必須先導入AVFoundation框架,幷包含其頭文件(包含主頭文件便可)。
//1.音樂文件的路徑
NSString *urlString = [[NSBundle mainBundle] pathForResource:@"王繹龍-鄰家美眉" ofType:@"mp3"];
//2.轉化成本地路徑
NSURL *url = [NSURL fileURLWithPath:urlString];
//3.建立播放對象
_audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
//5.記錄音樂的總時長 duration聲音的持續時間
@property(readonly) NSTimeInterval duration;
//6.設置音量的大小
@property float volume
設置播放次數
@property float numberOfLoops = 0;
//播放 暫停 中止
-
(BOOL)play;
-
(void)pause;
-
(void)stop;
//播放進度的改變
@property NSTimeInterval currentTime;
代碼:
// 添加背景圖片
imageview = [[UIImageView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
imageview.image = [UIImage imageNamed:@"1.jpg"];
[self.view addSubview:imageview];
// 添加播放按鈕
btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
btn.frame = CGRectMake(150, 180, 100, 100);
btn.tintColor = [UIColor redColor];
[btn setTitle:@"播放" forState:UIControlStateNormal];
[btn addTarget:self action:@selector(btnAction:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn];
// 添加暫停按鈕
btn1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
btn1.frame = CGRectMake(180, 380, 100, 100);
btn1.tintColor = [UIColor redColor];
[btn1 setTitle:@"暫停" forState:UIControlStateNormal];
[btn1 addTarget:self action:@selector(btn1Action:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn1];
// 添加中止按鈕
btn2 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
btn2.frame = CGRectMake(130, 380, 30, 100);
btn2.tintColor = [UIColor redColor];
[btn2 setTitle:@"中止" forState:UIControlStateNormal];
[btn2 addTarget:self action:@selector(btn2Action:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn2];
//播放事件
-(void)btnAction:(UIButton *)bt
{
if (player == nil){
NSString *path = [[NSBundle mainBundle]pathForResource:@"王繹龍-鄰家美眉" ofType:@"mp3"];
NSURL *url = [NSURL fileURLWithPath:path];
player = [[AVAudioPlayer alloc]initWithContentsOfURL:url error:nil];
}
// 開始播放
[player play];
}
//暫停播放事件
-(void)btn1Action:(UIButton *)bt1
{
// 暫停播放
[player pause];
}
//中止播放事件
-(void)btn2Action:(UIButton *)bt2
{
// 播放中止
[player stop];
player = nil;
}
///////////音頻代碼(block方法)功能////////////
- (void)viewDidLoad {
[super viewDidLoad];
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
// 建立一個定時器
[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerAction:) userInfo:nil repeats:YES];
// 保持線程活躍
[[NSRunLoop currentRunLoop] run];
});
// 播放
play1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
play1.frame = CGRectMake(30, 360, 90, 35);
play1.backgroundColor = [UIColor redColor];
[play1 setTitle:@"播放" forState:UIControlStateNormal];
[play1 addTarget:self action:@selector(playAction:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:play1];
// 中止播放
stop = [UIButton buttonWithType:UIButtonTypeRoundedRect];
stop.frame = CGRectMake(30, 260, 90, 35);
stop.backgroundColor = [UIColor redColor];
[stop setTitle:@"中止" forState:UIControlStateNormal];
[stop addTarget:self action:@selector(stopAction:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:stop];
// 暫停播放
pause = [UIButton buttonWithType:UIButtonTypeRoundedRect];
pause.frame = CGRectMake(30, 160, 90, 35);
pause.backgroundColor = [UIColor redColor];
[pause setTitle:@"暫停" forState:UIControlStateNormal];
[pause addTarget:self action:@selector(pauseAction:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:pause];
// 聲音UILabel
sound = [[UILabel alloc] initWithFrame:CGRectMake(90, 210, 100, 20)];
sound.text = @"聲音:";
[self.view addSubview:sound];
// 聲音UISlider
audioPlayer = [[UISlider alloc] initWithFrame:CGRectMake(150, 170, 200, 100)];
[audioPlayer addTarget:self action:@selector(audioSilderChanged:) forControlEvents:UIControlEventValueChanged];
[self.view addSubview:audioPlayer];
// 進度UISlider
_timeSlider = [[UISlider alloc] initWithFrame:CGRectMake(160, 270, 150, 100)];
[_timeSlider addTarget:self action:@selector(timeSliderChanged:) forControlEvents:UIControlEventValueChanged];
[self.view addSubview:_timeSlider];
// 當前進度
_startTimeLabel = [[UILabel alloc] initWithFrame:CGRectMake(130, 270, 100, 100)];
[self.view addSubview:_startTimeLabel];
// 音樂總長
_endTimeLabel = [[UILabel alloc] initWithFrame:CGRectMake(320, 270, 100, 100)];
[self.view addSubview:_endTimeLabel];
_audioPlayer.delegate = self;
}
- (void)timerAction:(NSTimer *)timer
{
// 回到主線程刷新UI
dispatch_async(dispatch_get_main_queue(), ^{
_startTimeLabel.text = [NSString stringWithFormat:@"%d",(int)_audioPlayer.currentTime];
_timeSlider.value = _audioPlayer.currentTime;
});
}
-(void)pauseAction:(UIButton *)pause{
[_audioPlayer pause];
}
-(void)stopAction:(UIButton *)stop{
[_audioPlayer stop];
_audioPlayer = nil;
}
-(void)audioSilderChanged:(UISlider *)audio{
UISlider *slider = (UISlider *)audioPlayer;
// 7.設置音量的大小
_audioPlayer.volume = slider.value;
}
-(void)playAction:(UIButton *)pl{
if (_audioPlayer == nil) {
// 1.音樂文件的路徑
NSString *urlString = [[NSBundle mainBundle] pathForResource:@"王繹龍-鄰家美眉" ofType:@"mp3"];
// 2.轉化成本地路徑
NSURL *url = [NSURL fileURLWithPath:urlString];
// 3.建立播放對象
_audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
_audioPlayer.numberOfLoops = -1;
// 5.記錄音樂的總時長 duration聲音的持續時間
_startTimeLabel.text = @"0";
// 音樂總長UILabel
_endTimeLabel.text = [NSString stringWithFormat:@"%d",(int)_audioPlayer.duration];
// 6.設置滑條的參數
_timeSlider.minimumValue = 0;
_timeSlider.maximumValue = _audioPlayer.duration;
// 7.設置音量的大小
_audioPlayer.volume = 0.0;
}
// 5.播放
[_audioPlayer play];
}
-(void)timeSliderChanged:(UISlider *)time{
// 播放進度的改變
_audioPlayer.currentTime = _timeSlider.value;
}
@end
/////////音頻(系統)/
//////////
-----設置支持後臺播放------
NSError *error;
AVAudioSession *audionSession = [AVAudioSession sharedInstance];
[audionSession setCategory:AVAudioSessionCategoryPlayback error:&error];
// 1.獲取音頻的url
NSString *urlString = @"
http://yinyueshiting.baidu.com/data2/music/122092051/693143255600128.mp3?xcode=fcdab48f5e8e1bfeabce6f1886feb9701b23d208676f9a7d";
NSURL *url = [NSURL URLWithString:urlString];
// 2.建立播放對象
// 01.建立播放元素
_playerItem = [[AVPlayerItem alloc] initWithURL:url];
_player = [[AVPlayer alloc] initWithPlayerItem:_playerItem];
// 播放
[_player play];
// 暫停
// [_player pause];
*/
// 3.註冊系統聲音 (測試一些系統功能的時候,模擬器可能很差使)
// 1.獲取路徑
NSString *urlString = [[NSBundle mainBundle] pathForResource:@"44th Street Medium" ofType:@"caf"];
NSURL *fileUrl = [NSURL fileURLWithPath:urlString];
// 2.建立建立系統生意的標識
SystemSoundID soundID ;
// 3.註冊系統聲音
AudioServicesCreateSystemSoundID((__bridge CFURLRef)fileUrl, &soundID)
;
// 4.播放
AudioServicesPlaySystemSound(soundID);
// 設置震動
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
// 獲取音樂的總時長
NSLog(@"%lld",_playerItem.duration.value/_playerItem.duration.timescale);
}
///////////音頻(代理方式)////////////
button(play、stop、pause暫停)略寫
//從budle路徑下讀取音頻文件 輕音樂 - 薩克斯回家這個文件名是你的歌曲名字,mp3是你的音頻格式
NSString *string = [[NSBundle mainBundle] pathForResource:@"王繹龍-鄰家美眉" ofType:@"mp3"];
//把音頻文件轉換成url格式
NSURL *url = [NSURL fileURLWithPath:string];
//初始化音頻類 而且添加播放文件
avAudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
//設置代理
avAudioPlayer.delegate = self;
//設置初始音量大小
// avAudioPlayer.volume = 1;
//設置音樂播放次數 -1爲一直循環
avAudioPlayer.numberOfLoops = 0;
//預播放
[avAudioPlayer prepareToPlay];
//初始化一個播放進度條
progressV = [[UIProgressView alloc] initWithFrame:CGRectMake(20, 50, 200, 20)];
[self.view addSubview:progressV];
//用NSTimer來監控音頻播放進度
timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self
selector:@selector(playProgress)
userInfo:nil repeats:YES];
//初始化音量控制
volumeSlider = [[UISlider alloc] initWithFrame:CGRectMake(20, 70, 200, 20)];
[volumeSlider addTarget:self action:@selector(volumeChange)
forControlEvents:UIControlEventValueChanged];
//設置最小音量
volumeSlider.minimumValue = 0.0f;
//設置最大音量
volumeSlider.maximumValue = 10.0f;
//初始化音量爲多少
volumeSlider.value = 5.0f;
[self.view addSubview:volumeSlider];
//聲音開關控件(靜音)
UISwitch *swith = [[UISwitch alloc] initWithFrame:CGRectMake(100, 20, 60, 40)];
[swith addTarget:self action:@selector(onOrOff:) forControlEvents:UIControlEventValueChanged];
//默認狀態爲打開
swith.on = YES;
[self.view addSubview:swith];
}
- (void)play
{
[avAudioPlayer play];
}
- (void)pause
{
[avAudioPlayer pause];
}
- (void)stop
{
avAudioPlayer.currentTime = 0;
[avAudioPlayer stop];
}
- (void)playProgress
{
progressV.progress = avAudioPlayer.currentTime/avAudioPlayer.duration;
}
- (void)onOrOff:(UISwitch *)sender
{
avAudioPlayer.volume = sender.on;
}
- (void)volumeChange
{
avAudioPlayer.volume = volumeSlider.value;
}
//播放完成時調用的方法 (代理裏的方法),須要設置代理才能夠調用
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
[timer invalidate]; //NSTimer暫停 invalidate 使...無效;
NSLog(@"播放結束纔會調用");
}
2、視頻
MPMoviePlayerControlle想要實現視頻播放也得導入庫文件MediaPlayer.framework
//導入頭文件
#import <MediaPlayer/MediaPlayer.h>
// 1.自定義播放視圖的大小
MPMoviePlayerController *_mpPlayerController;
//
// 1.自定義播放界面
//建立播放對象
_mpPlayerController = [[MPMoviePlayerController alloc] initWithContentURL:url];
// 設置播放視圖的大小
_mpPlayerController.view.frame = CGRectMake(20, 20, 320, 140);
//添加的時候要注意_mpPlayerController.view
[self.view addSubview:_mpPlayerController.view];
}
// 播放
[_mpPlayerController play];
代碼:
// 彈出播放
Broadcast = [UIButton buttonWithType:UIButtonTypeRoundedRect];
Broadcast.frame = CGRectMake(150, 170, 100, 100);
Broadcast.tintColor = [UIColor redColor];
[Broadcast setTitle:@"播放" forState:UIControlStateNormal];
[Broadcast addTarget:self action:@selector(begingAction:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:Broadcast];
// 暫停
Broadcast1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
Broadcast1.frame = CGRectMake(150, 260, 100, 100);
Broadcast1.tintColor = [UIColor redColor];
[Broadcast1 setTitle:@"暫停" forState:UIControlStateNormal];
[Broadcast1 addTarget:self action:@selector(begingAction1:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:Broadcast1];
// 中止
Broadcast2 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
Broadcast2.frame = CGRectMake(150, 360, 100, 100);
Broadcast2.tintColor = [UIColor redColor];
[Broadcast2 setTitle:@"中止" forState:UIControlStateNormal];
[Broadcast2 addTarget:self action:@selector(begingAction2:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:Broadcast2];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(exitFullScreen:) name: MPMoviePlayerDidExitFullscreenNotification object:nil];
}
-(void)begingAction:(UIButton *)beging
{
if (_mpPlayerController == nil){
// 1.自定義播放界面
NSURL *url = [NSURL URLWithString:@"
http://vf1.mtime.cn/Video/2012/04/23/mp4/120423212602431929.mp4"];
_mpPlayerController = [[MPMoviePlayerController alloc] initWithContentURL:url];
// 設置播放視圖的大小
_mpPlayerController.view.frame = CGRectMake(20, 20, 320, 140);
[self.view addSubview:_mpPlayerController.view];
}
// 播放
[_mpPlayerController play];
}
-(void)begingAction1:(UIButton *)beging1
{
[_mpPlayerController pause];
}
-(void)begingAction2:(UIButton *)beging2
{
[_mpPlayerController stop];
_mpPlayerController = nil;
}
-(void)exitFullScreen:(NSNotification *)notification{
[mpc.view removeFromSuperview];
NSLog(@"remove player");
}
@end