Giter Site home page Giter Site logo

youhongyouzhuan / mediametadataretrieverwrapper Goto Github PK

View Code? Open in Web Editor NEW

This project forked from deepsadness/mediametadataretrieverwrapper

0.0 1.0 0.0 657 KB

MediaMetadataRetriever Wrapper. use MediaCodec + ImageReader

Java 2.13% CMake 0.18% Makefile 0.20% Python 3.66% C 0.58% C++ 92.79% Batchfile 0.12% Shell 0.34%

mediametadataretrieverwrapper's Introduction

MediaMetadataRetrieverWrapper

MediaMetadataRetriever wrapper。 API Request : >=19 ,Android 4.4

速度对比

左边的图片是通过方式1(使用MediaMetadataRetriever) 右边的图片是通过方式2(使用MediaCodec+ImageReader)

speed.gif

在缩小2倍的Bitmap输出情况下

  • 使用MediaMetadataRetriever 抽帧的速度,稳定在 300ms左右。

  • 使用MediaCodec+ImageReader 第一次抽帧。大概是200ms ,后续每帧则是50ms左右。

注意:如果不缩小图片的话,建议还是使用MediaMetadataRetriever。 使用当前库的话,调用metadataRetriever.forceFallBack(true);

添加依赖

  • Add it in your root build.gradle at the end of repositories:
    allprojects {
    	repositories {
    		...
    		maven { url 'https://jitpack.io' }
    	}
    }
  • Add the dependency
    dependencies {
        implementation 'com.github.deepsadness:MediaMetadataRetrieverWrapper:0.2'
    }

使用方式

  1. 创建

 MediaMetadataRetrieverWrapper metadataRetriever = new MediaMetadataRetrieverWrapper();
 //如果想要完全按照原来的metaRetirever的方式,就设置为true。默认为false
 //metadataRetriever.forceFallBack(true);

  1. 设置DataSource

当前只支持了本地文件。没有重写其他的方法

   metadataRetriever.setDataSource(path);

  1. 对对应的时间抽帧
    //2s处。尺寸缩小2倍
    metadataRetriever.getFrameAtTime(2 * 1000 * 1000, 2, new RetrieverProcessThread.BitmapCallBack() {
        @Override
        public void onComplete(final Bitmap frame) {
            long end = System.currentTimeMillis();
            Log.d("zzx", "cost ms = " + (end - start));
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    bitmapArrayList.add(frame);
                    mBitmapAdapter.notifyDataSetChanged();
                }
            });
        }
    });
  1. 按照间隔

这种方式,可以按照时间间隔,一口气取出所有的帧。 如果没有强制使用MediaMetaRetriever的话(forceBack 为 false,默认情况),结果会多一帧。因为强制输出最后一帧。

      metadataRetriever.getFramesInterval(1000, 4, new RetrieverProcessThread.BitmapCallBack() {
          @Override
          public void onComplete(final Bitmap frame) {
              runOnUiThread(new Runnable() {
                  @Override
                  public void run() {
                      bitmapArrayList.add(frame);
                      mBitmapAdapter.notifyDataSetChanged();
                  }
              });
          }
      });

  1. 释放
    metadataRetriever.release();

简要说明

将文件通过MediaCodec解码。 输出到ImageReader当中。来获取截图。

使用MediaMetadataRetriever的方式,因为无法配置输出的图片的大小。

但当我们只需要生成小图预览的时候, 如果我们实现做了缩放的处理。就能得到很快的速度。

博文位置:https://www.jianshu.com/p/dfddb85302bd

后续

已知问题

  1. 小米5s获取的截图是花屏问题
  2. 华为Mate8上张数显示较少的问题

后续还是要看一下MediaMetadataRetriever的原理探究。对API进行兼容。

mediametadataretrieverwrapper's People

Contributors

deepsadness11 avatar deepsadness avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.