美文网首页
iOS直播IJKPlayer源码编译库、库集成与基本使用(播放)

iOS直播IJKPlayer源码编译库、库集成与基本使用(播放)

作者: coding_Liu | 来源:发表于2019-07-31 16:58 被阅读0次

    1、获取 ijkplayer 源码

    在一个合适的位置新建一个文件夹, 假设为桌面, 文件夹名为 ijkplayer.

    打开终端, 输入下面的指令

    cd ~/Desktop/ijkplayer/
    
    # 获取ijkplayer源码
    git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-ios
    
    # 进入源码目录
    cd ijkplayer-ios
    
    5b25323d0001736807000501.jpg.png

    运行看下效果


    5b25323e00017d9407000315.jpg.png

    提示: 'libavformat/avformat.h' file not found
    原因: libavformat 是 ffmpeg 框架中的库,而 ijkplayer 又是基于 ffmpeg 框架的,因此需要导入 ffmpeg。
    解决办法: 查看 ijkplayer 的 README.md。

    2、配置编解码器格式支持
    默认为最少支持, 如果足够你使用, 可以跳过这一步. 否则可以改为以下配置:

    module-default.sh 更多的编解码器/格式
    module-lite-hevc.sh 较少的编解码器/格式(包括hevc)
    module-lite.sh 较少的编解码器/格式(默认情况)

    cd config
    
    # 删除当前的 module.sh 文件
    rm module.sh
    
    # 可根据需要替换为`module-default.sh`, `module-lite-hevc.sh`, `module-lite.sh`
    # 创建软链接 module.sh 指向 module-lite-hevc.sh
    ln -s module-lite-hevc.sh module.sh
    
    cd ..
    cd ios
    sh compile-ffmpeg.sh clean
    

    3、获取 ffmpeg 并初始化

    cd ..
    ./init-ios.sh
    

    4、添加 https 支持
    最后会生成支持 https 的静态文件 libcrypto.a 和 libssl.a, 如果不需要可以跳过这一步

    ./init-ios-openssl.sh
    
    cd ios
    
    # 在模块文件中添加一行配置 以启用 openssl 组件
    echo 'export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-openssl"' >> ../config/module.sh
    
    ./compile-ffmpeg.sh clean
    

    5、编译

    
    
    # 如果下一步提示错误`xcrun: error: SDK "iphoneos" cannot be located`, 请执行`sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer/`, 再重新执行下一步
    
    # 编译openssl, 如果不需要https可以跳过这一步
    ./compile-openssl.sh all
    
    # 编译ffmpeg
    ./compile-ffmpeg.sh all
    

    ps: 如果提示错误:

    ./libavutil/arm/asm.S:50:9: error: unknown directive
            .arch armv7-a
            ^
    make: *** [libavcodec/arm/aacpsdsp_neon.o] Error 1
    

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

    ==============================================================
    使用
    手动用 Xcode 打开 ios 目录下的 IJKMediaPlayer 项目
    ..... (写的人太多了 看下面支持文章即可)

    支持软文
    编译后生成ffmpeg的库文件后,仍然找不到文件,原因需要再次进行编译一次,之前只是下载
    https://www.imooc.com/article/36547(👍👍👍👍👍🌟)

    详细
    https://www.jianshu.com/p/65fb80dff4d6(👍👍👍👍👍)

    对https协议的支持
    https://www.jianshu.com/p/9743a68c2939(👍👍👍👍👍)

    https://www.jianshu.com/p/496257563f69(👍)问题汇总

    直播参数设置(优化开始播放速度)
    https://www.jianshu.com/p/622713b446a2(👍👍👍)

    ijkplayer 报错
    invalidateRenderBuffer
    IJKSDLGLView: setupDisplay not ready

    请问这是什么原因造成的? 这个问题网上好多人问没人回答
    我下面来叙述下我工程这个问题是怎么解决的
    1、-all_load ? 在本人测试other link 中添加 all_load 或者不添加自己的测试demo都没问题
    所以网上说用这种方式能亲测能解决的 你可以试试 也行你的项目中有些库冲突 需要全部加载下静态库,用all_load来处理下可能是一种解决方案(但我的测试是没有库冲突的前提下)
    2、多处使用ijkplayer但是项目中 other link 中没有添加 all_load,这个时候可能因为先后初始化和拉流的时机问题出现 xxx was compiled with optimization - stepping may behave oddly; variables may not be available.
    崩溃。这个时候在 other link 中添加 all_load 会报错重复文件,我项目中是视频会议嵌的直播后来得知是会议中底层代码也用了这个库,后来解决方案是把ijkplayer.framework编译成动态库,将 other link 中的all_load删除,然后运行就搞定了

    编动态库时


    报错

    添加libz库即可

    3、流协议对应不上 问你们推流的人

    相关文章

      网友评论

          本文标题:iOS直播IJKPlayer源码编译库、库集成与基本使用(播放)

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