导航菜单
首页 » 资讯 » 正文

iOS编解码入门篇(FFMPEG环境搭建)

前言

一直很想做一个长期的专题介绍,既然已经转做直播软件了,对这一块也很有兴趣。接下来会做一些自己在编解码的分享与体会。欢迎大家共同探讨。

一.iOS编解码介绍1. 硬编解码和软编解码

iOS上编解码分为两种,硬编解码和软编解码。

    | AVAssetWriter | 非CPU或者专用处理器 | 支持编码 | 需要将视频写入本地文件,然后通过实时监听文件内容的改变,读取文件并处理封包 | 

软编解码 | | CPU | 支持 | ------------- |

二.Mac上环境搭建1. mac上安装

如果已经用brew安装的方式是

brew install ffmpeg

建议先卸载掉->brew ,因为上诉安装方法会丢失很多功能。详情可以看官方介绍wiki:/

故而用以下命令重新安装

brew install ffmpeg --with-fdk-aac --with-tools --with-ffplay --with-freetype --with-libass --with-libvorbis --with-opus --with-libvpx --with-x265

安装完可以用命令行查看是否安装成功。

2. 常用命令1.的常用库

2.主要参数

参数明细可用 -h显示;编解码器名称等明细可用 -显示.

3.

官方文档.

一般我自己看一个编码后的文件是否正确就用以下命令,如果格式错误的话会输出一堆Error。

ffprobe -show_frames /Users/tomxiang/Desktop/h265/test_tomxiang.h265

如果想看JSON格式的话可以用

ffprobe -print_format json -show_format -show_streams -i /Users/tomxiang/Desktop/h265/test_tomxiang.h265

可以看到如图所示:

4.

官方文档.

查看h265的数据的基本信息

ffmpeg -i /Users/tomxiang/Desktop/h265/test_tomxiang.h265

用转mp4.

ffmpeg -i /Users/tomxiang/Desktop/test_tomxiang.h265  -c:v libx265 /Users/tomxiang/xxtest/test265.mp4

相关学习资料推荐,点击下方链接免费报名,先码住不迷路~】

音视频免费学习地址:

【免费分享】音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux, rtmp hls rtsp srs 等等)有需要的可以点击加群免费领取~

5.

逐帧播放视频与显示视频帧序号

目前使用这个功能检查部分画面不正确视频的原因。macOS下使用,按下s键可单帧播放视频,配合一个显示文字的视频滤镜即可显示当前画面的帧序号,命令示例如下所示。、

ffplay -vf "drawtext=fontfile=/Library/Fonts/Arial.ttf:text=%{n}:box=1:x=(w-tw)/2:y=h-(2*lh)" sample.mp4

三.编译支持iOS版本的h264编解码的所需工具如下

1、gas-

2、yasm

3、-iOS-build-

1.找个目录新建一个文件夹h2642.下载gas-

它是编译 的所需脚本文件,然后需要将其拷贝斤bin文件夹,使用命令

cp -f /Users/tomxiang/h264/gas-preprocessor-master/gas-preprocessor.pl /usr/local/bin/

完了之后可以进/usr/local/bin/里面查看是否有这个文件。

3.安装yasm

Yasm是一个完全重写的 NASM 汇编。目前,它支持x86和AMD64指令集,接受NASM和气体汇编语法, 产出二进制,ELF32 , ELF64 , COFF , Mach - O的( 32和64 ), ,的Win32和Win64对象的格式, 并生成STABS 调试信息的来源,DWARF 2 , 8格式。

安装命令

brew install yasm

如果安装失败可以直接下载安装

curl http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz >yasm.tar.gz
tar xzvf yasm.tar.gz
cd yasm-1.2.0
./configure
make
sudo make install

4.下载x264-iOS编译脚本以及源码

下载编译脚本,然后下载最新版源码,下载完后改名成x264放到x264-ios-文件夹中。为什么要改名呢?看看编译脚本就自然清楚了,编译脚本中是当前目录的x264文件。

然后执行命令:

./build-x264.sh

执行完成之后可以看到生成了x264-iOS文件夹。

5.下载-iOS-build-

查看并修改脚本内容。

并将

1	CFLAGS="$CFLAGS -mios-version-min=$DEPLOYMENT_TARGET -fembed-bitcode"
修改为
1	CFLAGS="$CFLAGS -mios-version-min=$DEPLOYMENT_TARGET"

如果所示,x264必须在当前目录并且命令为fat-x264,所以我们第4步生成的x264-iOS文件夹改名成fat-264,放在-iOS-build-这个文件夹中。目录结构如下:

四. 完成xcode的编译

本来以为拖进.h和.a然后配置好.就能跑成功了。还是有一点问题的。具体可以参考我图片的配置. 然后修改一个.m文件为.mm编译一把再改回来。OK,大功告成!

Header Search Paths:
$(PROJECT_DIR)/XXFFmpeg/FFmpeg-iOS/include
$(PROJECT_DIR)/XXAudioVideo/Class/FFmpeg/x264-iOS/include
Library Search Paths:
$(PROJECT_DIR)/XXFFmpeg/FFmpeg-iOS/lib
$(PROJECT_DIR)/XXAudioVideo/Class/FFmpeg/x264-iOS/lib

测试代码如下:

#import "XXFFmpegViewController.h"
#ifdef __cplusplus
extern "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开发 编译和带的包利用+x264将iOS摄像头实时视频流编码为h264文件

原文 iOS编解码入门篇(环境搭建) - 掘金

评论(0)

二维码