iOS 多媒体

1、音频

在iOS开发中,主要使⽤用四种⽅式来播放音频:php

  • System Sound Services (系统声音服务)
  • AVAudioPlayer (高级音频播放器) : 只能播放一个完整的音频, 彻底下载好的
  • AVPlayer(负责视频操做,例如播放,暂停,声音大小,跳到指定时间)
  • Audio Queue Services (播放和录制音频服务)
  • OpenAL(跨平台的开源的音频处理接口)

1.1 System Sound Services(系统声音服务)

System Sound Services是最底层也是最简单的声音播放服务, 经过调用AudioServicesPlaySystemSound 这个函数就能够播放一些简单的音频文件缓存

使用场景 : 适合播放一些很小的提示或者警告音网络

局限性:session

一、声音长度小于30秒框架

二、格式 : IMA4, WAVless

三、不能控制播放的进度iphone

四、调用方法后当即播放声音ide

五、没有循环播放和立体声音播放函数

OpenAL : 跨平台的开源音频处理借口ui

优点:

支持更多的格式

能够播听任意长度的音频

支持循环播放

能够同步播放多个音频文件

控制播放进度以及从音频的任意一点开始播放

- (void)playSystemAudio
{
    // 系统声音ID列表http://iphonedevwiki.net/index.php/AudioServices
    // 直接播放系统指定ID的声音
    // AudioServicesPlaySystemSound(1002);
    
      SystemSoundID soundID;

    //用NSBundle来返回音频文件路径
    NSString *path = [[NSBundle mainBundle] pathForResource:@"msg" ofType:@"wav"];
    NSURL *url = [NSURL fileURLWithPath:path];

    //创建SystemSoundID对象,可是这里要传地址(加&符号)。 第一个参数须要一个CFURLRef类型的url参数,要新建一个NSString来作桥接转换(bridge),而这个NSString的值,就是上面的音频文件路径
    // 将本地的声音注册为系统声音
    AudioServicesCreateSystemSoundID((__bridge CFURLRef _Nonnull)(url), &soundID);
    
    // 播放系统声音
    // AudioServicesPlaySystemSound(soundID);
    
    // 播放提示音,带震动
    AudioServicesPlayAlertSound(soundID);
    
}

1.2 AVAudioPlayer (高级音频播放器)

使⽤用简单方便,但只能播放本地音频,不支持流媒体播放。⽀持的⾳频格式有:

