iOS 中播放多媒体的那些类库

Library

iOS开发中,如果需要多媒体(音频、视频)播放,可以借助Cocoa Touch frameworks中的以下两个Library进行播放:

  • MediaPlayer.framework
  • AVFoundation.framework

这两个Library之间的关系下AV Foundation Guide,如下图:

MediaPlayer则是基于AVFoundation之上,提供了基本的UI和更多的属性和通知,使用起来比较方便。(SlideGallary在第一版时用的就是这个Lib,但并未使用它提供的UI Controls)。

AVFoundation更底层,未提供UI,提供的方法颗粒较大,如addPeriodicTimeObserverForInterval(_:queue:usingBlock:),会需要自己来写更多的方法。

关于这两个库之前更多的介绍,见AVFoundation vs MediaPlayer

Audio APIs

  • MPMusicPlayerController (>3.0)doc
  • AVPlayer (>4.0)doc
  • AVAudioPlayer (>2.2)doc

MPMusicPlayerController 来自于 Media Player

后二个属于AV Foundatioon库,AVAudioPlayer就是图上那个Audio-only classes

区别:

简单的来说AVAudioPlayer只能播放本地音频文件,而AVPlayer即可以播放网络流媒体,也可以播放本地音频。

更多区别:AVPlayer vs. AVAudioPlayer

??

关于为什么Audio会有一个单独的API,不是很清楚,有可能游戏中需要对声音进行更多的处理,像混响,变音之类的。

还可以用AudioStreamer

Video APIs

  • AVPlayer (>4.0)doc
  • MPMoviePlayerController (>2.0)doc

区别

MediaPlayer的影片是放在UIView中,而AVPlayer是放在AVPlayerLayer里,AVPlayerLayerCALayer的子类。

MPMoviePlayerController建立在AVPlayer之上,它能播放本地和网络上的媒体文件,有自己的UI,它还注册了一些消息中心,用于通知当前player一些状态的变化,对于简单的视频播放应用首先该player。

AVPlayer and MPMoviePlayerController differences 对比

Demo

为了理这些关系,写了一个Demo,主要记录了AVPlayer的用法,同时也会有MediaPlayer中Audio, Video的示例。

https://github.com/lanvige/MediaPlayer_iOS

REF::