Java 类android.media.MediaMetadataRetriever 实例源码

项目:stynico    文件:BitmapExtractor.java   
public List<Bitmap> createBitmaps(String path)
   {
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.setDataSource(path);
double inc = US_OF_S / fps;

for (double i = begin * US_OF_S; i < end * US_OF_S; i += inc)
{
    Bitmap frame = mmr.getFrameAtTime((long) i, MediaMetadataRetriever.OPTION_CLOSEST);
    if (frame != null)
    {
    bitmaps.add(scale(frame));
    }
}

return bitmaps;
   }
项目:WeiXinRecordedDemo    文件:CutTimeActivity.java   
/**
 * 初始化缩略图
 */
private void initThumbs(){

    final int frame = 15;
    final int frameTime = videoDuration/frame*1000;

    int thumbnailWidth =  ll_thumbnail.getWidth()/frame;
    for (int x=0; x<frame; x++){
        ImageView imageView = new ImageView(this);
        imageView.setLayoutParams(new ViewGroup.LayoutParams(thumbnailWidth, ViewGroup.LayoutParams.MATCH_PARENT));
        imageView.setBackgroundColor(Color.parseColor("#666666"));
        imageView.setScaleType(ImageView.ScaleType.CENTER);
        ll_thumbnail.addView(imageView);
    }

    new AsyncTask<Void, Void, Boolean>() {
        @Override
        protected Boolean doInBackground(Void... params) {
            MediaMetadataRetriever mediaMetadata= new MediaMetadataRetriever();
            mediaMetadata.setDataSource(mContext, Uri.parse(path));
            for (int x=0; x<frame; x++){
                Bitmap bitmap = mediaMetadata.getFrameAtTime(frameTime*x, MediaMetadataRetriever.OPTION_CLOSEST_SYNC);
                Message msg = myHandler.obtainMessage();
                msg.obj = bitmap;
                msg.arg1 = x;
                myHandler.sendMessage(msg);
            }
            mediaMetadata.release();
            return true;
        }
        @Override
        protected void onPostExecute(Boolean result) {
        }
    }.execute();
}
项目:PeSanKita-android    文件:AttachmentDatabase.java   
private ThumbnailData generateVideoThumbnail(MasterSecret masterSecret, AttachmentId attachmentId) {
  if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
    Log.w(TAG, "Video thumbnails not supported...");
    return null;
  }

  File mediaFile = getAttachmentDataFile(attachmentId, DATA);

  if (mediaFile == null) {
    Log.w(TAG, "No data file found for video thumbnail...");
    return null;
  }

  EncryptedMediaDataSource dataSource = new EncryptedMediaDataSource(masterSecret, mediaFile);
  MediaMetadataRetriever   retriever  = new MediaMetadataRetriever();
  retriever.setDataSource(dataSource);

  Bitmap bitmap = retriever.getFrameAtTime(1000);

  Log.w(TAG, "Generated video thumbnail...");
  return new ThumbnailData(bitmap);
}
项目:alpha-movie    文件:AlphaMovieView.java   
public void setVideoFromAssets(String assetsFileName) {
    reset();

    try {
        AssetFileDescriptor assetFileDescriptor = getContext().getAssets().openFd(assetsFileName);
        mediaPlayer.setDataSource(assetFileDescriptor.getFileDescriptor(), assetFileDescriptor.getStartOffset(), assetFileDescriptor.getLength());

        MediaMetadataRetriever retriever = new MediaMetadataRetriever();
        retriever.setDataSource(assetFileDescriptor.getFileDescriptor(), assetFileDescriptor.getStartOffset(), assetFileDescriptor.getLength());

        onDataSourceSet(retriever);

    } catch (IOException e) {
        Log.e(TAG, e.getMessage(), e);
    }
}
项目:VideoApplication    文件:MoviePlayer.java   
public MoviePlayer(File sourceFile, Surface outputSurface)
        throws IOException {
    // Pop the file open and pull out the video characteristics.
    // TODO: consider leaving the extractor open.  Should be able to just seek back to
    //       the start after each iteration of play.  Need to rearrange the API a bit --
    //       currently play() is taking an all-in-one open+work+release approach.
    try {
        Log.d(TAG, sourceFile.toString());
        MediaMetadataRetriever retriever = new MediaMetadataRetriever();
        retriever.setDataSource(sourceFile.toString());
        mVideoDuration = Long.valueOf(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION));
        Log.d(TAG, "Duration: " + mVideoDuration);
        retriever.release();

        mVideoDecoder = new VideoDecoder(this, sourceFile);
        mVideoDecoder.setOutputSurface(outputSurface);
        mAudioDecoder = new AudioDecoder(this, sourceFile);
        mVideoDecoder.prepare();
        mAudioDecoder.prepare();
    } catch (Exception ex) {
        release();
        throw new IOException(ex.getMessage());
    }
}
项目:editor-sql    文件:FeThumbUtils.java   
/**
 * 获取音乐thumb
 *
 * @param filePath 文件路径
 * @return 对应的缩略图
 */
