iOS 之多媒体

一. 音频

iOS中共有四种专门播放音频的方式
1.System Sound Services (系统声音服务)
2.OpenAL(夸平台的开源的音频处理接口)
3.Audio Queue Services(播放和录制音频服务)
4.AVAudioPlayer(高级音频播放器)

  • System Sound Services

1.声音小于30s;
2.格式为IMA4(wav);
3.不能控制播放进度;
4.调用方法后立即播放;
5.没有循环播放与立体声播放
示例代码:

-(void)soundService {
    // 找到少于30秒的音频文件(必须为wav格式)
    NSString *urlStr = [[NSBundle mainBundle] pathForResource:@"1" ofType:@"wav"];
    // 转换成为url对象
    NSURL *url = [NSURL fileURLWithPath:urlStr];
    // 设置播放音乐的ID号,范围在1000~2000之内.
    SystemSoundID soundID;
    // 根据歌曲路径创建ID
    AudioServicesCreateSystemSoundID((__bridge CFURLRef _Nonnull)(url), &soundID);
    // 系统自动播放音乐
    AudioServicesPlayAlertSound(soundID);
}
  • OpenAL
  • Audio Queue Services
  • AVAudioPlayer

AVAudioPlayer:是一个高级播放器,可以播放较多格式的音频文件.
优势:
1.支持更多的格式;
2.可以播放任意长度的音频文件;
3.支持循环播放;
4.可以同步播放多个音频文件;
5.控制播放进度以及从音频的任意一点开始播放.
注意:AVAudioPlayer是在AVFoundation框架下,工程使用中必须手动导入此框架.并且引入头文件#import
示例代码:

-(void)soundAVAudioPlayer {
    // 得到音频资源 (此处使用的文件为iPhone.mp3)
    NSString *soundStr = [[NSBundle mainBundle] pathForResource:@"iPhone" ofType:@"mp3"];
    NSURL *url = [NSURL fileURLWithPath:soundStr];
    // 初始化播放器对象
    self.myAudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
    // 设置声音大小
    self.myAudioPlayer.volume = 1.0; // 声音取值0.0~1.0
    // 设置播放次数,如果为负数为循环播放
    self.myAudioPlayer.numberOfLoops = -1;
    // 初始播放时间
    self.myAudioPlayer.currentTime = 0;
    // 播放音乐
    [self.myAudioPlayer play];
}

二. 视频

  • AVPlayer(在AVFoundation框架下)用来实现播放视频的类.

AVPlayer与AVAudioPlayer类似,AVPlayer可以用来播放音频也可以用来播放视频,并且AVPlayer可以直接播放网络音频.

  • AVPlayer的使用步骤:

1.导入头文件
2.获取播放的地址,转换成为URL对象
3.根据获取的URL对象创建AVPlayerItem对象,AVPlayerItem对象可以获取当前的视频信息,播放时间,总时长等.
4.通过AVPlayerItem对象初始化AVPlayer对象
5.初始化一个AVPlayerLayer对象并指定AVPlayer
6.设置AVPlayerLayer的大小
7.将AVPlayerLayer添加到显示的View上
8.开始播放
示例代码:

-(void)loadAVPlayer {
    // 1.得到网络视频地址
    NSString *pathStr = @"http://baobab.wdjcdn.com/1455782903700jy.mp4";
    NSURL *url = [NSURL URLWithString:pathStr];
    // 2.构建播放单元
    self.item = [[AVPlayerItem alloc] initWithURL:url];
    // 3.初始化播放器
    self.myAVPlayer = [[AVPlayer alloc] initWithPlayerItem:self.item];
    // 4.构建播放界面(指定哪个播放器)
    self.playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.myAVPlayer];
    // 5.指定播放界面的大小
    self.playerLayer.frame = self.view.layer.frame;
    // 6.添加layer
    [self.view.layer addSublayer:self.playerLayer];
    // 7.播放
    [self.myAVPlayer play];
}

获取视频的总时长的时候,需要通过计算可得:
通过AVPlayerItem的Duration结构体中的value值(为视频的总帧数)除以AVPlayerItem的Duration结构体中的timeScale(播放一帧需要的时间)即可以得出视频的总时长
而获取当前播放的时间与其类似获取AVPlayerItem的currentTime结构体中的value值(为当前播放的帧数)除以AVPlayerItem的currentTime结构体中的timeScale(播放一帧所需要的时间)即可以得出视频当前播放的时间.
让视频从指定的时间开始播放:

// Time为CMTime类型,Block中的参数是用来判断是否完成视频的播放.
[self.myAVPlayer seekToTime:(CMTime) completionHandler:^(BOOL finished) {
    }]

你可能感兴趣的:(iOS 之多媒体)