直播技术总结(二)ijkplayer的编译到Android平台并测试解码库

转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/55670380

前言:ijkplayer,是b站工程师开源的播放器框架,基于FFmpeg及MediaCodec,内部实现软解及硬解的功能,对于没有自研底层播放器的公司,用它确实是比较合适了。关于介绍可以直接看:https://github.com/Bilibili/ijkplayer,今天主要是对ijkplayer进行编译在Android平台上运行。

首先看下效果图:

gif图如下:

编译过程:在mac上进行编译这个库

先clone一份源码到本地:

git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android
cd ijkplayer-android
git checkout -B latest k0.7.7.1 #最新分支

编译ffmpeg

./init-android.sh  # 初始化ijkplayer中和android相关,如果是在iOS,这是就是./init-ios.sh

cd android/contrib
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all #编译ffmpeg

囧,发现pro上没有配置ndk环境。

下载ndk,还好在《手把手图文并茂教你用Android Studio编译FFmpeg库并移植》中,我把ndk-10e存到云盘中。

  • 供参考下载地址见本文最下面,也可自行下载。
  • 用命令 ./android-ndk-r10e-mac-x86_64.bin,就可进行进行解压,如下图:

不过并没有这么顺利, 在解压过程中出现Permission denied。

这时要改下权限,执行命令 chmod a+x ./android-ndk-r10e-mac-x86_64.bin

配置ndk环境

  • 启动终端Terminal
  • 进入当前用户的home目录
    • 输入cd ~ 或 /Users/YourUserName
  • 创建.bash_profile
  • 输入touch .bash_profile
  • 编辑.bash_profile文件
  • 输入open -e .bash_profile

    因为是为了配置NDK开发环境,输入Android NDK下目录,前面是android sdk的,可以不用动它,最终.bash_profile文件如下:

  • 保存文件,关闭.bash_profile
  • 更新刚配置的环境变量
    • 输入source .bash_profile,让刚长配置生效

ndk-build测试

  • 找到ndk-10e中sample目录,cd hello-jni中,执扫命令ndk-build。就会出现如下所示:

重新回到编译ffmpeg的过程:

依旧执行:./compile-ffmpeg.sh all,得到如下所示

本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/55670380

编译结束时如下:

最终,在crontrib目录下,会出现编译so所需要的各平台文件,如arm,x86。也可以指定平台,编译。

最后执行如下命令,让ijkplayer和ffmpeg打成so库及demo工程:

cd ..
./compile-ijk.sh all

执行完毕后,就会出现一个ijkplayer文件夹,为studio工程,里面包含各平台so库。导入android studio,就可以运行demo工程。

导入Android Studio,example工程运行到模拟器上:

点击Sample,进入播放测试

最后我们编译它,不是用来看看demo就完了的。我们可以改c代码,并且按如上方式重新编译成so库,如果要在其他工程中使用的话。xml中引用如下:

<tv.danmaku.ijk.media.example.widget.media.IjkVideoView
            android:id="@+id/video_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center"/>

在你的Java代码中加入如下一些初始化条件就可以啦。

 videoView = (IjkVideoView) findViewById(R.id.videoview);
        // init player
IjkMediaPlayer.loadLibrariesOnce(null);
        IjkMediaPlayer.native_profileBegin("libijkplayer.so");
videoView.setVideoURI(Uri.parse(mUrl));

videoView.setOnPreparedListener(new IMediaPlayer.OnPreparedListener() {
      @Override
      public void onPrepared(IMediaPlayer mp) {
           videoView.start();
      }
});

第一时间获得博客更新提醒,以及更多android干货,源码分析,欢迎关注我的微信公众号,扫一扫下方二维码或者长按识别二维码,即可关注。

如果你觉得好,随手点赞,也是对笔者的肯定,也可以分享此公众号给你更多的人,原创不易

时间: 2024-12-12 08:15:26

直播技术总结(二)ijkplayer的编译到Android平台并测试解码库的相关文章

[原]详解如何将cocos2dx项目编译到Android平台上的(方式一:Cywin+NDK)

链接地址:http://m.blog.csdn.net/blog/yhc13429826359/29357815 2014-6-8阅读578 评论0 前言:cocos2dx作为一个开源的移动2D游戏框架,其跨平台的特性让它备受开发公司的欢迎.这里我就不做概念性的解释了,通过这篇文章你就会了解到,它的跨平台性”是个什么样子的“---有点拟人化了 我举个比较形象的例子: 有A.B.C三个部落,A部落的语言是A和O语言,B部落的语言是B和O语言,C部落的语言是C和O语言.你作为一个外星球人你会选择去学