public static Bitmap getMusicThumb(String filePath) {
    Bitmap bitmap = null;

    try {
        MediaMetadataRetriever retriever = new MediaMetadataRetriever();
        retriever.setDataSource(filePath);
        byte[] art = retriever.getEmbeddedPicture();

        if (art != null) {
            bitmap = BitmapFactory.decodeByteArray(art, 0, art.length);
        }
        retriever.release();

        return bitmap;
    } catch (Exception e) {
        if (bitmap != null && !bitmap.isRecycled()) {
            bitmap.recycle();
        }
        System.gc();
        return null;
    } catch (OutOfMemoryError o) {
        System.gc();
        return null;
    }
}
项目:PaoMovie    文件:StaticMethod.java   
/** 获取视频时长 **/
public static void getVideoInfor(int index) {
    MediaMetadataRetriever mmr = new MediaMetadataRetriever();
    VideoInfo vInfo = videosInfo.get(index);
    mmr.setDataSource(vInfo.videoPath);
    String videoTime = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); // 播放时长单位为毫秒
    String width = mmr.extractMetadata(android.media.MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH);
    String height = mmr.extractMetadata(android.media.MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT);
    String rotation = mmr.extractMetadata(android.media.MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION);

    if (rotation.equals("90") || rotation.equals("270")) {
        width = mmr.extractMetadata(android.media.MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT);
        height = mmr.extractMetadata(android.media.MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH);
    }
    vInfo.rotation = Integer.parseInt(rotation);
    vInfo.videoTime = Integer.parseInt(videoTime);
    vInfo.totalVideoTime = Integer.parseInt(videoTime);
    vInfo.endVideoTime = Integer.parseInt(videoTime);


    vInfo.width = Integer.parseInt(width);
    vInfo.height = Integer.parseInt(height);
}
项目:Mp3Player    文件:albumdetailadapter.java   
public albumdetailadapter(Context context,ArrayList<Songs> songwithalbum) {
    MediaMetadataRetriever data = new MediaMetadataRetriever();
    songs = songwithalbum;
    for(int i=0;i<songs.size() ;i++)
    {
        try {
            song.add(songs.get(i).gettitle());
            artist.add(songs.get(i).getartist());
        }
        catch (Exception e)
        {
            song.add("Unknown title");
            artist.add("Unknown artist");
        }

    }
    this.context  = context;

}
项目:NeteaseCloudMusic    文件:MP3Util.java   
@TargetApi(Build.VERSION_CODES.GINGERBREAD_MR1)
public static MusicBean parseMP3File(String path) {
    MediaMetadataRetriever mmr = new MediaMetadataRetriever();
    String name = null;
    String singer = null;
    String album = null;
    long duration = 0;


    try {
        mmr.setDataSource(path);
        name = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
        singer = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
        album = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM);
        duration = Long.valueOf(mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION));
        mmr.release();
    } catch (Exception e) {
        e.printStackTrace();
        return null;

    }
    return new MusicBean(name, singer, album, duration, path);
}
项目:NeteaseCloudMusic    文件:MP3Util.java   
@RequiresApi(api = Build.VERSION_CODES.GINGERBREAD_MR1)
public static Bitmap getAlbumArtFromMP3File(String path) {
    MediaMetadataRetriever mmr = new MediaMetadataRetriever();
    try {
        mmr.setDataSource(path);
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
        return null;
    }
    byte[] bytes = mmr.getEmbeddedPicture();
    if (null != bytes) {
        return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
    } else {
        return mmr.getFrameAtTime();
    }
}
项目:XDisplay    文件:AudioCoverUtil.java   
/**
 * get audio cover
 * @param filePath
 * @return
 */
