IOS 多媒体 使用总结

一、音频播放

1.音效播放(短时间的音频文件)
1> AudioServicesCreateSystemSoundID
2> AudioServicesPlaySystemSound

2.音乐播放(长时间的音频文件)
1> AVAudioPlayer
只能播放本地的音频文件

2> AVPlayer
能播放本地、远程的音频、视频文件
基于Layer显示,得自己去编写控制面板

3> MPMoviePlayerController
能播放本地、远程的音频、视频文件
自带播放控制面板(暂停、播放、播放进度、是否要全屏)

4> MPMoviewPlayerViewController
能播放本地、远程的音频、视频文件
内部是封装了MPMoviePlayerController
播放界面默认就是全屏的
如果播放功能比较简单,仅仅是简单地播放远程、本地的视频文件,建议用这个

实例:AVPlayer  MPMoviePlayerController, MPMoviewPlayerViewController 本地视频播放

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];
}

时间: 2024-08-10 05:21:17

IOS 多媒体 使用总结的相关文章

史上最全的iOS多媒体开发博客

这篇博客是史上最全的iOS多媒体开发博客,包括视频.音频.图片等多套API,如果要实现多媒体的功能,点进去找找有用的东西吧:http://www.cnblogs.com/kenshincui/p/4186022.html#autoid-0-0-0..

(转载)iOS 多媒体

音频:(音效.音乐) 在iOS中音频播放从形式上可以分为音效播放和音乐播放.前者主要指的是一些短音频播放,通常作为点缀音频,对于这类音频不需要进行进度.循环等控制.后者指的是一些较长的音频,通常是主音频,对于这些音频的播放通常需要进行精确的控制.在iOS中播放两类音频分别使用AudioToolbox.framework和AVFoundation.framework来完成音效和音乐播放. 音效: AudioToolbox.framework是一套基于C语言的框架,使用它来播放音效其本质是将短音频注

iOS多媒体框架介绍

媒体层 媒体层包含图形技术.音频技术和视频技术,这些技术相互结合就可为移动设备带来最好的多媒体体验,更重要的是,它们让创建外观音效俱佳的应用程序变得更加容易.您可以使用iOS的高级框架更快速地创建高级的图形和动画,也可以通过底层框架访问必要的工具,从而以某种特定的方式完成某种任务. 图形技术 高质量的图形是iOS应用程序的重要组成部分.创建应用程序最简单最有效的方法是使用事先渲染过的图片,搭配上标准视图以及UIKit框架的控件,然后把绘制任务交给系统来执行.但是在某些情况下,您可能需要一些UIK

iOS 多媒体编程

首先了解一下ios系统的四层结构 1. Core OS   核心操作系统层 2. Core Services  核心服务层 3. Media  媒体层 4. cocoa touch层 Media层就是支持多媒体播放的 ios9以后官方推荐使用AVKit  和AVFoundtion框架来实现视频的播放 - (IBAction)click:(id)sender { //创建播放器控制器 AVPlayerViewController * playerVc = [[AVPlayerViewControl

IOS 多媒体加载 加载音频 AVAudioPlayer

IOS加载音频文件   需要导入#import <AVFoundation/AVFoundation.h> 1 NSString *path = [[NSBundle mainBundle] pathForResource:@"胭脂泪" ofType:@"mp3"]; //把音频文件转换成url格式 2 3 NSURL *urlStr = [NSURL fileURLWithPath:path]; 4 AVAudioPlayer * audioPlaye

IOS多媒体

音乐播放器 1 #import "ViewController.h" 2 3 @interface ViewController () 4 5 @end 6 7 @implementation ViewController 8 9 - (void)viewDidLoad { 10 [super viewDidLoad]; 11 // Do any additional setup after loading the view, typically from a nib. 12 disp

iOS多媒体总结

1. 播放mp3需要导入框架,AVFoundation支持音频文件(.caf..aif..wav..wmv和.mp3)的播放. #import <AVFoundation/AVFoundation.h>//音频播放框架 步骤: a.声明一个音频播放对象: { AVAudioPlayer *_player; } b.用一个支持的文件路径来初始化_player: (据说只能播放本地文件,像酷我等音乐软件应该是播放前下载到本地,然后进行播放的,因为在用酷我时,隔断时间就会提示我内存过大,请清理,应该

IOS 多媒体

一.音频播放 1.音效播放(短时间的音频文件)1> AudioServicesCreateSystemSoundID2> AudioServicesPlaySystemSound 2.音乐播放(长时间的音频文件)1> AVAudioPlayer只能播放本地的音频文件 2> AVPlayer能播放本地.远程的音频.视频文件基于Layer显示,得自己去编写控制面板 3> MPMoviePlayerController能播放本地.远程的音频.视频文件自带播放控制面板(暂停.播放.播

iOS,多媒体相关

1.本地音频播放 2.本地视频播放 本地音频播放 导入头文件 #import <AVFoundation/AVFoundation.h> #import <MediaPlayer/MediaPlayer.h> import "ViewController.h" @interface ViewController () //AVAudioPlayer要为全局变量才能播放 @property (strong,nonatomic) AVAudioPlayer *aud