一、问题背景:
对sdk对接的客户,可能会使用第三方组件,第三方组件也使用了ffmpeg,也可能直接引入ffmpeg,同时也使用了我们的组件,这样就会导致ffmpeg冲突。
二、问题原因:
导致ffmpeg冲突的原因,主要是一个app里面有多个ffmpeg版本,或者使用了同一版本,但是功能不一样。导致ffmpeg冲突,直接表现就是部分功能错误和失败,包括第三方组件功能和我们的相关功能。有时候还会引起app崩溃。
三、解决方案:
1、总的原则和思路:
同一个app内使用同一版本同样功能的ffmpeg组件(动态库或者静态库)。
版本不同的ffmpeg,尽量都使用高版本的ffmpeg版本。
同一ffmpeg版本,则采用功能更全的ffmpeg编译选项。
Code: Select all
2、解决办法(以cube为例):
cube的用户在使用的过程中直接使用了官方提供的ffmpeg组件(pod 'mobile-ffmpeg-full', '4.4')。在使用我们的组件之后,用户app在运行过程中出现崩溃以及部分功能不正常的问题。
接到问题之后,我们着手进行分析,发现客户使用的ffmpeg版本与我们的版本虽然一样,但是他们的功能更全,我们决定基于用户的包来对我们的组件进行改造。并提供相关的组件('ThingFFmpegWrapper', '4.4.2-full.1')。
用户在使用的时候,同时引用两个组件即可解决冲突问题。(pod 'mobile-ffmpeg-full', '4.4'、pod 'ThingFFmpegWrapper', '4.4.2-full.1'),对公版的用户,或者没有单独引入ffmpeg的用户则仍然使用我们公版的ffmpegwrapper组件版本。
3、涂鸦未支持的ffmpeg版本:
目前涂鸦智能默认提供4.4.2的版本,如果用户确实需要其他版本的ffmpeg,这种情况这需要单独协调解决。