美文网首页iOS开发笔记
iOS开发ijkplayer拉流框架的集成

iOS开发ijkplayer拉流框架的集成

作者: 翀鹰精灵 | 来源:发表于2018-05-14 10:18 被阅读2671次

    现在项目中用的拉流框架是ijkplayer.的,集成ijkplayer成功后,就算完成直播功能一半的工程了,只要有拉流url,就能播放直播啦。之前对这个有些了解,现在整理并总结一下相关用法(本文侧重实战,理论部分不做讲解)。

    第一部分: 运行bilibiliDemo
    1.首先我们去GitHub上下载ijkplayer.目录结构如下
    1.png
    2.找到我们的iOS平台,并打开工程,build一下,发现工程报错。
    2.png

    该错误需要下载ffmpeg,因为播放器都是基于ffmpeg的封装.
    解决方案:
    cd ijkplayer-master

    AllisonMacPro:ijkplayer-master Allison$ ./init-ios.sh
    
    == pull gas-preprocessor base ==
    ......
    == pull ffmpeg base ==
    ......
    == pull ffmpeg fork armv7 ==
    ......
    == pull ffmpeg fork arm64 ==
    ......
    == pull ffmpeg fork i386 ==
    ......
    == pull ffmpeg fork x86_64 ==
    Cloning into 'ios/ffmpeg-x86_64'...
    Compressing objects: 100% (116565/116565), done.
    Writing objects: 100% (523036/523036), done.
    Total 523036 (delta 405280), reused 523036 (delta 405280)
    Switched to a new branch 'ijkplayer'
    /Users/allison/Desktop/ijkplayer-master
    
    

    下载完ffmpeg后,我们再在终端执行下面两个命令:
    cd ios
    ./compile-ffmpeg.sh clean
    ./compile-ffmpeg.sh all

    此时我们再iOS目录下,编译ffmpeg,这个编译过程会有点漫长,因为要编译很多的版本,比如真机的,模拟器的等等。
    ./compile-ffmpeg.sh clean

    AllisonMacPro:ios Allison$ ./compile-ffmpeg.sh clean
    ====================
    [*] check xcode version
    ====================
    FF_ALL_ARCHS = armv7 arm64 i386 x86_64
    ==================
    clean ffmpeg-armv7
    ==================
    /Users/allison/Desktop/ijkplayer-master/ios
    clean ffmpeg-arm64
    ==================
    /Users/allison/Desktop/ijkplayer-master/ios
    clean ffmpeg-i386
    ==================
    /Users/allison/Desktop/ijkplayer-master/ios
    clean ffmpeg-x86_64
    ==================
    /Users/allison/Desktop/ijkplayer-master/ios
    clean build cache
    =================
    clean success
    

    ./compile-ffmpeg.sh all

    build_source: /Users/allison/Desktop/ijkplayer-master/ios/ffmpeg-armv7
    build_prefix: /Users/allison/Desktop/ijkplayer-master/ios/build/ffmpeg-armv7/output
    
    --------------------
    [*] configurate ffmpeg
    --------------------
    
    --------------------
    [*] check OpenSSL
    ----------------------
    
    --------------------
    [*] configure
    ----------------------
    config:  
    ......
    
    
    3-1.gif
    3.编译完成后,运行demo,对比编译前后的差别

    注: demo中的直播地址可能不可用,我这里随便在网上找了个直播的地址(https://blog.csdn.net/chinabinlang/article/details/45092297)在项目中想demo中地址随便替换一个即可看到下面的效果。

    3.png

    目录结构如下:

    项目结构.png

    运行起来的效果如下图所示:

    4.jpg
    5.jpg

    Tips:
    如果提示如下错误:

    ./libavutil/arm/asm.S:50:9: error: unknown directive
            .arch 
    

    解决方法:
    最新的 Xcode 已经弱化了对 32 位的支持,
    compile-ffmpeg.sh中删除armv7,
    修改如:FF_ALL_ARCHS_IOS8_SDK="arm64 i386 x86_64"
    再重新执行出现错误的命令: ./compile-ffmpeg.sh all即可。


    如果这里删除了armv7,那么项目中Build Settings--Valid Architectures 对应的也要删除armv7

    arvm7.png
    第二部分:集成ijkplayer

    ijkplayer已经运行起来了,但是如何把demo集成到我们自己的项目中呢?一般集成有两种方式:第一种:联合编译工程, 第二种:把ijkplayer集成.framework,把framework集成到项目中。这里我选择第二种。

    1.打开IJKMediaPlayer,生成Framework
    6.png

    可以看到,这是一个framework的框架。


    7.png

    我们把scheme调为release模式


    8.png
    2.打包Framework

    在product这里,我们可以看到是红色的,说明当前不存在这个文件。


    9.png

    这里我们需要生产一个模拟器版本,一个真机版本。
    ①生成一个模拟器版本
    步骤:
    (1)我们随便选择一个模拟器


    simulator.png
    (2)command+B ,build一下工程,buid成功之后,我们可以看到products下面的framework变成黑色的图标了。 11.png
    ②生成一真机版本
    步骤同①,只是这里我们选择真机build
    Generic.png
    3.查看framework
    12.png
    13.png
    4.并合framework

    其实我们真正合并的并不是IJKMediaFrameworkWithSSL的bundle文件,而是里面的IJKMediaFrameworkWithSSL文件。
    合并语句

    lipo -create "真机版本路径" “模拟器本部路径” -output "合并后的路径/框架名字"
    

    终端操作如下:

    AllisonMacPro:~ Allison$ lipo -create "/Users/allison/Library/Developer/Xcode/DerivedData/IJKMediaPlayer-awlkvnvgkwsadpgacpctqvyymyxn/Build/Products/Release-iphoneos/IJKMediaFrameworkWithSSL.framework/IJKMediaFrameworkWithSSL" "/Users/allison/Library/Developer/Xcode/DerivedData/IJKMediaPlayer-awlkvnvgkwsadpgacpctqvyymyxn/Build/Products/Release-iphonesimulator/IJKMediaFrameworkWithSSL.framework/IJKMediaFrameworkWithSSL" -output "/Users/allison/Library/Developer/Xcode/DerivedData/IJKMediaPlayer-awlkvnvgkwsadpgacpctqvyymyxn/Build/Products/IJKMediaFramework"
    AllisonMacPro:~ Allison$ 
    
    14.png

    此时这个文件就是真机和模拟器合并后的framework。
    验证:


    14-1.png
    14-2.png
    14-3.png

    至此,jkplayer框架集成完成。

    相关文章

      网友评论

        本文标题:iOS开发ijkplayer拉流框架的集成

        本文链接:https://www.haomeiwen.com/subject/xjdddftx.html