IOS流媒体研究— 前言
2016-05-12 18:17
411 查看
一、概述
本系列主要分析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平台上音视频的录制、播放,以及音视频的文件格式封装、编码、解码和转码。
涉及到的音频编码格式主要是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 音频
相关文章推荐
- Android实现多媒体录音笔
- Android开发之多媒体文件获取工具类实例【音频,视频,图片等】
- Java常用的一些多媒体文件基本操作方法简介
- iOS多媒体开发
- 让你的网页达到最好的视觉效果
- NDK r7 的新特性
- 校园控制学生共享多媒体解决方案
- 【Anychat】远程医疗——技术、应用、评估和前景
- 【Anychat音视频开发】apache防盗链之mod_perl
- 【Anychat音视频开发】数据库查询速度慢的原因
- 【Anychat音视频开发】相对路径与绝对路径详解
- 【Anychat音视频】音视频编码格式汇总
- 【Anychat音视频】视频直播系统
- AnyChat音视频延迟的详细解析
- 【Anychat音视频开发平台】视频直播平台
- AnyChat对音视频设备有何要求?
- FFmpeg音视频编解码实践总结
- 音视频开发sdk包使用经验
- 音视频解决方案的使用问题集锦
- 安卓平台的音视频即时通讯