1. 程式人生 > >android 獲取視訊幀

android 獲取視訊幀


今天做android視訊檔案解碼,需求:從一個視訊檔案獲取到一幀一幀的圖片。

總結如下:

首先看程式碼:

MediaDecoder.java

import android.graphics.Bitmap;
import android.media.MediaMetadataRetriever;
import android.util.Log;

public class MediaDecoder {
	private static final String TAG = "MediaDecoder";
	private MediaMetadataRetriever retriever = null;
	private String fileLength;

	public MediaDecoder(String file) {
		if(CommonUtils.checkFile(file)){
			retriever = new MediaMetadataRetriever();
			retriever.setDataSource(file);
			fileLength = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
			Log.i(TAG, "fileLength : "+fileLength);
		}
	}
	/**
	 * 獲取視訊某一幀
	 * @param timeMs 毫秒
	 * @param listener 
	 */
	public boolean decodeFrame(long timeMs,OnGetBitmapListener listener){
		if(retriever == null) return false;
		Bitmap bitmap = retriever.getFrameAtTime(timeMs * 1000, MediaMetadataRetriever.OPTION_CLOSEST);
		if(bitmap == null) return false;
		listener.getBitmap(bitmap, timeMs);	
		return true;
	}
	/**
	 * 取得視訊檔案播放長度
	 * @return
	 */
	public String getVedioFileLength(){
		return fileLength;
	}

}
這裡是獲取視訊幀工具,除錯的時候遇到一些問題:

其中一個是getFrameAtTime引數的使用,先看方法原型:public Bitmap getFrameAtTime(long timeUs, int option) 第一個引數是傳入時間,只能是us(微秒) ,當時我傳入的ms,獲取的總是第一幀,所以這個問題都弄了好久。

然後是第二個引數,先看看官方解釋:

OPTION_CLOSEST    在給定的時間,檢索最近一個幀,這個幀不一定是關鍵幀

   在給定的時間,檢索最近一個同步與資料來源相關聯的的幀(關鍵幀)。

 在給定時間之後檢索一個同步與資料來源相關聯的關鍵幀。

這裡為了提取我們想要的幀,不使用關鍵幀,所以用 OPTION_CLOSEST .

相關推薦

android 獲取視訊

今天做android視訊檔案解碼,需求:從一個視訊檔案獲取到一幀一幀的圖片。 總結如下: 首先看程式碼: MediaDecoder.java import android.graphics.Bitmap; import android.media.MediaMetadat

android 獲取視訊某一時間的,並獲取bitmap

最近要做一個為視訊設定封面的功能,這裡展示一下簡單的demo。 demo效果 這裡直接將選取的視訊某一時間的bitmap顯示在視訊下方。上面是視訊,下面是所獲取那一幀的截圖。 具體程式碼 這裡的話主要是靠videoView來顯示視訊內容,seekBar來控制視訊的進

Android獲取視訊的關鍵和非關鍵

public Bitmap getFrameAtTime() //如果不加引數的話,提取第一個關鍵幀 public Bitmap getFrameAtTime() { return getFrameAtTime(-1, OPTION_CLOSEST_SYNC);

android 從檔案獲取視訊

轉自:https://blog.csdn.net/heart_Moving/article/details/17414067MediaDecoder.javaimport android.graphics.Bitmap; import android.media.MediaM

Android 獲取視訊第一縮圖

乾貨 從API 8開始,新增了一個類: android.media.ThumbnailUtils這個類提供了3個靜態方法一個用來獲取視訊第一幀得到的Bitmap,2個對圖片進行縮略處理。 public static Bitmap createVideoThumbna

Android -- 獲取視訊第一縮圖