public static Bitmap createAlbumArt(String filePath) {
    Bitmap bitmap = null;
    //能够获取多媒体文件元数据的类
    MediaMetadataRetriever retriever = new MediaMetadataRetriever();
    try {
        retriever.setDataSource(filePath); //设置数据源
        byte[] bytes = retriever.getEmbeddedPicture(); //得到字节型数据
        if(bytes!=null){
            bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); //转换为图片
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            retriever.release();
        } catch (Exception e2) {
            e2.printStackTrace();
        }
    }
    return bitmap;
}
项目:ScreenRecordCaptureMaster    文件:YZBRecordScreenDialog.java   
private void completeRecord(boolean isRestart) {
    mRecordStateImg.setImageResource(R.mipmap.iv_screen_close_default);
    stopRecordThread();
    if (mTimer == null) return;
    if (mCallback != null) {
        if (!isRestart) {
            MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
            mediaMetadataRetriever.setDataSource(mFile.getAbsolutePath());
            mCallback.onComplete(1, mFile.getAbsolutePath(), mCurrentTime, mediaMetadataRetriever.getFrameAtTime(0));
        } else {
            deleteFile(mFile);
            mCallback.onRestartRecord();
        }
    }
    stopTimer();
    checkFile();
    isStartRecord = false;
}
项目:GravityBox    文件:MusicTile.java   
@Override
public void onClientMetadataUpdate(RemoteController.MetadataEditor data) {
    mMetadata.trackTitle = data.getString(MediaMetadataRetriever.METADATA_KEY_TITLE,
            mMetadata.trackTitle);
    mMetadata.bitmap = data.getBitmap(MediaMetadataEditor.BITMAP_KEY_ARTWORK,
            mMetadata.bitmap);
    mClientIdLost = false;
    if ((mMetadata.trackTitle != null
            && !mMetadata.trackTitle.equals(mCurrentTrack))
        || (mMetadata.bitmap != null && !mMetadata.bitmap.sameAs(mCurrentBitmap))) {
        mCurrentTrack = mMetadata.trackTitle;
        mCurrentBitmap = mMetadata.bitmap;
        refreshState();
        if (DEBUG) log(getKey() + ": onClientMetadataUpdate");
    }
}
项目:Cable-Android    文件:AttachmentDatabase.java   
private ThumbnailData generateVideoThumbnail(MasterSecret masterSecret, AttachmentId attachmentId) {
  if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
    Log.w(TAG, "Video thumbnails not supported...");
    return null;
  }

  File mediaFile = getAttachmentDataFile(attachmentId, DATA);

  if (mediaFile == null) {
    Log.w(TAG, "No data file found for video thumbnail...");
    return null;
  }

  EncryptedMediaDataSource dataSource = new EncryptedMediaDataSource(masterSecret, mediaFile);
  MediaMetadataRetriever   retriever  = new MediaMetadataRetriever();
  retriever.setDataSource(dataSource);

  Bitmap bitmap = retriever.getFrameAtTime(1000);

  Log.w(TAG, "Generated video thumbnail...");
  return new ThumbnailData(bitmap);
}
项目:PlayAndroid    文件:LocalMusicLibrary.java   
/**
 * @Description 获取专辑封面
 * @return 专辑封面bitmap
 */
