FFmpeg项目初探学习笔记

FFmpeg是广泛使用于的多媒体解决方案,是一个自由软件项目的名称,采用LGPL或GPL许可证。它提供了录制/转换以及流化音视频的完整解决方案。包含非常先进的音频/视频编解码库libavcodec。为了保证高可移植性和编解码质量,libavcodec里很多代码都是新开发的。“FFmpeg”这个词中的“FF”指的是“Fast Forward”,而“mpeg”指的是一种压缩率比较大的活动图像和声音的压缩标准。

一.FFmpeg简介:

命令行工具概述(Command Line Tool Documentation):

ffmpeg -i input.avi -r 24 output.avi

以上可以把input.avi中的帧率变成24,输出的output.avi就是24fps的视频。

  • ffmpeg:包含FFmpeg的各种功能,如gif/格式转换/截图/编解码等;
  • ffmpeg-all:包含FFmpeg工具及FFmpeg组件;
  • ffplay:一个使用FFmpeg和SDL库的/简单的/可移植性的媒体播放器。
  • ffplay-all:包含ffplay工具及FFmpeg组件;
  • ffporbe:用来查看多媒体文件的信息;
  • ffporbe-all:包含ffprobe工具及FFmpeg组件;
  • ffserver:与流媒体服务器相关,负责响应客户端的流媒体请求,把流媒体数据发送给客户端;
  • ffserver-all:包含ffserver工具及FFmpeg组件。

组件概述(Componets Documentation):

  • Utilities:libavutils提供的通用的features及工具;
  • Video scaling and pixel format converter:视频缩放和缩放像素格式转换器;
  • Audio resampler:音频重新取样;
  • Encoders and decoder(codecs):编码和解码;
  • Bitstream filters:码流过滤器;
  • Muxers and demuxers(formats):数据合成及数据分离;
  • Protocols:协议;
  • Input and output devices:输入和输出设备;
  • Filters:过滤器。

类库概述(Libraries Documentation):

  • libavutil:包含一些公共的工具函数的使用库,包含算术运算/字符操作等;
  • libswscale:(原始视频格式转换)用于视频场景比例缩放/色彩映射转换/图像颜色空间或格式转换,如RGB565/RGB888等与YUV420等之间的转换;
  • libswresample:原始音频格式转码;
  • libavcodec:用于各种类型声音/图像编解码,该库是音视频编解码核心库,实现了市面上可见绝大部分编解码器的功能;
  • libavformat:用于各种类型音视频封装格式的生成和解析,包含获取解码核心库所需信息以生成解码上下文结构和读取音视频帧的功能,音视频的格式解析协议,为libavcodec分析码流提供独立的音频或视频码流源;
  • libavdevice:硬件采集/加速/显示。操作计算机中常用的音视频捕捉或输出设备有ALSA/AUDIO_BEOS/JACK/OSS/1394/VFW等;
  • libfilter:filter(FileIO/FPS/DrawText)音视频铝箔器的开发,如宽高比/裁剪/格式化/非格式化/伸缩等。

 

二.FFmpeg源码目录结构:

 

对照FFmpeg-3.1.3补充如下两个库:

  • libavresample:音视频封装编解码格式预设等;
  • libpostproc:(同步/时间计算的简单算法)用于后期效果处理,音视频应用的后处理,如图像的去块效应。

文件概述(General Documentation):

  • Frequently Asked Questions:常见问题;
  • Supported External Libraries,Formats ,Codecs or Features:支持扩展库/格式/编解码或特性;
  • Platform Specific Information:平台具体信息;
  • Developer Documentation:开发者概述;
  • Git How-To:Git;
  • FFmpeg Automated Testing Environment:FFmpeg自动化测试环境。

 

三.在Mac OS下编译FFmpeg(摘自何俊林android音视频开发一书):

下载源码及配置环境变量:

FFmpeg下载地址,选择Mac OS下载。解压后如下图

下载NDK安装包,并配置NDK环境:

  • 启动终端Terminal;
  • 进入当前用户的home目录(输入cd ~ 或/User/YourUserName);
  • 创建.bash_profile文件(输入touch .bash_profile);
  • 编辑.bash_profile文件(输入open -e .bash_profile);

  • 在.bash_profile中配置NDK及SDK的开发环境,需要输入Mac OS下的NDK的目录:

  • 保存文件,关闭 .bash_profile。更新刚配置的环境变量,输入source.basd_profile。并查看刚刚配置设置的环境变量,离开编辑器后在终端输入$PATH并按下Enter键来确定是否编辑成功,成功之后配置文件内容如下:

  • 进入终端NDK下的sample目录,输入cd hello-jni/命令,按下enter键然后执行ndk-build命令。

 

开始编译FFmpeg:

  • 修改FFmpeg的configure文件,由于编译出来的动态库文件的版本号在.so之后(如libavcodec.so.5.100.1),而Android平台不能识别这样的文件名字,所以需修改文件名,在configure替换如下内容:
#SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
#LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
#SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
#SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'

SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
SLIBNAME_WITH_MAJOR='$(SLIBPREF).$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'
  • 编写shell脚本,拷贝ffmpeg下名为version.sh的shell脚本,复制为名为build_android.sh:

如执行./build_android.sh时出现-bash ./build_android.sh:Permission denied则是改shell文件权限未开,则需要开读写权限"chmod a+x build_android.sh",如出现“-bash: ./build_android.sh: /bin/bash^M: bad interpreter: No such file or directory”则是文本格式要修改,vim build_android.sh编辑"set ff=unix"。

 

  •  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
敬告:该系列的课程在抓紧录制更新中,敬请大家关注。敬告:本课程项目仅供学习参考,请不要直接商用,概不负责任何法律责任。 该系列的课程涉及:FFmpeg,WebRTC,SRS,Nginx,Darwin,Live555,等。包括:音视频、流媒体、直播、Android、视频监控28181、等。 我将带领大家一起来学习使用FFmpeg开发视频监控项目,并动手操练。具体内容包括: 一、视频监控的架构和流程二、FFmpeg4.3+SDL2+Qt5开发环境的搭建三、FFmpeg的SDK编程回顾总结并操练四、SDL2.0的编程回顾总结并操练五、颜色空间转换RGB和YUV的原理与实战六、Qt5+FFmpeg本地摄像头采集预览实战七、代码封装:摄像头h264/5编码并存储八、Qt5+FFmpeg单路网络摄像头采集预览九、Qt5+FFmpeg单路网络摄像头采集预览录制会看十、onvif与GB/T-28181的简介  音视频与流媒体是一门很复杂的技术,涉及的概念、原理、理论非常多,很多初学者不学 基础理论,而是直接做项目,往往会看到c/c++的代码时一头雾水,不知道代码到底是什么意思,这是为什么呢?   因为没有学习音视频和流媒体的基础理论,就比如学习英语,不学习基本单词,而是天天听英语新闻,总也听不懂。 所以呢,一定要认真学习基础理论,然后再学习播放器、转码器、非编、流媒体直播、视频监控、等等。   梅老师从事音视频与流媒体行业18年;曾在永新视博、中科大洋、百度、美国Harris广播事业部等公司就职,经验丰富;曾亲手主导广电直播全套项目,精通h.264/h.265/aac,曾亲自参与百度app上的网页播放器等实战产品。  目前全身心自主创业,主要聚焦音视频+流媒体行业,精通音视频加密、流媒体在线转码快编等热门产品。  

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值