(二)FFmpeg 简介及iOS端交叉编译

2020-12-23 09:57:49 浏览数 (1)

FFmpeg,作为全世界音视频开发者都要掌握的神器,移动端学习音视频开发,FFmpeg可以说是必学的框架,FFmpeg在linux平台下开发,但它同样也可以在其他操作系统环境中编译运行,包括Windows、Mac OS X等。FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序,它包括了目前领先的音/视频编码库libavcodec。

FFmpeg强大的能力

FFmpeg有非常强大的功能,包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,支持直播应用。

安装方式

可以通过如下两种方式安装FFmpeg

  • 1.下载iOS版本FFmpeg静态库: 即不用手动编译,我们只需要下载得到头文件及.a库文件.
  • 2.手动编译: 下载源码, 可以在更改一些flag或源码后再编译脚本,较为灵活.

如果仅仅是想简单直接使用FFmpeg可以下载一个稳定版本的静态库, 建议用第一种方式,如果需要在iOS项目中自定义使用FFmpeg,以及修改一些FFmpeg中的源码以适应项目,使用第二种方式。

必备知识

  • 基本终端命令行
  • FFmpeg基础

ffmpeg的常用库 Left Aligned Center Aligned ffmpeg 一个命令行工具,用来对视频文件转换格式,也支持对电视卡即时编码 ffserver 一个HTTP多媒体即时广播流服务器,支持时光平移 ffplay 一个简单的播放器,基于SDL与FFmpeg库 libavcodec 包含全部FFmpeg音频/视频编解码库 libavformat 包含demuxers和muxer库 libavutil 包含一些工具库 libpostproc 对于视频做前处理的库 libavutil 包含一些工具库 libswscale 对于视频作缩放的库

编译FFmpeg

  • 下载FFmpeg-iOS编译脚本,目前已经更新支持到FFmpeg4.1
  • 下载FFmpeg
代码语言:javascript复制
注意: 在这里可以仅下载FFmpeg-iOS编译脚本,不用下载源码,执行脚本会自动下载源码,如果不想每次自动下载,可以手动下载源码,稍微修改下FFmpeg编译脚本即可.这里不做过多说明.
  • 编译说明 上文编译脚本的仓库中,明确要求编译脚本需要的安装项: yasm 1.2.0 gas-preprocessor

你可以自己安装,也可以完全不管,在编译脚本里面有对yasm和gas-preprocessor的支持判断,没有该环境会自动下载并配置。

使用方法:

代码语言:javascript复制
Use build-ffmpeg-tvos.sh for tvOS.

To build everything:
  ./build-ffmpeg.sh

To build arm64 libraries:
  ./build-ffmpeg.sh arm64

To build fat libraries for armv7 and x86_64 (64-bit simulator):
  ./build-ffmpeg.sh armv7 x86_64

To build fat libraries from separately built thin libraries:
  ./build-ffmpeg.sh lipo

也强调了在集成FFmpeg时额外需要的依赖库:

  • libz.tdb
  • libbz2.tdb
  • libiconv.tdb

编译

按照实际需要修改配置。支持的版本越多,项目的安装包将越大。

代码语言:javascript复制
Tips:
FFmpeg 提供有自己的编解码库,封装了codec层,但是有一些codec是具备自己的License,FFmpeg不会默认集成,例如libx264、FDK_AAC、LAME等,但是FFmpeg就像一个平台,可以将其他的第三方codec以插件的形式添加进来,然后为开发者提供统一的接口。

如有需要集成libx264的同学单独Q我,就没传到git上。

iOS项目集成FFmpeg

  • 编译功后,会生成FFmpeg-iOS文件,将该文件直接拖到项目中。
  • 配置头文件搜索路径,在工程文件->Bulid Setting->Search Paths->Header Search Paths添加
代码语言:javascript复制
$(SRCROOT)/$(PRODUCT_NAME)/FFmpeg-iOS/include,(请根据自己实际路径更改)
  • 添加依赖库 libz.tdb、libbz2.tdb、libiconv.tdb 以及FFmpeg 使用到的CoreMedia.framework、AVFoundation.framework、VideoToolbox.framework、AudioToolbox.framework库

FFmpeg依赖.png

参考:

  • FFMPEG环境搭建
  • iOS开发 iOS集成FFmpeg及视频格式转码

使用FFmpeg

正如开篇就提到的,强大的FFmpeg提供了视频采集功能、视频格式转换、视频抓图、给视频加水印等。同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,支持直播应用。

下一章,我将从FFmpeg的使用开始讲起,包括API调用和Tool调用。


如果喜欢,请帮忙点赞。支持转载,转载请附原文链接。

0 人点赞