public static Bitmap createAlbumArt(String path) {
    if (TextUtils.isEmpty(path)) {
        return null;
    }
    Bitmap bitmap = null;
    //能够获取多媒体文件元数据的类
    MediaMetadataRetriever retriever = new MediaMetadataRetriever();
    try {
        retriever.setDataSource(path); //设置数据源
        byte[] embedPic = retriever.getEmbeddedPicture(); //得到字节型数据
        if (embedPic != null) {
            bitmap = BitmapFactory.decodeByteArray(embedPic, 0, embedPic.length); //转换为图片
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            retriever.release();
        } catch (Exception e2) {
            e2.printStackTrace();
        }
    }
    Log.d("zbj1101", "createAlbumArt:bitmap: " + bitmap + ",music: "+path);
    return bitmap;
}
项目:Camera-Roll-Android-App    文件:Util.java   
public static int[] getVideoDimensions(String path) throws FileNotFoundException {
    File file = new File(path);
    if (!file.exists()) {
        throw new FileNotFoundException();
    }

    MediaMetadataRetriever retriever = new MediaMetadataRetriever();

    try {
        retriever.setDataSource(path);
        Bitmap bitmap = retriever.getFrameAtTime();

        int[] dimensions = new int[2];

        if (bitmap != null) {
            dimensions[0] = bitmap.getWidth() > 0 ? bitmap.getWidth() : 1;
            dimensions[1] = bitmap.getHeight() > 0 ? bitmap.getHeight() : 1;
        }
        return dimensions;
    } catch (Exception e) {
        e.printStackTrace();
    }

    return new int[]{1, 1};
}
项目:Saiy-PS    文件:FileCreator.java   
/**
 * Used to get information about the written file
 */
private void getFileMeta() {

    if (absolutePath != null) {

        try {

            final MediaMetadataRetriever mmr = new MediaMetadataRetriever();
            mmr.setDataSource(absolutePath);
            final String duration = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
            mmr.release();

            if (DEBUG) {
                MyLog.i(CLS_NAME, "recording duration: " + duration);
            }

        } catch (final RuntimeException e) {
            if (DEBUG) {
                MyLog.w(CLS_NAME, "RuntimeException: completeFileWrite");
                e.printStackTrace();
            }
        }
    }
}
项目:RLibrary    文件:ImageGridActivity.java   
/**
 * 从视频文件中读取视频长度
 */
public static long getVideoDuration(Context context, String videoFile) {
    MediaMetadataRetriever retriever = new MediaMetadataRetriever();
    //use one of overloaded setDataSource() functions to set your data source
    String time;
    try {
        retriever.setDataSource(context, Uri.fromFile(new File(videoFile)));
        time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
        int width = Integer.parseInt(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT));
        int height = Integer.parseInt(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH));
    } finally {
        try {
            retriever.release();
        } catch (Exception ex) {
            // Ignore failures while cleaning up.
        }
    }

    long timeInMillisec = Long.parseLong(time);

    return timeInMillisec;
}
项目:Miam-Player-remote    文件:MiamPlayerMediaSessionV20.java   
@Override
public void updateSession() {
    // Update playstate
    if (App.MiamPlayer.getState() == MiamPlayer.State.PLAY) {
        mRcClient.setPlaybackState(android.media.RemoteControlClient.PLAYSTATE_PLAYING);
    } else {
        mRcClient.setPlaybackState(android.media.RemoteControlClient.PLAYSTATE_PAUSED);
    }

    // Change the data
    MySong song = App.MiamPlayer.getCurrentSong();
    if (song != null && song.getArt() != null) {
        android.media.RemoteControlClient.MetadataEditor editor = mRcClient.editMetadata(false);
        editor.putBitmap(android.media.RemoteControlClient.MetadataEditor.BITMAP_KEY_ARTWORK, song.getArt());

        // The RemoteControlClients displays the following info:
        // METADATA_KEY_TITLE (white) - METADATA_KEY_ALBUMARTIST (grey) - METADATA_KEY_ALBUM (grey)
        //
        // So I put the metadata not in the "correct" fields to display artist, track and album
        editor.putString(MediaMetadataRetriever.METADATA_KEY_ALBUM, song.getAlbum());
        editor.putString(MediaMetadataRetriever.METADATA_KEY_TITLE, song.getArtist());
        editor.putString(MediaMetadataRetriever.METADATA_KEY_ALBUMARTIST, song.getTitle());
        editor.apply();
    }
}
项目:mimi-reader    文件:GalleryWebmFragment.java   
private Bitmap getBitmapFromVideoFile(String path) {
    try {
        if (path == null) {
            return null;
        }

        MediaMetadataRetriever metadataRetriever = new MediaMetadataRetriever();
        metadataRetriever.setDataSource(path);
        final WeakReference<Bitmap> weakBmp = new WeakReference<>(metadataRetriever.getFrameAtTime());
        return weakBmp.get();
    } catch (Exception e) {
        Log.w(LOG_TAG, "Error getting bitmap from the video", e);
    }

    return null;
}
项目:MediaLoader    文件:AudioCoverUtil.java   
/**
 * get audio cover
 * @param filePath
 * @return
 */
