直播流程简介
前言
FFmpeg是一个强大的音视频编解码第三方框架。FFmpeg采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。现在很多致命的视频软件核心技术都是实用的FFmpeg。他包含了非常先进的音视频编解码库:libavcodec(一款LGPL自由软件编解码库),为了保证搞可移植性和编解码质量,libavcodec里面很多codec都是从头开发的
FFmpeg模块介绍
1、libavformat
用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能。
2、libaccodec
用于各种类型声音/图像编解码。
3、libavutil
包含一些公共的工具函数
4、libswscale
用于视频场景的缩放,色彩映射转换。
5、libpostproc
用于后期的效果处理。
6、ffmpeg
这个项目提供了一个工具,可以用于格式的转换,解码或者即时编码等。
6、ffserver
一个HTTP多媒体即使广播串流服务器。
7、ffplay
一个简单的播放器,使用ffmpeg库解析和编码,通过SDL显示
一、 音频
1)、音频编码
就是将采集的音频数(例如PCM)压缩成为音频编码流,从而降低音频的数据传输量。目前常见的音频编码方式主要有:AAC,AC-3.MP3,WMA等;
2)、Speex
语音对话编解码开源软件,可以再任何开源软件中运行
3)、Core Audio
Core Audio 是iOS和 MAC 的关于数字音频处理的基础,它提供应用程序用来处理音频的一组软件框架,所有关于IOS音频开发的接口都是由Core Audio来提供或者经过它提供的接口来进行封装的,按照官方的说法是集播放、音频处理、录制为一体的专业技术,通过它我们的程序可以同时录制,播放一个或者多个音频流,自动适应耳机,蓝牙耳机等硬件,响应各种电话中断,静音,震动等,甚至提供3D效果的音乐播放;通过音频API,可以实现流式音频。
更高级的API例如:OpenAL(使用OpenAL将最大限度的减少这种延时,提供最佳播放效率。)、Cocos2d
二、 视频
1)、封装格式
目前主要有以下封装格式:AVI,MP4,TS,FLV,MKV,RMVB等.
2)、视频编码
主流的视频编码主要有:H.265,H.264,MPEG4,MPEG2,VP8,VP9,VC-1
3)、AVFoundation
播放和创建实时的视听媒体的框架
三、 RTMP
RTMP协议是一个互联网TCP/IP五层体系结构中应用层的协议。RTMP协议中基本的数据单元称为消息(Message)。当RTMP协议在互联网中传输数据的时候,消息会被拆分成更小的单元,称为消息块(Chunk)。
四、 HLS
HTTP Live Streaming(HLS)是苹果公司(Apple Inc.)实现的基于HTTP的流媒体传输协议,可实现流媒体的直播和点播,主要应用在iOS系统,为iOS设备(如iPhone、iPad)提供音视频直播和点播方案。HLS点播,基本上就是常见的分段HTTP点播,不同在于,它的分段非常小。要实现HLS点播,重点在于对媒体文件分段,目前有不少开源工具可以使用。
- 采集视频源和音频源的数据
- 对原始数据进行H264编码和AAC编码
- 视频和音频数据封装为MPEG-TS包
- HLS分段生成策略及m3u8索引文件
- HTTP传输协议
主要针对用户接口、应用程序
推流器
推流器的作用就是将本地的视频数据推送至流媒体服务器。本文记录的推流器,可以将本地的 MOV / AVI / MKV / MP4 / FLV 等格式的媒体文件,通过流媒体协议(例如RTMP,HTTP,UDP,TCP,RTP等等)以直播流的形式推送出去。由于流媒体协议种类繁多,不一一记录。在这里记录将本地文件以RTMP直播流的形式推送至RTMP流媒体服务器(例如 Flash Media Server,Red5,Wowza等等)的方法