AAC
AMR(AdaptiveMulti-Rate, aformatforspeech) ALAC(AppleLossless)
iLBC(internetLowBitrateCodec, anotherformatforspeech) IMA4(IMA/ADPCM)
linearPCM(uncompressed)
μ-lawanda-law
MP3(MPEG-1audiolayer3

AVAudioPlayer不能够播放网络URL,可是能够播放NSData,因此咱们能够经过网络URL去建立NSData,而后在经过AVAudioPlayer来播放NSData,但此法并不可取,由于AVAudioPlayer只能播放一个完整的文件,并不支持流式播放,因此必须是缓冲完才能播放,因此若是网络文件过大抑或是网速不够岂不是要等好久?因此播放网络音频咱们通常用音频队列。

步骤一:AVAudioPlayer 包含在 AVFoundation 框架中,因此开发的时候首先导入音频的框架 AVFoundation.framework

引入头文件

#import <AVFoundation/AVFoundation.h>

步骤二:

建立一个AVAudioPlayer之后你就能够对它的各类属性进行访问或设置了 。 

- (AVAudioPlayer *)audioPlayer
{
    if (!_audioPlayer) {
        
        // 设置后台播放,先要在info.plist 文件中添加 Required background modes项而且添加item: App plays audio or streams audio/video using AirPlay
        AVAudioSession *session = [[AVAudioSession alloc] init];
        [session setActive:YES error:nil];
        [session setCategory:AVAudioSessionCategoryPlayback error:nil];
        //从budle路径下读取音频文件
        NSString *path = [[NSBundle mainBundle] pathForResource:@"贰佰-狗日的青春" ofType:@"mp3"];
        //把音频文件转换成url格式
        NSURL *url = [NSURL fileURLWithPath:path];
        _audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
        //设置代理
        _audioPlayer.delegate = self;
        //设置最大音量
        self.progressView.maximumValue = _audioPlayer.duration;
         //音量  0.0 ~ 1.0 之间
        _audioPlayer.volume = 0.5;
        //预播放
        [_audioPlayer prepareToPlay];
        
        [self showAudioInfo];
    }
    
    return _audioPlayer;
}

 

1.3 AVPlayer

iOS4.0之后,可使用AVPlayer播放本地音频和支持流媒体播放,但提供接口较

少,处理音频不够灵活

- (void)palyerCurrentTime:(NSTimer *)timer
{
    // 获取播放的时间进度:currentTime
    float timeValue = (float)self.player.currentItem.currentTime.value / self.player.currentItem.currentTime.timescale;
    
    NSLog(@"当前时间:%f",timeValue);

    
    // 获取在线播放的媒体加载好的时间: loadedTimeRanges
    NSValue *loadTimeValue = [self.player.currentItem.loadedTimeRanges lastObject];
    CMTimeRange timeRange;
    [loadTimeValue getValue:&timeRange];
    NSLog(@"loadTime:%f",(float)timeRange.duration.value/timeRange.duration.timescale);

}

 

1.4 Audio Queue Services (播放和录制音频服务)

音频队列主要处理流媒体播放,提供了强⼤且灵活的API接口(C函数的接口), 但处理起来也较为复杂

1.5 OpenAL(跨平台的开源的音频处理接口)

最适合开发游戏的音频

OpenAL 包含三个 实体:Listener(听者)、Source(音源)、 Buffer(缓存)

Audio Queue Services 主要用来实现录制音频,为了简化音频文件的处理,一般还须要使用到AudioFileServices

② 开发步骤

1.获取device

2.将context关联到device

3.将数据放入buffer

4.将buffer连接到一个source

5.播放source

功能说明:
简单的实现了播放流式PCM数据的功能

使用方法: (.h文件内也有详细说明)
1. 导入OpenAL.framework
2. alloc/init方法建立对象
3. 调用initOpenAL方法初始化OpenAL
4. 使用insertPCMDataToQueue:size:方法将PCM数据加载到缓冲队列里, 会自动播放
5. 不用的时候, 先调用clean方法关闭OpenAL而后再销毁对象. (不clean的话, 下次初始化会有问题)

2、视频

iOS里面视频播放用的是AVPlayer (包含在AVFoundation框架内) 与AVAudioPlayer有点相似, 可是AVPlayer的功能更增强大, 它能够用来播放音频也能够用来播放视频. 并且在播放音频方面AVPlayer能够直接播放网络音频.

MPMoviePlayerController 与AVAudioPlayer有点相似,前者播放视频,后者播放音频,不过也有很大不一样,MPMoviePlayerController 能够直接经过远程URL初始化,而AVAudioPlayer则不能够。

2、属性设置 

1.控制器样式  

可使用下列样式:  
MPMovieControlModeDefault            显示播放/暂停、音量和时间控制  
MPMovieControlModeVolumeOnly         只显示音量控制  
MPMovieControlModeHidden             没有控制器  
2.屏幕宽高比例  

你可使用下列宽高比值:  
MPMovieScallingModeNone            不作任何缩放  
MPMovieScallingModeAspectFit       适应屏幕大小,保持宽高比  
MPMovieScallingModeAspectFill      适应屏幕大小,保持宽高比,可裁剪  
MPMovieScallingModeFill            充满屏幕,不保持宽高比 

 

 

AVPlayerLayer(负责视频的可视区域,视频的播放模式,注意是CALayer,不能接受触摸)

AVPlayerItem(表示AVPlayer播放的资源对象,能够监听其状态)

3、相机、相册

//使用相机前先断定设备是否能够
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
        
        self.imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;

相机拍照设置

// 是否能够编辑
        self.imagePicker.allowsEditing = YES;
        
        // 修改相机呈现视图的transform
        self.imagePicker.cameraViewTransform  = CGAffineTransformMakeRotation(M_PI_2);
        
        /* 设置摄像头的模式
         UIImagePickerControllerCameraDeviceRear, 后置
         UIImagePickerControllerCameraDeviceFront 前置
         */
        self.imagePicker.cameraDevice = UIImagePickerControllerCameraDeviceRear;
        
        // 设置闪光灯,默认自动
        self.imagePicker.cameraFlashMode = UIImagePickerControllerCameraFlashModeOff;

摄影设置

// 媒体类型
        self.imagePicker.mediaTypes = @[(NSString *)kUTTypeMovie];
        // 相机模式为 video
        self.imagePicker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModeVideo;
        // 视频的质量
        self.imagePicker.videoQuality = UIImagePickerControllerQualityType640x480;
        
        [self presentViewController:self.imagePicker animated:YES completion:NULL];
    } else {
        
        NSLog(@"相机不可用!");
    }
相关文章
相关标签/搜索