public static Bitmap createAlbumArt(String filePath) {
    Bitmap bitmap = null;
    //能够获取多媒体文件元数据的类
    MediaMetadataRetriever retriever = new MediaMetadataRetriever();
    try {
        retriever.setDataSource(filePath); //设置数据源
        byte[] bytes = retriever.getEmbeddedPicture(); //得到字节型数据
        if(bytes!=null){
            bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); //转换为图片
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            retriever.release();
        } catch (Exception e2) {
            e2.printStackTrace();
        }
    }
    return bitmap;
}
项目:libcommon    文件:MediaVideoDecoder.java   
@Override
protected void updateMovieInfo(final MediaMetadataRetriever metadata) {
    super.updateMovieInfo(metadata);

    mVideoWidth = mVideoHeight = mRotation = 0;
    String value = metadata.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH);
    if (!TextUtils.isEmpty(value)) {
        mVideoWidth = Integer.parseInt(value);
    }
    value = metadata.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT);
    if (!TextUtils.isEmpty(value)) {
        mVideoHeight = Integer.parseInt(value);
    }
    value = metadata.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION);
    if (!TextUtils.isEmpty(value)) {
        mRotation = Integer.parseInt(value);
    }
}
项目:libcommon    文件:MediaMoviePlayer.java   
protected void updateMovieInfo() {
    mVideoWidth = mVideoHeight = mRotation = mBitrate = 0;
    mDuration = 0;
    mFrameRate = 0;
    String value = mMetadata.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH);
    if (!TextUtils.isEmpty(value)) {
        mVideoWidth = Integer.parseInt(value);
    }
    value = mMetadata.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT);
    if (!TextUtils.isEmpty(value)) {
        mVideoHeight = Integer.parseInt(value);
    }
    value = mMetadata.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION);
    if (!TextUtils.isEmpty(value)) {
        mRotation = Integer.parseInt(value);
    }
    value = mMetadata.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE);
    if (!TextUtils.isEmpty(value)) {
        mBitrate = Integer.parseInt(value);
    }
    value = mMetadata.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
    if (!TextUtils.isEmpty(value)) {
        mDuration = Long.parseLong(value) * 1000;
    }
}
项目:VideoRecord    文件:BaseScanVideoFileTask.java   
protected void insertVideoRecord(LocalVideoData localVideoData, LocalVideoDBManager db) {
    //生成时间
    SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日");
    String date=sdf.format(new Date(Long.parseLong(localVideoData.getId())));
    sdf=new SimpleDateFormat("HH:mm");
    String time=sdf.format(new Date(Long.parseLong(localVideoData.getId())));

    //计算视频时长
    MediaMetadataRetriever retriever = new MediaMetadataRetriever();
    retriever.setDataSource(localVideoData.getVideoLocalPath());
    String duration = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);

    //完善视频数据
    localVideoData.setVideoCreateDate(date);
    localVideoData.setVideoCreateTime(time);
    localVideoData.setVideoLength(Integer.parseInt(duration) / 1000);
    localVideoData.setIsLooked(1);
    if(db instanceof SystemVideoDataTableManager) {
        localVideoData.setIsImport(1);
    } else {
        localVideoData.setIsImport(0);
    }

    db.insert(localVideoData);
}
项目:miku    文件:VideoUtils.java   
public static boolean needToCrop(String originMediaPath) {
  MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
  mediaMetadataRetriever.setDataSource(originMediaPath);
  int videoWidth =
      Integer.parseInt(mediaMetadataRetriever
          .extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH));
  int videoHeight =
      Integer.parseInt(mediaMetadataRetriever
          .extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT));
  int rotation = getRotation(mediaMetadataRetriever);
  mediaMetadataRetriever.release();
  if (rotation == 0 || rotation == 180) {
    return videoHeight != videoWidth * 3 / 4;
  } else if (rotation == 90 || rotation == 270) {
    return videoWidth != videoHeight * 3 / 4;
  }
  return true;
}
项目:miku    文件:VideoUtils.java   
public static String getVideoCover(String videoPath, String coverName) {
  coverName = TextUtils.isEmpty(coverName) ? COVER_NAME : coverName;
  String parentPath = new File(videoPath).getParent();
  String coverPath = parentPath.endsWith(File.separator) ? parentPath
      + coverName : parentPath + File.separator + coverName;
  if (new File(coverPath).isFile()) {
    return coverPath;
  }
  MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
  mediaMetadataRetriever.setDataSource(videoPath);
  Bitmap bitmap = mediaMetadataRetriever.getFrameAtTime(1);
  mediaMetadataRetriever.release();
  if (bitmap != null) {
    return FileUtils.saveBitmapToFile(bitmap, new File(videoPath).getParent(), coverName,
        FILTER_COVER_NAME.equals(coverName) ? 10 : 100);
  }
  return "";
}
项目:ChatMessagesAdapter-android    文件:VideoThumbnailFetcher.java   
@Override
public InputStream loadData(Priority priority) throws Exception {
    MediaMetadataRetriever retriever = new MediaMetadataRetriever();
    try {
        Log.d("VideoThumbnailFetcher", "model.path= " + model.path);
        retriever.setDataSource(model.path, new HashMap<String, String>());
        Bitmap bitmap = retriever.getFrameAtTime();
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
        byte[] picture = stream.toByteArray();
        if (picture != null) {
            return new ByteArrayInputStream(picture);
        } else {
            return fallback(model.path);
        }
    } finally {
        retriever.release();
    }
}
项目:patrol-android    文件:UploadVideoActivity.java   
private boolean checkIsHaveMetaData(Uri fileUri) {
    try {
        MediaMetadataRetriever metadataRetriever = new MediaMetadataRetriever();
        metadataRetriever.setDataSource(this, fileUri);

        contentData = metadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DATE);
        contentLocation = metadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_LOCATION);
        metadataRetriever.release();

        parsMetaLocation();

        SimpleDateFormat metaDateFormat = new SimpleDateFormat(Constants.VIDEO_META_DATE_MASK);
        violationDate = metaDateFormat.parse(contentData);
        return true;

    } catch (Exception e) {
        e.printStackTrace();
        contentNotReady();
        return false;
    }
}
项目:Cirrus    文件:PreviewMediaFragment.java   
/**
 * tries to read the cover art from the audio file and sets it as cover art.
 *
 * @param file audio file with potential cover art
 */
