SDカードパスからビデオのサムネイルを作成したい。どうやってやるの?
ThumbnailUtils
クラスを使用して、ビデオファイルのビデオサムネイルを取得できます。
createVideoThumbnail()
は、ビデオファイルパスからビデオのビットマップ(サムネイル)を返すメソッドです。
From Android Docs:
public static Bitmap createVideoThumbnail(String filePath、int kind)
動画の動画サムネイルを作成します。ビデオが破損しているか、形式がサポートされていない場合はnullを返す場合があります。
このようなSDカードパスからVideoThumbnailを作成できます。
Bitmap thumb = ThumbnailUtils.createVideoThumbnail(filePath, Thumbnails.MINI_KIND);
ThumbnailUtils
を使用すると、2つのタイプのサムネイルを作成できます。
MediaStore.Images.Thumbnails.MICRO_KIND
タイプはサイズ96 x 96のサムネイルを生成します。
MediaStore.Images.Thumbnails.MINI_KIND
タイプは、サイズ512 x 384のサムネイルを生成します。
私はそれが役立つことを願っています!
それがあなたを助けることを願って私のコードをチェックしてください
/**
* Retrieve video frame image from given video path
*
* @param p_videoPath
* the video file path
*
* @return Bitmap - the bitmap is video frame image
*
* @throws Throwable
*/
@SuppressLint("NewApi")
public static Bitmap retriveVideoFrameFromVideo(String p_videoPath)
throws Throwable
{
Bitmap m_bitmap = null;
MediaMetadataRetriever m_mediaMetadataRetriever = null;
try
{
m_mediaMetadataRetriever = new MediaMetadataRetriever();
m_mediaMetadataRetriever.setDataSource(p_videoPath);
m_bitmap = m_mediaMetadataRetriever.getFrameAtTime();
}
catch (Exception m_e)
{
throw new Throwable(
"Exception in retriveVideoFrameFromVideo(String p_videoPath)"
+ m_e.getMessage());
}
finally
{
if (m_mediaMetadataRetriever != null)
{
m_mediaMetadataRetriever.release();
}
}
return m_bitmap;
}
必要に応じて上記の方法を変更します
次のようにサムネイルを直接作成する場合
Bitmap thumb = ThumbnailUtils.createVideoThumbnail(path,
MediaStore.Images.Thumbnails.MINI_KIND);
大きなビデオセット(多数のビデオ)のサムネイルを作成している場合、この方法には問題があります。すべてのプロセスがメインスレッドで実行されているため、すべてのサムネイルがロードされるまで、アプリケーションはフリーズします。
SuziLoaderを使用
このローダーは、バックグラウンドでファイルシステムにローカルに保存されているビデオのサムネイルをロードします。
String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/video.mp4";
ImageView mThumbnail = (ImageView) findViewById(R.id.thumbnail);
SuziLoader loader = new SuziLoader(); //Create it for once
loader.with(MainActivity.this) //Context
.load(path) //Video path
.into(mThumbnail) // imageview to load the thumbnail
.type("mini") // mini or micro
.show(); // to show the thumbnail
この依存関係を取得するには、次の手順を使用します
ステップ1。 JitPackリポジトリをビルドファイルに追加します
リポジトリの最後にあるルートbuild.gradleに追加します。
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
ステップ2。依存関係を追加する
dependencies {
compile 'com.github.sushinpv:SuziVideoThumbnailLoader:0.1.0'
}
外部ストレージの読み取り許可をマニフェストに追加
<uses-permission Android:name="Android.permission.READ_EXTERNAL_STORAGE"/>