标签:
一、音频
1、iOS 里面共有四种专门实现播放音频的方式:
2、System Sound Services
#import "ViewController.h" //引入头文件 #import <AudioToolbox/AudioToolbox.h> @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } #pragma mark - 播放音乐 - (IBAction)playAction:(id)sender { //得到的主要应用程序包 CFBundleRef mainBundle; SystemSoundID soundFileObject; mainBundle = CFBundleGetMainBundle (); //声音文件的URL CFURLRef soundFileURLRef = CFBundleCopyResourceURL (mainBundle,CFSTR ("蔡琴 - 爱断情伤"),CFSTR ("wav"),NULL); //注册声音到系统 AudioServicesCreateSystemSoundID (soundFileURLRef,&soundFileObject); // AudioServicesAddSystemSoundCompletion 方法为音频播放添加 CallBack 函数,有了 CallBack 函数我们可以解决不少问题,比如可以克服 System Sound Services 本身不支持循环播放的问题。 AudioServicesAddSystemSoundCompletion (soundFileObject, NULL , NULL ,&completionCallback,(__bridge void *) self ); //播放注册的声音,(此句代码,可以在本类中的任意位置调用,不限于本方法中) AudioServicesPlaySystemSound(soundFileObject); //让手机震动 // AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); } static void completionCallback (SystemSoundID ssID, void* clientData) { // Play again after sound play completion NSLog(@"播放完成-传入ID为-%u,传入的参数为%@", (unsigned int)ssID, clientData); AudioServicesPlaySystemSound(ssID); } void playFinished(SystemSoundID ssID, void* clientData) { // unsigned long ID = ssID; // ssID 不能直接作为参数打印出来,需要中转一次 NSLog(@"播放完成-传入ID为-%u,传入的参数为%@", (unsigned int)ssID, clientData); AudioServicesPlaySystemSound(ssID); // 移除完成后执行的函数 // AudioServicesRemoveSystemSoundCompletion(ssID); // 根据ID释放自定义系统声音 // AudioServicesDisposeSystemSoundID(ssID); } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
3、AVAudioPlayer:是一个高级的播放器,它支持广泛的音频格式,如下:
4、AVAudioPlayer的优势:
5、开发步骤:
二、视频
1、AVPlayer
iOS 里面视频播放用到的是AVPlayer(包含在AVFoundation框架内)与AVAudioPlayer有点类似,但是AVPlayer的功能更加强大,它可以用来播放音频也可以用来播放视频。而且在播放音频方面 AVPlayer 可以直接播放网络音频。
2、开发步骤
#import "ViewController.h" #import <AVFoundation/AVFoundation.h> #import <AVKit/AVKit.h> @interface ViewController () /// 控制视频播放的控件 @property (weak, nonatomic) IBOutlet UISlider *progressSlider; /// 声明播放视频的控件属性(也可以用于播放音频) @property (nonatomic, strong) AVPlayer *player; /// 播放的总时长 @property (nonatomic, assign) CGFloat sumPlayOperation; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. // 设置播放的url NSString *playString = @"http://static.tripbe.com/videofiles/20121214/9533522808.f4v.mp4"; NSURL *url = [NSURL URLWithString:playString]; // 设置播放的项目 AVPlayerItem *item = [[AVPlayerItem alloc] initWithURL:url]; // 初始化player对象 self.player = [[AVPlayer alloc] initWithPlayerItem:item]; // 设置播放页面 AVPlayerLayer *layer = [AVPlayerLayer playerLayerWithPlayer:self.player]; // 设置播放页面的大小 layer.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 300); // 设置背景颜色 layer.backgroundColor = [UIColor cyanColor].CGColor; // 设置播放窗口和当前视图之间的比例显示内容 layer.videoGravity = AVLayerVideoGravityResizeAspect; // 添加播放视图到self.view上 [self.view.layer addSublayer:layer]; // 设置播放进度的默认值 self.progressSlider.value = 0; // 设置播放的默认音量值 self.player.volume = 1.0f; } #pragma mark - 开始播放 - (IBAction)startPlayer:(id)sender { [self.player play]; } #pragma mark 停止播放 - (IBAction)stopPlayer:(id)sender { [self.player pause]; } #pragma mark 改变播放进度 - (IBAction)changePlaye:(id)sender { self.sumPlayOperation = self.player.currentItem.duration.value / self.player.currentItem.duration.timescale; // 第一个参数是:当前时间 // 第二个参数是:每秒钟有都少帧 [self.player seekToTime:CMTimeMakeWithSeconds(self.progressSlider.value * self.sumPlayOperation, self.player.currentTime.timescale) completionHandler:^(BOOL finished) { [self.player play]; }]; }
3、视频下载
标签:
原文地址:http://www.cnblogs.com/soley/p/5532775.html