private void extractAndSetCoverArt(OCFile file) {
    if (file.isAudio()) {
        try {
            MediaMetadataRetriever mmr = new MediaMetadataRetriever();
            mmr.setDataSource(file.getStoragePath());
            byte[] data = mmr.getEmbeddedPicture();
            if (data != null) {
                Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
                mImagePreview.setImageBitmap(bitmap); //associated cover art in bitmap
            } else {
                mImagePreview.setImageResource(R.drawable.logo);
            }
        } catch (Throwable t) {
            mImagePreview.setImageResource(R.drawable.logo);
        }
    }
}
项目:unity-ads-android    文件:Cache.java   
@TargetApi(10)
private static SparseArray<String> getMetaData (final String videoFile, JSONArray requestedMetaDatas) throws JSONException, IOException, RuntimeException {
    File f = new File(videoFile);
    SparseArray<String> returnArray = new SparseArray<>();

    if (f.exists()) {
        MediaMetadataRetriever metadataRetriever = new MediaMetadataRetriever();
        metadataRetriever.setDataSource(f.getAbsolutePath());

        for (int i = 0; i < requestedMetaDatas.length(); i++) {
            int metaDataKey = requestedMetaDatas.getInt(i);
            String metaDataValue = metadataRetriever.extractMetadata(metaDataKey);

            if (metaDataValue != null) {
                returnArray.put(metaDataKey, metaDataValue);
            }
        }
    }
    else {
        throw new IOException("File: " + f.getAbsolutePath() + " doesn't exist");
    }

    return returnArray;
}
项目:screenrecorder    文件:Mp4toGIFConverter.java   
public void convertToGif(){
    //MediaMetadataRetriever tRetriever = new MediaMetadataRetriever();

    try{
        mediaMetadataRetriever.setDataSource(context, videoUri);

        //extract duration in millisecond
        String DURATION = mediaMetadataRetriever.extractMetadata(
                MediaMetadataRetriever.METADATA_KEY_DURATION);
        maxDur = (long)(Double.parseDouble(DURATION));

        Log.d(Const.TAG, "max dur is" + maxDur);

        TaskSaveGIF myTaskSaveGIF = new TaskSaveGIF();
        myTaskSaveGIF.execute();
    }catch(RuntimeException e){
        e.printStackTrace();
        Toast.makeText(context,
                "Something Wrong!",
                Toast.LENGTH_LONG).show();
    }
}
项目:teardrop    文件:CompatIcs.java   
/**
 * Update the remote with new metadata.
 * {@link #registerRemote(Context, AudioManager)} must have been called
 * first.
 *
 * @param context A context to use.
 * @param song The song containing the new metadata.
 * @param state PlaybackService state, used to determine playback state.
 */
