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; }
/** * 初始化缩略图 */ 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(); }
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); }
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); } }
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()); } }
/** * 获取音乐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; } }
/** 获取视频时长 **/ 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); }
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; }
@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); }
@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(); } }
/** * 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; }
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; }
@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"); } }
/** * @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; }
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}; }
/** * 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(); } } } }
/** * 从视频文件中读取视频长度 */ 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; }
@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(); } }
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; }
@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); } }
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; } }
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); }
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; }
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 ""; }
@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(); } }
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; } }
/** * 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); } } }
@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; }
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(); } }
/** * 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(); }
@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; }
@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(); }
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}; }
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; }
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; }
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(); }
/** * 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; }
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); } }