视频直播技术(二):实时视频编码之H264硬编码

1.硬编码 & 软编码 硬编码:通过Android系统自带的Camera录制视频,实际上调用的是底层的高清编码硬件模块,即显卡,不使用CPU,速度快 软编码:使用CPU进行编码,如常见C/C++代码,编译生成二进制文件,速度相对较慢.例如使用Android NDK编译H264生成so库,编写jni接口,再使用java调用so库. 2.硬编码过程和原理 过程:通过MediaRecoder采集视频,再将视频流映射到LocalSocket实现收发. 原理:详见[流媒體]H264-MP4格式及在MP4文

视频直播技术(二):延迟优化

音视频的直播系统是一个复杂的工程系统,要做到非常低延迟的直播,需要复杂的系统工程优化和对各组件非常熟悉的掌握.下面整理几个简单常用的调优技巧: 编码优化 1. 确保 Codec 开启了最低延迟的设置.Codec 一般都会有低延迟优化的开关,对于 H.264 来说其效果尤其明显.很多人可能不知道 H.264 的解码器正常情况下会在显示之前缓存一定的视频帧,对于 QCIF 分辨率大小的视频(176 × 144)一般会缓存 16 帧,对于 720P 的视频则缓存 5 帧.对于第一帧的读取来说,这是一个

源码编译基于Android平台的XBMC笔记

参考官方网站:https://github.com/xbmc/xbmc/blob/master/docs/README.android 1. 编译主机系统 Ubuntu (12.04) 64Bit 2. 在Ubuntu上安装必要的工具 2.1. 基础工具包 sudo apt-get install build-essential default-jdk git curl autoconf unzip zip zlib1g-dev gawk gperf cmake ia32-libs 后面编译时报

编译在android 平台上跑的C应用程序

Android 用的是 Bionic C, 而不是通常的glibc,因此简单使用交叉工具链并不能够编译出适合运行在android 设备上的 C/C++ 程序. 交叉工具链可以很轻松在 Android 源码 prebuilts 目录下找到,但是直接编译会提示找不到各种标准库的头文件,需要指定 Bionic C库 的 sysroot. 像 Tiny 6410 开发板带的Android toolchain 因为集成了sysroot,因此可以直接用于编译C/C++ 代码. 本文讲述如何为任何一个Andr

Ogre3d Android平台编译教程

上一篇我们讲了Ogre3d 在 Window平台的编译流程方法 点击跳转 这一篇我们介绍 Ogre3d 编译到Android 平台的方法.可以和官方英文教程对照学习. 转载自博客 http://blog.csdn.net/huutu QQ:790621656 首先下载Ogre3d 依赖库源代码 和Ogre3d 源代码,下载方法在上一篇中介绍了,这里不再重复. 转载自博客 http://blog.csdn.net/huutu QQ:790621656 编译工具:NDK.Visual Studio.

FFmpeg的Android平台移植—编译篇

摘要:本文主要介绍将FFmpeg音视频编解码库移植到Android平台上的编译和基本测试过程. 环境准备: ubuntu-12.04.5 android-ndk64-r10-linux-x86_64.tar.tar ffmpeg-2.7.2_tmp.tar.bz2 adt-bundle-windows-x86_64-20131030.zip 第一步:源代码下载 到FFmpeg官方网站http://www.ffmpeg.org/上去下载源代码,这里下载的源代码是最权威的.进入官网之后,选择”Dow

直播技术总结(三)ijkplayer的一些问题优化记录

转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/57075026 前言:ijkplayer中一些问题记录优化,看下Agenda: 在弱网时如何优化 ijkplayer播放卡顿如何优化 如何支持https链接播放? 如何降低ijkplayer延迟效应 ijkplayer中音视频同步,是如何做的? 一.在弱网时如何优化 好的网络下视音频能够得到及时的发送,不会造成视音频数据在本地的堆积

直播技术(从服务端到客户端)二

播放 在上一篇文章中,我们叙述了直播技术的环境配置(包括服务端nginx,nginx-rtmp-module, ffmpeg, android编译,ios编译).从本文开始,我们将叙述播放相关的东西,播放是直播技术中关键的一步,它包括很多技术如:解码,缩放,时间基线选择,缓存队列,画面渲染,声音播放等等.我将分为三个部分为大家讲述整个播放流程: Android 第一部分是基于NativeWindow的视频渲染,主要使用的OpenGL ES2通过传入surface来将视频数据渲染到surface上