public static void updateRemote(Context context, Song song, int state)
{
    RemoteControlClient remote = sRemote;
    if (remote == null)
        return;

    remote.setPlaybackState((state & PlaybackService.FLAG_PLAYING) != 0 ? RemoteControlClient.PLAYSTATE_PLAYING : RemoteControlClient.PLAYSTATE_PAUSED);
    RemoteControlClient.MetadataEditor editor = remote.editMetadata(true);
    if (song != null) {
        editor.putString(MediaMetadataRetriever.METADATA_KEY_ARTIST, song.artist);
        editor.putString(MediaMetadataRetriever.METADATA_KEY_ALBUM, song.album);
        editor.putString(MediaMetadataRetriever.METADATA_KEY_TITLE, song.title);
        Bitmap bitmap = song.getCover(context);
        if (bitmap != null) {
            // Create a copy of the cover art, since RemoteControlClient likes
            // to recycle what we give it.
            bitmap = bitmap.copy(Bitmap.Config.RGB_565, false);
        }
        editor.putBitmap(RemoteControlClient.MetadataEditor.BITMAP_KEY_ARTWORK, bitmap);
    }
    editor.apply();
}
项目:Musico    文件:PlayerFragment.java   
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    v = inflater.inflate(R.layout.layout_player_fragment, container, false);

    mAlbumArt = (ImageView) v.findViewById(R.id.albumArt);
    mSongInfo = (TextView) v.findViewById(R.id.songInfo);

    Bundle bundle = getArguments();
    MediaMetadataRetriever metadataRetriever = new MediaMetadataRetriever();
    metadataRetriever.setDataSource(bundle.getString("filepath"));
    String filepath = bundle.getString("filepath");
    mSongInfo.setText(filepath);


    return v;
}
项目:Vafrinn    文件:LockScreenTransportControlV16.java   
@Override
public void onVideoInfoChanged() {
    if (mRemoteControlClient == null) return;

    RemoteVideoInfo videoInfo = getVideoInfo();

    String title = null;
    long duration = 0;
    if (videoInfo != null) {
        title = videoInfo.title;
        duration = videoInfo.durationMillis;
    }

    android.media.RemoteControlClient.MetadataEditor editor = mRemoteControlClient.editMetadata(
            true);
    editor.putString(MediaMetadataRetriever.METADATA_KEY_TITLE, title);
    editor.putLong(MediaMetadataRetriever.METADATA_KEY_DURATION, duration);
    updateBitmap(editor);
    editor.apply();
}
项目:android-video-compression    文件:MainActivity.java   
private String[] extractInfoMediaMetadataRetriever(Uri uri){
  MediaMetadataRetriever retriever = new MediaMetadataRetriever();
  retriever.setDataSource(this, uri);
  String length = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);

  String width = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH);
  String height = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT);
  String res;
  int rotation = Integer.parseInt(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION));
  if(rotation==90 || rotation==180){
    res = height + "x" + width;
  }else{
    res = width + "x" + height;
  }

  return new String[] {length, res};
}
项目:GifAssistant    文件:ExtractPicturesWorker.java   
public static Bitmap extractBitmap(String videoPath, int second) {
    if (TextUtils.isEmpty(videoPath)) {
        logd("extractBitmap empty video path");
        return null;
    }

    MediaMetadataRetriever retriever = new MediaMetadataRetriever();
    retriever.setDataSource(videoPath);
    // 取得视频的长度(单位为毫秒)
    String time = retriever
            .extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
    // 取得视频的长度(单位为秒)
    int total = Integer.valueOf(time) / 1000;

    if (second < 0 || second > total) {
        loge("unavalible second(" + second + "), total(" + total + ")");
        return null;
    }

    Bitmap bitmap = retriever.getFrameAtTime(second * 1000 * 1000,
            MediaMetadataRetriever.OPTION_CLOSEST_SYNC);

    return bitmap;
}
项目:GifAssistant    文件:VideosInfo.java   
private String formatFileDuration(String path) {
    MediaMetadataRetriever retriever = new MediaMetadataRetriever();
    retriever.setDataSource(path);
    // 取得视频的长度(单位为毫秒)
    String time = retriever
            .extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
    // 取得视频的长度(单位为秒)
    int totalS = Integer.valueOf(time) / 1000;

    DecimalFormat df = new DecimalFormat("#.00");
    String totalDuration = "";
    if (totalS < 60) {
        totalDuration = df.format((double) totalS) + "秒";
    } else if (totalS < 3600) {
        totalDuration = df.format((double) totalS / 60) + "分";
    } else if (totalS < 3600*24) {
        totalDuration = df.format((double) totalS / 3600) + "时";
    }

    return totalDuration;
}
项目:allinone    文件:MediaMuxerTest.java   
private void verifyLocationInFile(String fileName) {
    MediaMetadataRetriever retriever = new MediaMetadataRetriever();
    retriever.setDataSource(fileName);
    String location = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_LOCATION);
    assertNotNull("No location information found in file " + fileName, location);
    // parsing String location and recover the location inforamtion in floats
    // Make sure the tolerance is very small - due to rounding errors.
    // Get the position of the -/+ sign in location String, which indicates
    // the beginning of the longtitude.
    int index = location.lastIndexOf('-');
    if (index == -1) {
        index = location.lastIndexOf('+');
    }
    assertTrue("+ or - is not found", index != -1);
    assertTrue("+ or - is only found at the beginning", index != 0);
    float latitude = Float.parseFloat(location.substring(0, index - 1));
    float longitude = Float.parseFloat(location.substring(index));
    assertTrue("Incorrect latitude: " + latitude,
            Math.abs(latitude - LATITUDE) <= TOLERANCE);
    assertTrue("Incorrect longitude: " + longitude,
            Math.abs(longitude - LONGITUDE) <= TOLERANCE);
    retriever.release();
}
项目:Camera2    文件:LocalDataUtil.java   
/**
 * Loads the thumbnail of a video.
 *
 * @param path The path to the video file.
 * @return {@code null} if the loading failed.
 */
