精华内容
参与话题
问答
  • ijkplayer

    2016-12-01 18:00:52
    Android/iOS video player based on FFmpeg n3.2, with MediaCodec, VideoToolbox support. 优势: ...基于MediaCodec, VideoToolbox,表明支持硬件解码https://github.com/Bilibili/ijkplayer.git

    Android/iOS video player based on FFmpeg n3.2, with MediaCodec, VideoToolbox support.
    优势:
    基于 FFmpeg,表明几乎支持任何的协议
    基于MediaCodec, VideoToolbox,表明支持硬件解码

    https://github.com/Bilibili/ijkplayer.git

    展开全文
  • ijkPlayer

    2019-01-19 20:04:35
    导依赖 implementation 'com.github.leifzhang:IjkLib:0.4.3' 权限 <uses-permission android:name="android.permission.INTERNET"...android.permission.WRITE_EXTERNAL_S...

    导依赖

    implementation 'com.github.leifzhang:IjkLib:0.4.3'

    权限

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    

    布局

    <tv.danmaku.ijk.media.widget.media.IjkVideoView
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:id="@+id/video"/>
    

     主代码

    video = (IjkVideoView) findViewById(R.id.video);
    IjkMediaPlayer.loadLibrariesOnce(null);
    IjkMediaPlayer.native_profileBegin("libijkplayer.so");
     
    AndroidMediaController controller=new AndroidMediaController(this,false);
    video.setMediaController(controller);
    String url="http://ips.ifeng.com/video19.ifeng.com/video09/2014/06/16/1989823-102-086-0009.mp4";
    video.setVideoURI(Uri.parse(url));
    video.start();
    

     

     

    展开全文
  • ijkplayer Platform Build Status Android iOS Video player based on ffplay Download Android: Gradle # required allprojects { repositories { jcenter() } } dependencies { # required,...
  • 当我们拥有ijkplayer的所有so文件时,其实我们还需要这里的代码类,因为这些代码是调用ijkplayer底层库的api,如果你有需要,欢迎下载!
  • 至此,我们的所有编译工作就完成了,在这里我有稍微省略了几个步骤,如果编译途中碰到错误...进入ijkplayer/android/ijkplayer目录,这里面的所有东西就是我们编译后的产出,也是后续项目中会使用到的库文件和源文件。

    编译ijkplayer

    01.准备工作

    下载

    从github上下载源码,同时github上有完整的编译流程,可以看下。

    安装Homebrew

    简称brew。OSX上的软件包管理系统,简单来说,就是可以方便地安装、卸载和管理软件,软件包管理在类Unix系统上可是一件非常恶心的事情。
    在命令行中敲入下面的命令,安装Homebrew,命令语句原汁原味,不需要修改:

    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    

    中间过程可能需要按下enter键或者输下密码,照提示做就是了,很简单的安装过程,成功后有明显的提示。如果安装失败了,请自行google/baidu,这里不探讨Homebrew相关知识。

    安装git

    git是啥就不用多说了,这个应该很多人都已经装过了,如果装过了就不需要再安装。利用刚才安装的Homebrew,在命令行中敲入下面的命令,安装git:

    brew install git
    

    安装yasm

    貌似是一个汇编器,编译用的,总之装上就对了。利用刚才安装的Homebrew,在命令行中敲入下面的命令,安装yasm:

    brew install yasm
    

    环境变量配置

    在~/.bash_profile文件中加入下面两行:

    export ANDROID_SDK=[your sdk path]
    export ANDROID_NDK=[your ndk path]
    

    保存并退出.bash_profile,在命令行中输入source .bash_profile使配置生效,有时需要关闭终端才会生效。

    02.编译

    初始化

    将ijkplayer根目录置为工作目录,执行以下命令:
    1、从远程仓库clone ffmpeg到extra/ffmpeg,并以extra/ffmpeg为引用,clone到5个cpu架构对应的目录中,以armv7q为例,路径为android/contrib/ffmpeg-armv7a;
    2、制作config/module-lite.sh的替身config/module.sh,该文件中配置了ffmpeg编译的配置项;
    3、从远程仓库clone libyuv到extra/libyuv,并以extra/libyuv为引用,clone到ijkmedia/ijkyuv中。
    综上,该脚本主要工作是从远程仓库下载ffmpeg和libyuv源码到本地。

    ./init-android.sh
    

    这个脚本可以做下修改,只保留一份原始ffmpeg源码,这样当去修改源码的时候不会出现需要同步到其他5份的情况,同理,只保留一份libyuv。

    编译ffmpeg

    将工作目录切换到android/contrib,依次执行以下命令(必须切换,否则后续脚本运行会有问题):

    清除之前编译好的ffmpeg库。

    ./compile-ffmpeg.sh clean
    

    编译所有cpu架构的ffmpeg库(armv5、armv7a、arm64、x86、x86_64),其它参数参见附件的脚本。
    实际的编译脚本是android/contrib/tools/do-compile-ffmpeg.sh。
    以armv7a为例,结果输出到android/contrib/build/ffmpeg-armv7a/output,包含头文件、静态库和动态库。

    ./compile-ffmpeg.sh all
    

    编译ijkplayer

    将ijkplayer/android置为工作目录,执行下面命令:

    编译ijkplayer动态库,这里的参数all和compile-ffmpeg.sh中的效果是一样的,其它参数的使用参考compile-ffmpeg.sh。
    项目中预置了5个cpu架构对应的源码在android/ijkplayer目录下,以armv7a为例,位于android/ijkplayer/ijkplayer-armv7a,我们需要编译的mk文件和源文件位于上述目录的src/main/jni目录下,里面除了Application.mk是每个cpu架构对应独立的一份外,其它文件基本都是链接自ijkmedia目录下的文件。
    该过程编译了以下几个库:
    1、编译libandroid-ndk-profiler.a,输出到lib下
    2、将之前编译生成的libijkffmpeg.so拷贝到lib下
    3、编译ijkj4a静态库libijkj4a.a,编译libyuv静态库libyuv-static.a,输出到lib下
    4、依赖libijkffmpeg.so、libijkj4a.a、libyuv-static.a、libcpufeatures.a(外部链接库)编译libijksdl.so,输出到lib下
    5、依赖libijkffmpeg.so、libijksdl.so、libandroid-ndk-profiler.a,编译libijkplayer.so,输出到lib下
    最终输出了libijkffmpeg.so、libijksdl.so、libijkplayer.so三个动态库

    ./compile-ijk.sh all
    

    至此,我们的所有编译工作就完成了,在这里我有稍微省略了几个步骤,如果编译途中碰到错误,最好照着github上面的步骤一步步做下来。进入ijkplayer/android/ijkplayer目录,这里面的所有东西就是我们编译后的产出,也是后续项目中会使用到的库文件和源文件。

    在这里插入图片描述
    在这里插入图片描述

    集成ijkplayer

    下载下来的ijkplayer源码工程是不能直接集成到项目中使用的,需要先编译,然后集成编译后生成的子工程,该子工程位于[ijkplayer根目录]/android/ijkplayer。
    在主工程中使用import module将ijkplayer作为module导入主工程,路径指向前面所说的ijkplayer编译后的子工程。导入后会发现不止一个module,而是有好几个module,最显眼的是一个abi对应一个module。这和我们平常的工程结构差异挺大的,通常我们是将所有需要的abi库都集中放到libs中。ijkplayer这样做的好处是,可以通过在gradle文件中指定需要编译的module来筛选需要的abi,挺有意思。
    如果你看不惯他这种目录结构,也可以将你需要的so库挪到ijkplayer-java的libs目录下,然后删除所有abi对应的module。
    编译一下,如果成功就没有问题,如果失败了,根据提示解决问题。

    常见编译失败问题

    提示compileSdkVersion有问题
    ijkplayer使用了gradle的全局配置,在每个module的gradle文件中都可以看到如下代码

    android {
        compileSdkVersion rootProject.ext.compileSdkVersion
        buildToolsVersion rootProject.ext.buildToolsVersion
    }
    

    解决方法有两个:

    1. 在根目录下的gradle文件中加入ext全局变量,并为每个出现过的ext参数定义。
    2. 将所有全局变量改成常量。

    提示tools/gradle-on-demand.gradle找不到

    tools目录就在之前编译完成的ijkplayer目录下,也就是和所有module在同个目录下,导入module的时候可能这个目录没有导进来,手动copy到工程目录下即可。

    03. 我的实践

    编译出来之后,我通过导入项目的方式把下面的项目导入到了Androidstudio,设置了sdk之后,编译,可以看到官方Demo了:中间切了网络。
    在这里插入图片描述
    在这里插入图片描述
    按照博客的说法,这里面的很多cpu类型的代码都是可以删除掉的。在我们制作自己的aar包的时候,可以去掉。

    我们看一下这个项目的结构:
    在这里插入图片描述
    编译IJKPlayer开源项目的so文件库走过的路
    https://www.jianshu.com/p/2c1413486b01
    这个是别人的实践,直接拷贝源码也是一种方法。

    04. 为什么要编译?

    交叉编译的概念和为什么要交叉编译这里就不细说了,感兴趣的可以去查资料。因为官方提供的远程maven依赖在交叉编译的时候可能提供的功能有限,比如不支持某些音视频编解码格式,所以需要我们自己可定制的去交叉编译自己需要的版本出来,为了功能的扩展或者是为了包体积的考虑等等。
    这里就有个栗子,必须得编译一个自己版本的ijk:
    编译IJKPlayer开源项目的so文件库走过的路
    https://www.jianshu.com/p/2c1413486b01

    05. 参考资料:

    ijkplayer编译so库真没那么难
    https://blog.csdn.net/coder_pig/article/details/79134625

    什么是交叉编译,为什么要使用交叉编译?
    https://blog.csdn.net/caoshangpa/article/details/79076813

    Android CPU架构及so库兼容问题总结
    https://blog.csdn.net/u010052279/article/details/81393143

    展开全文
  • ijkplayer 的动态库v7a 和v8a,支持海康摄像头RTSP h264协议,源码来自最新版本ijkplayer k0.8.0 使用原DEMO即可支持RTSP mp4文件等播放,首画面500ms显示. module-lite-rtsp.sh的内容如下: #! /usr/bin/env bash...
  • ijkplayer apk

    千次下载 热门讨论 2016-02-24 22:38:24
    ijkplayer android播放器,方便查看是否满足工程需要,然后去git下载源码编译定制。
  • IJKPlayer.zip

    2020-07-18 13:29:04
    ijkplayer是Bilibili公司开源的播放器实现,整合了FFMpeg, ExoPlayer,MediaPlayer等多种实现,提供了类似于MediaPlayer的API,可以实现软硬解码自由切换,自定义TextureView实现,同时得益于FFMpeg的能力,也能支持...
  • ijkplayer系列1:ijkplayer介绍

    千次阅读 2019-06-25 21:12:22
    ## ijkplayer简介 基于FFmpeg的轻量级Android/iOS视频播放器 https://github.com/Bilibili/ijkplayer ## 导入方式 ### gradle导入

    ijkplayer简介

    基于FFmpeg的轻量级Android/iOS视频播放器

    https://github.com/Bilibili/ijkplayer

    导入方式

    gradle导入

    
    allprojects {
        repositories {
            jcenter()
        }
    }
    
    dependencies {
        # required, enough for most devices.
        compile 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8'
        compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8'
    
        # Other ABIs: optional
        compile 'tv.danmaku.ijk.media:ijkplayer-armv5:0.8.8'
        compile 'tv.danmaku.ijk.media:ijkplayer-arm64:0.8.8'
        compile 'tv.danmaku.ijk.media:ijkplayer-x86:0.8.8'
        compile 'tv.danmaku.ijk.media:ijkplayer-x86_64:0.8.8'
    
        # ExoPlayer as IMediaPlayer: optional, experimental
        compile 'tv.danmaku.ijk.media:ijkplayer-exo:0.8.8'
    }
    
    

    从github下载ijkplayer源码,进行编译

    待实践

    来个栗子

    compile 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8'
        compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8'
    
        compile 'tv.danmaku.ijk.media:ijkplayer-armv5:0.8.8'
        compile 'tv.danmaku.ijk.media:ijkplayer-arm64:0.8.8'
        compile 'tv.danmaku.ijk.media:ijkplayer-x86:0.8.8'
        compile 'tv.danmaku.ijk.media:ijkplayer-x86_64:0.8.8'
    
        compile 'tv.danmaku.ijk.media:ijkplayer-exo:0.8.8'
    

    VideoPlayer(ijk没有给具体的view,需要我们自己封装)

    public class VideoPlayer extends FrameLayout {
        private Context mContext;
        private IMediaPlayer mMediaPlayer;
        private SurfaceView surfaceView;
    
        public VideoPlayer(Context context) {
            super(context);
        }
    
        public VideoPlayer(Context context, AttributeSet attrs) {
            super(context, attrs);
            init(context);
        }
    
        private void init(Context context) {
            mContext = context;
            createSurfaceView();
        }
    
        private void createSurfaceView() {
            surfaceView = new SurfaceView(mContext);
            surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
                @Override
                public void surfaceCreated(SurfaceHolder holder) {
    
                }
    
                @Override
                public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
                    if (mMediaPlayer != null) {
                        mMediaPlayer.setDisplay(holder);
                    }
                }
    
                @Override
                public void surfaceDestroyed(SurfaceHolder holder) {
    
                }
            });
            LayoutParams layoutParams =
                    new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT,
                            Gravity.CENTER);
            addView(surfaceView, 0, layoutParams);
        }
    
        //创建一个新的player
        private IMediaPlayer createPlayer() {
            //todo 各个参数的含义
            IjkMediaPlayer ijkMediaPlayer = new IjkMediaPlayer();
            ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "opensles", 1);
    
            ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "overlay-format", IjkMediaPlayer.SDL_FCC_RV32);
            ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "framedrop", 1);
            ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "start-on-prepared", 0);
    
            ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "http-detect-range-support", 1);
    
            ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_CODEC, "skip_loop_filter", 48);
            ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_CODEC, "min-frames", 100);
            ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "enable-accurate-seek", 1);
    
            ijkMediaPlayer.setVolume(1.0f, 1.0f);
    
            return ijkMediaPlayer;
        }
    
        //开始加载视频
        public void load(String mPath) throws IOException {
            if (mMediaPlayer != null) {
                mMediaPlayer.stop();
                mMediaPlayer.release();
            }
            mMediaPlayer = createPlayer();
            setListener(mMediaPlayer);
            mMediaPlayer.setDisplay(surfaceView.getHolder());
            mMediaPlayer.setDataSource(mContext, Uri.parse(mPath));
            mMediaPlayer.prepareAsync();
        }
    
        private void setListener(IMediaPlayer player) {
            player.setOnPreparedListener(new IMediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(IMediaPlayer iMediaPlayer) {
                    if (mMediaPlayer != null) {
                        mMediaPlayer.start();
                    }
                }
            });
            player.setOnVideoSizeChangedListener(new IMediaPlayer.OnVideoSizeChangedListener() {
                @Override
                public void onVideoSizeChanged(IMediaPlayer iMediaPlayer, int i, int i1, int i2, int i3) {
    
                }
            });
        }
    
        public void release() {
            if (mMediaPlayer != null) {
                mMediaPlayer.reset();
                mMediaPlayer.release();
                mMediaPlayer = null;
            }
        }
    
        public void pause() {
            if (mMediaPlayer != null) {
                mMediaPlayer.pause();
            }
        }
    
        public void stop() {
            if (mMediaPlayer != null) {
                mMediaPlayer.stop();
            }
        }
    
        public void reset() {
            if (mMediaPlayer != null) {
                mMediaPlayer.reset();
            }
        }
    
    }
    
    

    MainActivity

    VideoPlayer videoPlayer = findViewById(R.id.video);
    
            try {
                videoPlayer.load("http://vjs.zencdn.net/v/oceans.mp4");
            } catch (IOException e) {
                Toast.makeText(this,"播放失败",Toast.LENGTH_SHORT);
                e.printStackTrace();
            }
    
    

    效果:

    参考资料

    ijkplayer接入使用
    https://www.jianshu.com/p/a57bbdd78798

    ijkplayer踩坑记录
    https://www.jianshu.com/p/0ae5924cc7d6*

    展开全文
  • ijkplayer编译so库真没那么难

    万次阅读 2018-01-22 22:53:57
    ijkplayer编译so库真没那么难 引言: 公司现在的电台项目是我第二个接触音频播放项目,Android音视频 播放很多还是使用的MediaPlayer(大中厂除外),但是如果你用过 MediaPlayer的话,很多开发者都会吐槽有多坑...
  • IJKPlayer Demo

    2018-06-20 15:18:44
    eclipse环境下的IjKPlayer的demo,本人从新编译了eclipse下使用的jar包,及so库,可以直接在eclipse环境下使用
  • 因为Android ijkplayer播放rtsp直播流在加载时延迟在5-10秒实在难以接受,再修改后解决了延迟问题,目前已达到2秒甚至秒开的效果 添加的方法:VideoOptionModel videoOptionMode0l = new VideoOptionModel(1, ...
  • ijkplayer源码

    2018-05-10 13:32:34
    ijkplayer 底层和应用层源代码 ijkplayer JNI APP ijkplayer
  • ijkPlayerDemo

    2018-10-09 11:49:13
    android ijkPlayerDEMO 支持rtsp,Https编码。rtsp优化
  • ijkplayer资源包

    2020-11-24 11:08:53
    这是ijkplayer编译的所有资源文件 , 包含了Ubuntu的镜像文件 , JDK , NDK , SDK , 以及ijkplayer , ffmpeg仓库源码 . 众所周知 , 正常下载,超级慢 , 所以把这些资源文件全部整合后供大家快速搭建环境.查看我的博文...
  • ijkplayer0.8.8.zip

    2020-03-12 14:13:56
    ijkPlayer0.8.8 ijkplayer是一个基于FFmpeg的轻量级Android/iOS视频播放器。FFmpeg的是全球领先的多媒体框架,能够解码,编码, 转码,复用,解复用,流,过滤器和播放大部分的视频格式。它提供了录制、转换以及流化...
  • ijkplayer播放器详解使用教程

    万次阅读 多人点赞 2016-08-24 15:42:30
    1.认识ijkplayer 最近公司准备开发一款视频播放及直播的应用,找了许多开源的框架,大部分都是基于ffmpeg开发的。最开始准备用Vitamio框架开发的,相关的文章也比较丰富,结果对于非个人移动应用均需购买Vitamio...
  • ijkplayer.rar

    2020-08-24 15:29:30
    支持rtmp的ijkplayer,各种cpu类型可以自己配置,ijkplayer是b站开源的超级好用的视频播放器喔,相信大家都早有耳闻。ijkplayer Android和ios都可用,还支持多种视频的硬解码。人生苦短,不如快点试一试。
  • 基于IJKPlayer,实现了多功能的视频播放器。 支持基本的拖动,声音、亮度调节。 支持边播边缓存,使用了AndroidVideoCache。 支持视频本身自带rotation的旋转。 增加了重力旋转与手动旋转的同步支持。 支持列表播放...

空空如也

1 2 3 4 5 ... 20
收藏数 2,514
精华内容 1,005
热门标签
关键字:

ijkplayer