Ijkplayer的简单分析

发布时间:2020-10-12 05:07:03 作者:wx5cef3cea13078
阅读:5588
开发者专用服务器限时活动,0元免费领! 查看>>

1.       获取代码:

git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android

cd ijkplayer-android

git checkout -B latest k0.8.8

2.       Before Build

# install homebrew, git, yasm
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install git
brew install yasm
# add these lines to your ~/.bash_profile or ~/.profile
# export ANDROID_SDK=<your sdk path>
# export ANDROID_NDK=<your ndk path>
# on Cygwin (unmaintained)
# install git, make, yasm

3.       获取依赖的开源库

./init-android.sh

获取FFmpeg不同armabi 库,

获取libyuvlibtouchsound lib库:

Ijkplayer的简单分析

几个开源库介绍:

1.       jni4android是一个jni生成工具,可以根据提供的java类,自动生成对应jni层的*.c文件和*.h头文件。

2.       SoundTouch 是一个开源的音频库,主要有以下功能:

变速不变调(TSMTime Scale Modification),改变音频的播放速度(快或者慢)同时不影响音频的声调(Pitch)

变调不变速 Pitch Shifting ,改变音频声调的同时保持音频的播放速度不变

变调变速,同时改变音频的声调和速度

3.       libyuvGoogle开源的实现各种YUVRGB之间相互转换、旋转、缩放的库。它是跨平台的,可在WindowsLinuxMacAndroid等操作系统,x86x64arm架构上进行编译运行,支持SSEAVXNEONSIMD指令加速。

4.       编译Android FFmpeg库:

cd android/contrib
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all

FFmpeg Git仓库:

不同armabi 对应的ffmpeg 库:

FFmpeg 编译脚本:

Ijkplayer的简单分析

编译libavfiter等目标文件:

5.       编译ijk

cd ..
./compile-ijk.sh all

通过NDK编译 ijkplayer目录下的JNI文件夹

打包生成ijkffmpegso

编译ijkplayer

6.       导入AS(3.2):

File->Open, 点击选择android->ijkplayer

AS配置注意问题:

1.       Gradle 版本切换。手动下载gradle版本如gradle-4.6-all.zip放入gradle文件下中。

2.       Jcenter下载超时问题,替换成aliyun

. ijk代码分析:

IjkPlayer除了提供ijkPlayer API,同时也提供了Android原生的MediaPlayer以及google自己的exoPlayer APIijkPlayerVideoView中通过Player工厂模式Create

Ijkplayer的简单分析

IjkDemo整体架构:

Ijkplayer的简单分析

Demo未使用sdl来绘制,android中使用可参考:

https://github.com/wanliyang1990/SDL2ForAndroid

ijkplayer播放时序图:

 Ijkplayer的简单分析

./android/ijkplayer_jni.c

IjkMediaPlayer_native_setup

ijkplayer_android.c

ijkmp_android_create

ffpipeline_android.c

ffpipeline_create_from_android

播放器基本框图:

Ijkplayer的简单分析

ffplay.c中主要的代码调用流程如下图所示:

Ijkplayer的简单分析Ijkplayer的简单分析

1.       数据读取

stream_open主要做了以下几件事情:

2.       音视频解码:

3.       音视频渲染

初始化player,构建vout对象:ijksdl –>s4a

mp->ffplayer->vout = SDL_VoutAndroid_CreateForAndroidSurface();

 

调用SDL_VoutDisplayYUVOverlay进行绘制

SDL_VoutDisplayYUVOverlay(ffp->vout, vp->bmp);

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

推荐阅读:
  1. MySQL中的redo及undo简单分析
  2. ios端ijkplayer编译的示例分析

开发者交流群:

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

android 播放器 ijkplaye

上一篇:Spring中如何获取request的方法汇总及其线程安全性分析

下一篇:一个“牛逼”的 Python 命令行解析库

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》
开发者交流群×