從API 8開始,新增了一個類: android.media.ThumbnailUtils這個類提供了3個靜態方法一個用來獲取視訊第一幀得到的Bitmap,2個對圖片進行縮略處理。 public static Bitmap createVideoThumbnail (

android 獲取視訊縮圖終極解決方案(ffmpeg)

前些天有個師弟(在做一個仿LinkInEyes行車記錄儀的app)問我怎麼獲取視訊縮圖,起初以為很簡單,就找了個常用的解決方案(使用者獲取正常的視訊檔案的縮圖): 方案1: private void initView() { imgPic = (

Android 獲取視訊縮圖以及獲取視訊解析度

今天遇到一個問題,視訊播放不能居中。 在設定VideoView的Layout時候,把整個螢幕分配給VideoView。 不過Video在播放的時候,對於成寬比和螢幕不一樣的視訊,卻沒有把視訊播放到中央。 採用相同的策略,ImageView就可以把影象放到螢幕最中央,感覺是V

Android 獲取視訊(本地和網路)縮圖的解決方案

在Android 開發視訊的時候,通常都需要顯示視訊列表,而視訊列表通常都有一張視訊縮圖,那麼它是怎麼獲取的呢, 關於網路視訊的縮圖的實現方案主要有兩種: 1、後臺返回視訊時順便連縮圖的路徑都返回給你了,這樣前端壓力輕鬆。 2、後臺是返回視訊路徑,關於縮圖

Android 播放視訊獲取指定時間的畫面

轉載:https://blog.csdn.net/u011506413/article/details/51704445   Android 播放視訊並獲取指定時間的幀畫面   六.VideoView播放視訊,MediaMetadataRetriever獲取幀畫面

android獲取攝像頭視訊資料

1.思路 一.通過android的Camera.setPreviewCallback(PreviewCallback cb)監聽回撥. 二.此回撥函式public void onPreviewFrame(byte[] data, Camera camera)每回調一次就是

Android如何獲取視訊預覽圖(或首)和獲取視訊時長

Android獲取視訊預覽圖(或首幀)和獲取時長需要用到MediaMetadataRetriever類,獲取預覽圖使用getFrameAtTime()方法,獲取時長使用extractMetadata(MediaMetadataRetriever.METADATA_KEY_DU

android獲取圖片原始長寬,獲取視訊第一的縮圖

public static Bitmap getVideoThumbnail(String videoPath) { MediaMetadataRetriever media =new MediaMetadataRetriever(); media.setDataSource(videoPat

Android中如何獲取視訊的第一圖片並顯示在一個ImageView中

String path  = Environment.getExternalStorageDirectory().getPath();MediaMetadataRetriever media = new MediaMetadataRetriever();media.setD

Android之使用MediaMetadataRetriever類獲取視訊第一

一.首先,來介紹一下MediaMetadataRetriever類,此類位於android.media包下,這裡,先附上可檢視此類的API地址:MediaMetadataRetriever類,大家可以自行檢視。 1.MediaMetadataRetriever類概述:Med

LibVLC for android 解碼視訊獲取每一

一、背景      最近有一個需求,使用android系統的裝置,從IP攝像頭(RTSP SERVER)獲取到的視訊中的每一幀進行處理(人臉檢測),直接使用ffmpeg進行實現比較簡單,但是苦於對ffmpeg不太熟悉,獲取到的視訊延遲較高,只好轉戰看看LibVLC能否獲得更好

獲取視訊的每一,並儲存為.jpg圖片

#include<opencv2\opencv.hpp> #include <iostream> #include <stdio.h> #include<fstream> using namespace std; using names

Java圖片,視訊上傳,擷取視訊以及檔案下載和視訊IO獲取

public class FileUtil { @Value("${img.url}") public String imgUrl; @Value("${video.url}") public String videoUrl; /** * 儲存圖片 * @para

檔案上傳至oss後,獲取圖片縮率圖、獲取視訊等後續操作

上一篇文章說了一下檔案上傳至oss:https://blog.csdn.net/new_programmer_h/article/details/84307005 這裡說一下上傳後的一些後續操作:常用的獲取圖片縮率圖、獲取視訊截幀生成封面圖。自我感覺阿里oss對於這些處理封裝的很好,只要根據:"%s|sys

ffmpeg處理視訊獲取第一截圖

<?php //使用PHP SDK,並且使用自定義配置檔案 require app_path().'/include/BaiduBce.phar'; require app_path().'/include/SampleConf.php'; require app_path().'