美文网首页FFmpegAndroid Dev视频
IjkPlayer For Android实现ffplay

IjkPlayer For Android实现ffplay

作者: 河的左岸 | 来源:发表于2017-05-27 00:00 被阅读372次

    背景说明

    由于PC端浏览器要能看直播,需要在手机端再开发一个RTMP协议的播放器。具体要求如下:

    • 实时。秒开视频,延迟要尽可能地低:3秒内
    • 流畅不卡顿,要一直播放。即使是马赛克也要显示,不能因为不清晰而停止播放

    PS:

    • VLC for Androd 太慢了,打开几十秒,播放缓存也巨大

    准备

    源码 Github:Bilibili/ijkplayer
    环境:Mac Book(源码要在Linux编译)

    编译

    • 安装homebrew、git、yasm(请自行百度或谷歌)

    • 下载andriod studio ,Android SDK、NDK

    • 配置Android SDK、NDK环境变量,在.bash_profile增加如下两行
      export ANDROID_SDK=/your/sdk/pathexport
      export ANDROID_NDK=/your/ndk/path

    • 安装gradle

    • 下载源码
      git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-androidcd ijkplayer-androidgit checkout -B latest

    • 初始化
      ./init-android.sh

    • 编译ffmpegcd android/contrib./compile-ffmpeg.sh clean./compile-ffmpeg.sh all

    • 编译IjkPlayercd .../compile-ijk.sh all

    到此为止,完成了对源码的编译,ijkplayer-android的目录结构如图


    图:工程结构

    • 更改project配置
      最后的配置如下,其中第10,24,25,27行要更改跟gradle一致:


      屏幕快照 2017-05-26 04.59.19 PM.png

    运行

    调整延时

    ffplay在打开rtmp串流视频时,大多数都会遇到5~10秒的延迟,在ffplay播放时,如果加上-fflags nobuffer可以缩短播放的rtmp视频延迟在1s内,而在ijkVideoView中加入(PLDroidPlayer当中也可以设置):

    ijkMediaPlayer.setOption(1, "analyzemaxduration", 100L);
    ijkMediaPlayer.setOption(1, "probesize", 10240L);
    ijkMediaPlayer.setOption(1, "flush_packets", 1L);
    ijkMediaPlayer.setOption(4, "packet-buffering", 0L);
    ijkMediaPlayer.setOption(4, "framedrop", 1L);

    相关文章

      网友评论

        本文标题:IjkPlayer For Android实现ffplay

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