在IOS设计中,音视频的播放通常涉及到大部分设计过程中,因此清晰了解并使用音视频播放结构就很重要了,下面介绍几种常用的音视频的播放方式:
(一) 使用系统提供的播放器,用system sound service去播放时长小于30s的音乐,通常是.caf,.aif,.wav格式:
创建一个系统播放对象:
AudioServicesCreateSystemSoundID ( CFURLRef inFileURL, SystemSoundID *outSystemSoundID);
AudioServicesPlayAlertSound(self.soundSystemId); // 播放系统铃音
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); //对于支持震动的设备,可以设置震动状态
AudioServicesDisposeSystemSoundID(self.soundSystemId); //非ARC条件下,在完成功能后,需要进行手动销毁(二)
(二) 使用AVAudioPlayer播放文件或者是缓存中的音乐文件:
其特点是:可以播放任意时长;文件地址在本地文件或缓存中;可以实现循环播放;可同时播放多个歌曲并实现同步;可以实现精细化控制。
NSURL *soudFileURL = [[NSBundle mainBundle] URLForResource:@"倩女幽魂" withExtension:@"mp3"]; // 创建一个错误对象, 由于Api接口要求的参数是传出参数, 并且是指针的指针,所以在这里定义为指针对象 NSError *error = nil; self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soudFileURL error:&error]; self.audioPlayer.numberOfLoops = 2; // 如果error值不空,则表示初始化audioPlayer对象失败, 则需要做失败处理 if (error != nil) { NSLog(@"INIT audioplay faile.Error:%@",error); } [self.audioPlayer prepareToPlay]; [self.audioPlayer play];
(三) 使用AVPlayer实现播放音频文件
与以上播放方式的最大区别在于他可以播放本地音乐和远端音乐也就是网络音乐
NSString *strSoundURL = @"http://zhangmenshiting.baidu.com/data2/music/119358766/11794803954000128.mp3?xcode=055849b238ef1d51897273d786699f632c0420de8b6192ff"; NSURL *soundURL = [NSURL URLWithString:strSoundURL]; AVPlayer *player= [[AVPlayer alloc] initWithURL:soundURL];
(四) 使用MPMoviePlayerController播放视频本地或者网络流的视频文件
NSURL *myURL = [[NSBundle mainBundle] URLForResource:@"S6T9U6014" withExtension:@"mp4"]; self.player = [[MPMoviePlayerController alloc] initWithContentURL: myURL]; [self.player prepareToPlay]; [self.view addSubview: self.player.view]; [self.player.view setFrame: self.view.bounds]; [self.player play];
(五)使用MPMoviePlayerViewController来播放本地或者网络流的视频文件
NSURL *myURL = [NSURL URLWithString:@"http://v.youku.com/player/getRealM3U8/vid/XNzA3NzY3MDgw/type/video.m3u8"]; MPMoviePlayerViewController *player = [[MPMoviePlayerViewController alloc] initWithContentURL: myURL]; player.modalTransitionStyle = UIModalTransitionStyleCoverVertical; [self presentViewController:player animated:YES completion:nil];