public static Bitmap loadVideoThumbnail(String path) {
    Bitmap bitmap = null;
    MediaMetadataRetriever retriever = new MediaMetadataRetriever();
    try {
        retriever.setDataSource(path);
        byte[] data = retriever.getEmbeddedPicture();
        if (data != null) {
            bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
        }
        if (bitmap == null) {
            bitmap = retriever.getFrameAtTime();
        }
    } catch (IllegalArgumentException e) {
        Log.e(TAG, "MediaMetadataRetriever.setDataSource() fail:" + e.getMessage());
    }
    retriever.release();
    return bitmap;
}
项目:Camera2    文件:VideoRotationMetadataLoader.java   
static void loadRotationMetdata(final LocalData data) {
    final String path = data.getPath();
    MediaMetadataRetriever retriever = new MediaMetadataRetriever();
    try {
        retriever.setDataSource(path);
        String rotation = retriever.extractMetadata(
            MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION);
        data.getMetadata().putString(ROTATION_KEY, rotation);

        String val = retriever.extractMetadata(
                MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH);
        int width = Integer.parseInt(val);

        data.getMetadata().putInt(WIDTH_KEY, width);

        val = retriever.extractMetadata(
                MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT);
        int height = Integer.parseInt(val);

        data.getMetadata().putInt(HEIGHT_KEY, height);
    } catch (RuntimeException ex) {
        // setDataSource() can cause RuntimeException beyond
        // IllegalArgumentException. e.g: data contain *.avi file.
        Log.e(TAG, "MediaMetdataRetriever.setDataSource() fail", ex);
    }
}