IOS 多媒体 使用总结
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IOS 多媒体 使用总结相关的知识,希望对你有一定的参考价值。
一、音频播放
1.音效播放(短时间的音频文件)
1> AudioservicesCreateSystemSoundID
2> AudioServicesPlaySystemSound
2.音乐播放(长时间的音频文件)
1> AVAudioPlayer
只能播放本地的音频文件
2> AVPlayer
能播放本地、远程的音频、视频文件
基于Layer显示,得自己去编写控制面板
3> MPMoviePlayerController
能播放本地、远程的音频、视频文件
自带播放控制面板(暂停、播放、播放进度、是否要全屏)
4> MPMoviewPlayerViewController
能播放本地、远程的音频、视频文件
内部是封装了MPMoviePlayerController
播放界面默认就是全屏的
如果播放功能比较简单,仅仅是简单地播放远程、本地的视频文件,建议用这个
实例:AVPlayer MPMoviePlayerController, MPMoviewPlayerViewController 本地视频播放
View Code
5> DOUAudioStreamer
能播放远程、本地的音频文件
监听缓冲进度、下载速度、下载进度
#import "HMViewController.h" #import "HMAudioFile.h" #import "UIView+Extension.h" #define MJStatusProp @"status" #define MJBufferingRatioProp @"bufferingRatio" #import "DOUAudioStreamer.h" @interface HMViewController () /** 播放器 */ @property (weak, nonatomic) IBOutlet UILabel *infoLabel; @property (nonatomic, strong) DOUAudioStreamer *streamer; @property (weak, nonatomic) IBOutlet UIView *positionProgressView; @property (weak, nonatomic) IBOutlet UIView *downloadProgressView; @property (weak, nonatomic) IBOutlet UIView *progressBg; @property (strong, nonatomic) NSTimer *currentTimeTimer; @end @implementation HMViewController #pragma mark - 定时器 - (void)addTimer { self.currentTimeTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateCurrentTime) userInfo:nil repeats:YES]; [[NSRunLoop mainRunLoop] addTimer:self.currentTimeTimer forMode:NSRunLoopCommonModes]; } - (void)removeTimer { [self.currentTimeTimer invalidate]; self.currentTimeTimer = nil; } - (void)viewDidLoad { [super viewDidLoad]; // 创建音频文件模型(提供音频文件路径) HMAudioFile *file = [[HMAudioFile alloc] init]; file.audioFileURL = [NSURL URLWithString:@"http://y1.eoews.com/assets/ringtones/2012/5/18/34045/hi4dwfmrxm2citwjcc5841z3tiqaeeoczhbtfoex.mp3"]; // 创建播放器 self.streamer = [DOUAudioStreamer streamerWithAudioFile:file]; // KVO监听streamer的属性(Key value Observing) [self.streamer addObserver:self forKeyPath:MJStatusProp options:NSKeyValueObservingOptionOld context:nil]; [self.streamer addObserver:self forKeyPath:MJBufferingRatioProp options:NSKeyValueObservingOptionOld context:nil]; // 播放 [self.streamer play]; [self addTimer]; UIWebView *webView; webView.scalesPageToFit = YES; } - (void)dealloc { [self.streamer removeObserver:self forKeyPath:MJStatusProp]; [self.streamer removeObserver:self forKeyPath:MJBufferingRatioProp]; } /** 利用KVO监听的属性值改变了,就会调用 */ - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { dispatch_async(dispatch_get_main_queue(), ^{ if ([keyPath isEqualToString:MJStatusProp]) { // 监听到播放器状态改变了 // NSLog(@"状态改变了----%d", self.streamer.status); } else if ([keyPath isEqualToString:MJBufferingRatioProp]) { // 监听到缓冲比例改变 double unit = 1000.0; // 总长度 double expectedLength = self.streamer.expectedLength / unit / unit; // 已经下载长度 double receivedLength = self.streamer.receivedLength / unit / unit; // 下载速度 double downloadSpeed = self.streamer.downloadSpeed / unit; self.infoLabel.text = [NSString stringWithFormat:@"缓冲:%.2fMB/%.2fMB(%.0f%%)\n下载速度:%.2fKB/s", receivedLength, expectedLength, (receivedLength/ expectedLength) * 100, downloadSpeed]; self.downloadProgressView.width = self.progressBg.width * (receivedLength/ expectedLength); } }); } - (void)updateCurrentTime { self.positionProgressView.width = self.progressBg.width * (self.streamer.currentTime / self.streamer.duration); } // AVAudioPlayer : 只能播放本地的音频文件 // AVPlayer : 能播放远程\本地的音频、视频文件 // MPMoviePlayerController : 能播放远程\本地的音频、视频文件 // MPMoviePlayerViewController : 能播放远程\本地的音频、视频文件 // self.player = [AVPlayer playerWithURL:[NSURL URLWithString:@"http://file.qianqian.com/data2/music/42275287/42275287.mp3?xcode=e41a36a1198cf7f07c498ac14eafd4a5398370073e4f3405"]]; @end
二、视频播放
1.音乐播放中2> 3> 4>
2.VLC
#import "HMViewController.h" #import <MobileVLCKit/MobileVLCKit.h> @interface HMViewController () @property (nonatomic, strong) VLCMediaPlayer *player; @end @implementation HMViewController - (void)viewDidLoad { [super viewDidLoad]; self.player = [[VLCMediaPlayer alloc] init]; // 设置需要播放的多媒体文件 // NSURL *url = [NSURL URLWithString:@"http://streams.videolan.org/streams/mp4/Mr_MrsSmith-h264_aac.mp4"]; NSURL *url = [[NSBundle mainBundle] URLForResource:@"minion_01.mp4" withExtension:nil]; self.player.media = [VLCMedia mediaWithURL:url]; // 设置播放界面的载体 self.player.drawable = self.view; // 播放 [self.player play]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } // NSURL *url = [NSURL URLWithString:@"http://y1.eoews.com/assets/ringtones/2012/5/18/34045/hi4dwfmrxm2citwjcc5841z3tiqaeeoczhbtfoex.mp3"]; // NSURL *url = [NSURL URLWithString:@"http://streams.videolan.org/streams/mp4/Mr_MrsSmith-h264_aac.mp4"]; @end
3.FFmpeg
kxmovie
Vitamio
三、录音
1.AVAudioRecorder
#import "HMViewController.h" #import <AVFoundation/AVFoundation.h> @interface HMViewController () - (IBAction)startRecord; - (IBAction)stopRecord; @property (nonatomic, strong) AVAudioRecorder *recorder; @property (nonatomic, strong) CADisplayLink *timer; @property (nonatomic, strong) NSTimer *stopRecordTimer; /** 静音的持续时间 */ @property (nonatomic, assign) CGFloat slientDuration; @end @implementation HMViewController - (void)viewDidLoad { [super viewDidLoad]; } - (void)addTimer { self.timer = [CADisplayLink displayLinkWithTarget:self selector:@selector(update)]; [self.timer addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes]; } - (void)removeTimer { [self.timer invalidate]; self.timer = nil; } - (void)update { // 更新测试值 [self.recorder updateMeters]; // 如果分贝不超过-20 float power = [self.recorder averagePowerForChannel:0]; if (power <= -20) { // 几乎为静音 self.slientDuration += self.timer.duration; if (self.slientDuration >= 2) { // 停止录音 [self.recorder stop]; } } else { // 有说话 self.slientDuration = 0; } } //- (void)update //{ // // 更新测试值 // [self.recorder updateMeters]; // // // 如果分贝不超过-20 // float power = [self.recorder averagePowerForChannel:0]; // if (power <= -20) { // 几乎为静音 // if (!self.stopRecordTimer) { // self.stopRecordTimer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self.recorder selector:@selector(stopRecord) userInfo:nil repeats:NO]; // } // } else { // 有说话 //// [self.stopRecordTimer invalidate]; //// self.stopRecordTimer = nil; // NSDate *time = [NSDate dateWithTimeIntervalSinceNow:2.0]; // [self.stopRecordTimer setFireDate:time]; // } //} - (IBAction)startRecord { NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; NSString *path = [doc stringByAppendingPathComponent:@"test.caf"]; NSURL *url = [NSURL fileURLWithPath:path]; AVAudioRecorder *recorder = [[AVAudioRecorder alloc] initWithURL:url settings:nil error:nil]; // 缓冲 [recorder prepareToRecord]; // 开启分贝测量功能 recorder.meteringEnabled = YES; // 开始录音 [recorder record]; self.recorder = recorder; // 开启定时器 [self addTimer]; } - (IBAction)stopRecord { // [self.recorder stop]; }
以上是关于IOS 多媒体 使用总结的主要内容,如果未能解决你的问题,请参考以下文章