ios 使用动态库解决ffmpeg库冲突

ios 使用动态库解决ffmpeg库冲突

  1. xcode 从6.0开始就支持动态库的创建和使用,但是苹果不允许使用动态库来作热插件。
  2. 由于本人是做直播sdk的,在ios端使用ffmpeg做编解码,客户有时会集成多家sdk,而且可能都会用到ffmpeg静态库,由于用的ffmpeg版本不一致,configure也都不一样,导致ffmpeg冲突,最终通过动态库一劳永逸的解决了这个问题,下面就以ffmpeg库为例来介绍:
  3. 首先用xcode创建一个动态库,如下图:
    ios 使用动态库解决ffmpeg库冲突
  4. 将ffmpeg静态库添加到刚才创建的动态库中,如下图:
    ios 使用动态库解决ffmpeg库冲突
  5. framework 的动态库与静态库之间的切换方式,如下:
    ios 使用动态库解决ffmpeg库冲突
  6. 在动态库中调用ffmpeg的接口,这里需要注意,如果你在动态库中没有调用ffmpeg接口,那么你编译动态库的时候,是不会将ffmpeg静态库中的函数编译到动态库中,如下是我在项目中使用ffmpeg接口的类:
    ios 使用动态库解决ffmpeg库冲突
  7. 编译生成动态库后,将动态库添加到项目中,动态库的使用方式和静态库不同,必须在Embedded Binaries中添加,如下图:
    ios 使用动态库解决ffmpeg库冲突
  8. 这种方式基本可以解决所有的静态库冲突。