1.iOS编解码器简介
1. 硬编解码器和软编解码器
iOS 上有两种类型的编解码器:硬编解码器和软编解码器。
| AVAssetWriter |非CPU或专用处理器|支持编码|视频需要写入本地文件,然后通过实时监控文件内容变化来读取文件并处理数据包|
软编解码器| FFmpeg |中央处理器|支持| ------------- |
2、Mac上FFmpeg环境搭建
1.在mac上安装FFmpeg
如果你是用brew安装的,方法是
酿造安装ffmpeg
建议先卸载-brew uninstall ffmpeg,因为这种安装方式会失去很多功能。详情请参见官方介绍wiki:CompilationGuide/MacOSX
所以使用以下命令重新安装它
酿造安装ffmpeg --with-fdk-aac --with-tools --with-ffplay --with-freetype --with-libass --with-libvorbis --with-opus --with-libvpx --with-x265
安装完成后,可以使用命令行检查安装是否成功。
2. 常用命令
1.ffmpeg常用库
2、主要参数
可以用ffmpeg -h显示参数详细信息;诸如编解码器名称之类的详细信息可以使用ffmpeg 格式显示。
3.ffprobe
官方文档ffprobe.
通常,我使用以下命令来检查编码文件是否正确。如果格式错误,就会输出一堆Errors。
ffprobe -show_frames /Users/tomfang/Desktop/h265/test_tomshan.h265
如果你想查看JSON 格式,你可以使用
ffprobe -print_format json -show_format -show_streams -i /Users/tomshan/Desktop/h265/test_tomshan.h265
可以看到:如图
4.ffmpeg
ffmpeg 官方文档。
查看h265数据的基本信息
ffmpeg -i /Users/tomshan/Desktop/h265/test_tomshan.h265
使用libx265转换mp4。
ffmpeg -i /Users/tomshan/Desktop/test_tomshan.h265 -c:v libx265 /Users/tomshan/xxtest/test265.mp4
免费音视频学习地址:https://xxetb.xet.tech/s/2cGd0
5.ffplay
ffplay逐帧播放视频并显示视频帧号
目前该功能用于检查屏幕某些部分视频不正确的原因。在macOS下使用ffplay,按s键可以单帧播放视频。通过显示文本的视频滤镜,可以显示当前图片的帧号。命令示例如下。
ffplay -vf 'drawtext=fontfile=/Library/Fonts/Arial.ttf:text=%{n}:box=1:x=(w-tw)/2:y=h-(2*lh)'sample.mp4
3.编译支持iOS版本h264编解码器的FFmpeg
需要的工具如下
1.gas-preprocessor2、yasm3、FFmpeg-iOS-build-script
1.找到一个目录,新建文件夹h264
2.下载气体预处理器
cp -f /Users/tomxiang/h264/gas-preprocessor-master/gas-preprocessor.pl /usr/local/bin/
完成后可以进入/usr/local/bin/查看该文件是否存在。
3.安装yasm
酿造安装yasm
如果安装失败,可以直接下载安装。
卷曲http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz yasm.tar.gztar xzvf yasm.tar.gzcd yasm-1.2.0./configuremakesudo make install
4.下载x264-iOS编译脚本和源码
下载编译脚本,然后下载最新版本的源码。下载后,重命名为x264,放入x264-ios-master文件夹中。为什么要改名?如果你看一下编译脚本就很明显了。编译脚本包含当前目录中的x264文件。然后执行命令:
./build-x264.sh
执行完成后可以看到生成了x264-iOS文件夹。
5.下载FFmpeg-iOS-build-script
查看和修改脚本内容。
并将
1CFLAGS='$CFLAGS -mios-version-min=$DEPLOYMENT_TARGET -fembed-bitcode' 更改为1CFLAGS='$CFLAGS -mios-version-min=$DEPLOYMENT_TARGET'
如果显示的话,x264必须在当前目录,并且命令是fat-x264,所以我们在步骤4中生成的x264-iOS文件夹被重命名为fat-264,并放置在FFmpeg-iOS-build-script文件夹中。目录结构如下:
4.完成xcode的编译
本来以为把.h和.a拖进去配置一下就可以运行成功了。还有一个小问题。详细的配置可以参考我的图片。然后修改一个.m文件,将其编译为.mm,然后再改回来。好的,你完成了!
标头搜索路径:$(PROJECT_DIR)/XXFFmpeg/FFmpeg-iOS/include$(PROJECT_DIR)/XXAudioVideo/Class/FFmpeg/x264-iOS/include库搜索路径:$(PROJECT_DIR)/XXFFmpeg/FFmpeg-iOS/lib$(PROJECT_DIR)/XXAudioVideo/类/FFmpeg/x264-iOS/lib
测试代码如下:
#import 'XXFFmpegViewController.h' #ifdef __cplusplusextern 'C' {#endif #include 'libavutil/opt.h' #include 'libavcodec/avcodec.h' #include 'libavformat/avformat.h' #include 'libswscale/swscale. h' #ifdef __cplusplus};#endif@interface XXFFmpegViewController ()@end@implementation XXFFmpegViewController- (void)viewDidLoad { [super viewDidLoad]; av_register_all();}
参考文献列表
iOS开发用libx264编译libx264和FFMpeg包
使用FFmpeg+x264将iOS摄像头直播视频流编码成h264文件
FFmpeg
用户评论
终于找到了讲解ffmpeg的环境搭建的文章!一直想学习ios编解码,可是看教程都像是在听天书,还是这种通俗易懂的介绍比较好理解。等看完这篇文章赶紧动手实践一下。
有15位网友表示赞同!
iOS编解码确实是个很重要的技能,能加深对音频视频处理原理的理解。这篇入门篇讲解得很好,重点突出,而且步骤清晰。希望后续还有更深入一些的教程分享,比如具体代码实现和常用命令介绍!
有10位网友表示赞同!
说实话ffmpeg本身就很复杂,搞定环境搭建就已经让我头疼了。不过看了这篇文章感觉好像变得容易多了,至少知道应该从哪里开始下手了。
有14位网友表示赞同!
一直想学习iOS编解码,但是每次看到那些复杂的教程就泄气了。这篇文章真的太棒了!用通俗易懂的语言解释每个步骤,还配上了图片,简直是入门必备神器啊!
有7位网友表示赞同!
FFMPEG 确实是个很棒的工具,可以处理各种音频视频格式,可惜文档太难理解了,很多命令都不知道怎么用。希望作者能后续写一些具体的应用实例讲解。
有6位网友表示赞同!
学习iOS编解码一直是重大的挑战,这篇文章从环境搭建入手,算是打开了大门!对于初学者来说非常有帮助,感谢作者的分享!
有19位网友表示赞同!
感觉文章中所述的步骤还是挺基础的,没涉及到一些具体的ios开发操作,像如何将ffmpeg集成到项目中等等。希望可以更深入地讲解这些内容。
有16位网友表示赞同!
iOS编解码这门技术真是太重要了,以后想做一个优秀的iOS开发者就必须掌握! 这篇入门篇真的帮了大忙,环境搭建完成之后我就能开始学习其他的知识点了!
有6位网友表示赞同!
苹果官方文档关于编解码的介绍比较晦涩难懂,这篇博客反而更加清晰易懂!希望能继续更新一些更高级的内容。
有10位网友表示赞同!
ffmpeg的命令行工具确实很强大,但我感觉还是不太适合初学者直接上手。希望作者能提供一些使用指南和示例代码,这样更容易上手学习。
有5位网友表示赞同!
这个标题太吸引人了!我一直在找关于iOS编解码的环境搭建教程,终于找到合适的资源了。期待这篇文章能够详细讲解环境搭建的全过程!
有15位网友表示赞同!
虽然文章写的不错,但是对我来说还是太基础了,我希望看到更深入的讲解内容,比如具体的编解码算法和性能优化技巧等等。
有15位网友表示赞同!
iOS编解码入门确实是一个门槛,这篇教程介绍的步骤很详细,但有些地方我认为可以用更直观的图示解释或者视频演示来帮助理解!
有8位网友表示赞同!
文章写的很不错,能够让我清楚地了解到ffmpeg的环境搭建过程。希望以后可以学习更多的ios编解码知识和应用案例!
有19位网友表示赞同!