之前由于不想升级mac系统,所以一直没有升级到Xcode9。没想到一升级项目就报错,而且还是定位到系统的类!“Typedef redefinition with different types ('NSString *' vs 'AVMediaType') ”,大概就是说'AVMediaType'这个关键字被定义成了两种不同的类型,'NSString *'和枚举类型。找了下是FFmpeg定义了这个枚举。然后用Xcode8打开还是会报莫名奇怪的错误,没办法只能解决先了。
网上搜索,答案很少。给出的建议是修改FFmpeg的枚举名称(毕竟苹果不可能改他新增加的typedef类型),然后重新编译。哥们儿实在是找不到其他的解决办法了,只能硬着头皮来改FFmpeg代码里面的枚举变量名。还好这个枚举使用的地方不多,大概也就七八十个左右。下面列出来用到'AVMediaType'的文件:cmdutils.c 、 ffmpeg_filter.c ffmpeg_opt.c 、ffmpeg.c、 ffmpeg.h ffplay.c、libavcodec/avcodec.h 、libavcodec/codec_desc.c、libavfilter/avfilter.c、libavfilter/avfilter.h、 libavfilter/avfiltergraph.c、libavfilter/buffersink.c、libavfilter/buffersink.h、libavfilter/formats.c、 libavfilter/formats.h、libavfilter/framepool.c、libavfilter/internal.h、 libavfilter/setpts.c、 libavfilter/src_movie.c、libavformat/asfdec_f.c、 libavformat/asfdec_o.c、 libavformat/avformat.h、
libavformat/avienc.c、libavformat/flvdec.c、 ibavformat/format.c、
ibavformat/hls.c、 ibavformat/matroskaenc.c、 ibavformat/mpeg.c、ibavformat/mpegts.c、ibavformat/rtp.c、ibavformat/rtp.h、ibavformat/rtpdec.c、
ibavformat/rtpdec.h、ibavformat/rtsp.c、ibavformat/segment.c、
ibavformat/uncodedframecrcenc.c、ibavformat/utils.c、libavutil/avutil.h、
libavutil/utils.c
tools/uncoded_frame.c。
整个查找过程是个体力活,编译过程还算幸运,就错了一次,然后根据提示修改了一个地方编译成功。FFmpeg具体是怎样编译的,大家可以去看这篇简书:http://www.jianshu.com/p/1f06b27b3ac0讲的很详细。唯一需要注意的地方是编译之前修改FFmpeg的编译选项,默认是不支持h.265解码的。这篇简书上有ijkplayer的GitHub地址,里面有如何修改编译选项的说明。
编译好的FFmpeg我已经放在网盘里链接: https://pan.baidu.com/s/1hr2Y1ZQ 密码: bv8u
Xcode9 FFmpeg报错
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 导入项目,有静态包经验的就就不用看了,这个对于我这个半路出家的和尚还是处理了老半天才解决..a文件直接导入 .h文...
- 前几天项目需要压缩视频,Github上找了许多库,要么就是太大,要么就是质量不高,其实我只需要压缩视频,最好的方案...
- 前言:项目需要增加视频拍摄和压缩的功能,了解到FFmpeg开源并且运用广泛,遂用之 1.1 FFmpeg简单介绍...