IOS流媒体研究— 前言

 一、概述
本系列主要分析iOS平台上音视频的录制、播放,以及音视频的文件格式封装、编码、解码和转码。
涉及到的音频编码格式主要是PCM和MPEG-4 AAC LC,音频文件格式主要是M4A,可能会(尽量不)提提CAF、ALAC、MP3、M4P、WAV、WMA、OGG(OGA)等;涉及到的视频编码格式主要是H.264/MPEG-4 AVC,视频文件格式主要是MP4、HLS(M3U8/TS),可能会(尽量不)提提FLV(RTMP)、RTSP(RTP/RTCP)等。
参考或用到了一些开源库,基于C/C++的主要有FFmpeg、x264、FAAC、FAAD2、VLC等;基于Objective-C的有EncoderDemo、AVCam、KxMovie、VideoCore、iOS-h264Hw-Toolbox、VideoToolBoxPlus、GPUImage等。
注:术语包括:编码、解码、转码、编码器、解码器、转码器、音频编码格式、音频文件(容器/封装)格式、视频编码格式、视频文件(容器/封装)格式等。

二、Audio
本系列会用到的与iOS音频相关的框架或第三方库包括但不限于:
1、iOS框架 
MediaPlayer, AudioToolbox, AudioUnit, AVFoundation, AVKit, OpenAL。其中MediaPlayer,AVFoundation是基于Objective-C/Swift的;AudioToolBox、AudioUnit和OpenAL是基于C的。
2、第三方库
FFmpeg,FAAC,FAAD2。使用MediaPlayer框架的MPMusicPlayerController播放音频文件。使用AudioToolbox框架的System Sound Services播放音频文件、Audio Queue Services录制和播放音频数据、Audio Converter Services进行音频转码(格式、bit-depth和采样率)、Audio File Services和AudioFileStream读写音频文件。使用AudioUnit框架进行回音消除、音频数据录制和播放等。使用AVFoundation框架的AVAudioSession操作音频会话、AVAudioFile(iOS8)读写音频文件、AVAudioRecorder录制音频文件、AVAudioPlayer和AVPlayer播放音频文件、AVCaptureSession录制音频和视频数据。在iOS8及以后使用AVFoundation框架的AVAudioEngine更容易实现AudioUnit的目的。在iOS8及以后可以使用AVKit框架的AVPlayerController播放音频文件或流。使用FAAC将PCM软编码为MPEG-4 AAC LC。使用FFmpeg或FAAD2将MPEG-4 AAC LC软解码为PCM、PCM重采样(Resample)。
iOS支持录制的音频格式和编码器如下,其他音频格式和编码器可通过第三方库实现:Audio decoder/playback formatHardware-assisted decodingSoftware-based decodingAAC(MPEG-4 Advanced Audio Coding) , starting in iOS 3.0ALAC(Apple Lossless)  starting in iOS 3.0  HE-AAC(MPEG-4 High Efficiency AAC)
iLBC (internet Low Bitrate Codec, another format for speech
IMA4 (IMA/ADPCM)
Linear PCM(uncompressed, linear pulse-code modulation)
MP3(MPEG-1 audio layer 3) starting in iOS 3.0
µ-lawanda-law

iOS支持AAC、ALAC、HE-AAC、MP3的硬解码,且只支持HE-ACC的硬解码。
(摘自:Multimedia Programming Guide)
附:

(iOS音频框架)

(iOS核心音频架构 摘自:Core Audio Overview)

(Core Audio的三层API 摘自:Core Audio Overview)
三、Video
本系列会用到的与iOS视频相关的框架或第三方库包括但不限于:
1、iOS框架
UIKit, MediaPlayer, AVFoundation, AVKit, VideoToolBox, GLKit(OpenGL ES)。其中UIKit, MediaPlayer, AVFoundation和AVKit基于Objective-C;VideoToolBox和GLKit基于C。当然,GLKit远远不只是可以渲染视频。
2、第三方库
FFmpeg, x264。
使用UIKit框架的UIImagePickerController录制包含音频的视频文件、UIVideoEditorController可对视频进行简单编辑。
使用MediaPlayer框架的MPMoviePlayerViewController(MPMoviePlayerController/MPMoviePlayer)播放视频文件或流。
使用AVFoundation框架的AVPlayer播放视频文件或流、AVCaptureSession录制视频帧。
在iOS8之前使用AVFoundation框架的AVAssetWritter将YUV视频数据硬编码为H.264。
在iOS8及以后使用VideoToolBox框架将YUV视频数据硬编码为H.264,以及将H.264硬解码为YUV视频数据。
在iOS8及以后可以使用AVKit框架的AVPlayerController播放视频文件或流。
使用GLKit将sRGB或YUV视频数据渲染输出到屏幕。
使用FFmpeg将H.264软解码为YUV。
使用x264将YUV视频软编码为H.264。
将会介绍如何将MP4文件解复用,以及在iOS8之前如何将仅包含视频的MP4文件中提取NALUnit(随着iOS8之前的版本市场率下降,也许不会介绍这部分)。还会介绍如何将H.264和MPEG-4 AAC LC封装成MP4和TS等格式。
四、参考及相关源码
FFmpeg
x264
FAAC
FAAD2
TheAmazingAudioEngine
Speex
LAME
EncoderDemo
AVCam
AVPlayerDemo
oalTouch
KxMovie
VideoCore
iOS-h264Hw-Toolbox
VideoToolBoxPlus
GPUImage
VLC
五、参考及相关资料
1、官方资料
a:综合
Audio & Video Starting Point
Multimedia Programming Guide
Core Audio Overview
Audio Session Programming Guide
b.MediaPlayer
Media Player Framework Reference
iPod Library Access Programming Guide
c.Audio Toolbox
Audio Toolbox Framework Reference
Audio Queue Programming Guide
d.Audio Unit
Audio Unit Programming Guide
Audio Unit Hosting Guide For iOS
e.AV Foundation
AV Foundation Framework Reference
AV Foundation Programming Guide
f.编解码及文件格式
CAF File Overview
Core Audio Format Specification
Apple Core Audio Format Specification 1.0
g.WWDC
WWDC 2013 606 : Moving to AVKit and AVFoundation
WWDC 2014 503 : Direct access to media encoding and decoding
2、第三方资料
Learning Core Audio
Audio file format
Comparison of audio coding formats
List of codecs
List of open-source codecs
Comparison of video codecs
Comparison of video container formats
Color space (YUV、sRGB)
objc.io #12 相机与照片
objc.io #23 视频
objc.io #24 音频

你可能感兴趣的:(IOS流媒体研究— 前言)