IOS 音视频FFmpeg 框架分析

一:简单了解FFMpeg 以及他的组成部分

1.什么是FFmpeg?

FFmpeg 即是一款音视频编码工具也是一款音视频编解码开发套件,作为套件为开发者提供了丰富的音视频处理的调用接口

2.FFmpeg的基本组成?

FFmpeg 框架的基本组成包含AVFormat /AVCodec/AVFilter/AVDevice,AVUtil等

(2.1)FFmpeg的封装模块AVFormat

  1. AVFormat 实现了目前大多数媒体的封装格式,包括解封装 和封装,如MP4/FLV/KV/TS等文件封装格式
  2. RMTP/RTSP/MMS/HLS等网络协议封装格式

(2.2)FFmpeg的编解码模块AVCodec

AVCodec既支持编码也支持解码。AVCodec 除了支持MPEG4,AAC 等字嗲的媒体编解码格式外还支持第三方的编解码器,如H.264(AVC)编码,需要使用x264编码器

(2.3)FFmpeg的滤镜AVFilter

3.ffmpeg 是 FFmpeg 源码编译后生成的一个可执行文件

ffmpeg 的主要工作流程比较简单:

1,解封装    2,解码    3,编码     4,封装

具体如下:

1>读取输入源

2>进行音视频的解封装

3>解码每一帧音视频数据

4>编码每一帧音视频

5>进行音视频的重新封装

6>输出目标

4.ffmpeg 的转封装功能包含在AVFormat模块中

通过libavformat 库进行Mux 和Demux 操作。多媒体的文件格式很多,很多参数在Mux / Demux 中的参数都是公用的。

ffmpeg编解码部分的功能主要是通过AVCode来完成通过libavcode库进行的Encode 与Decode操作。

5.FFMpeg系统中如果包含了SDL-1.2就好默认讲ffplay编译处理啊

ffplay作为播放器,也可以作为很多音视频数据的图形化分析工具,通过fffplay 可以看到视频图像的运动估计方向,音频数据的波形等。

ffplay 不仅可以作为播放器,同时也是测试ffmpeg的codec引擎/format引擎以及filter的引擎的工具,还可以进行可视化的媒体参数分析。

6.ffprobe  在FFmpeg套件中  主要用来查看多媒体文件的信息

根据参数的不同,查看每一个音频数据包信息或者视频数据包信息,查看节目信息,流信息,查看每一个流有多少帧以及每一个流有多少音视频包,查看视频像素点的格式。

二:FFmpeg的功能分为媒体格式转封装/音视频编码/传输协议转换/支持filter等。以下是媒体封装格式的详细介绍

2.1 音视频转MP4 格式

音视频转码与音视频转封装的不同之处在于音视频转码会占用大量的计算资源,而转封装则主要是将音频数据或者视频数据取出,然后转而封装成另外一种封装格式,转封装主要占用IO资源,而转码主要占用CPU资源,同时转码也会使用更多的内存资源 

2.2 FFmpeg 流媒体

音视频流媒体又称为“流媒体”,而用于处理流媒体的压缩/录制/编辑操作。FFmpeg就是常见的流媒体处理工具

常见的流媒体协议有RTMP/HTTP/RTSP等协议 

FFmpeg 默认的拉流方式为UDP传输方式,为了避免丢包导致的花屏/绿屏/灰屏/马赛克等问题,可以考虑将UDP传输方式改为TCP传输方式。

在流媒体服务中,HTTP服务最为常见,尤其是点播。直播也支持HTTP服务,例如使用HTTP传输FLV直播流,使用HTTp传输TS直播流或者使用HTTP传输M3U8 及TS文件

FFmpeg 进行编码消耗的资源比较多,转封装则相对较少,很多时候只需要转一次编码并且输出多个封装。早期的FFmpeg 本事不支持这么做(一次转码多次输出RTMP流等操作),而是通过系统管道的方式进行操作 另外一种方式就是通过tee封装格式输出多路流。

2.3 filter 滤镜

视频添加水印/图片,还可以对音频流滤镜进行操作,如拆分声道,合并多声道,音视频的拆分和合并。

2.4  设备采集

FFMpeg 作为编码器时,可以使用FFmpeg采集本地的音视频采集设备的数据,然后进行编码,封装。传输等操作。比如说 我们可以采集摄像头的图像作为视频,采集麦克风的数据作为音频,然后对采集的音视频数据进行编码,最后将编码后的数据分装成多媒体文件或者作为音视频流发送到服务器上(流媒体);

linux 下 图形图像中,FrameBuffer 专门用于图像展示。 v412 设备主要采集摄像头,摄像头通常指吹多种像素格式。

猜你喜欢

转载自blog.csdn.net/qq_33726122/article/details/91975728