私はビデオアプリに取り組んでいます。サーバーリンクからビデオをストリーミングしていますが、ビデオをダウンロードせずにURLからビデオサムネイルを生成することは可能ですか?.
ストリーミングリンクからサムネイルを作成することはできません。サーバーから表示する必要があります。動画に沿ってサムネイルをアップロードしてください。以下のコードを使用してサムネイルを生成します
Bitmap bitmap = ThumbnailUtils.createVideoThumbnail("picturePath", MediaStore.Video.Thumbnails.MINI_KIND);
ビデオをダウンロードせずに、以下のコードからサムネイルを生成できます。
public static Bitmap retriveVideoFrameFromVideo(String videoPath) throws Throwable
{
Bitmap bitmap = null;
MediaMetadataRetriever mediaMetadataRetriever = null;
try
{
mediaMetadataRetriever = new MediaMetadataRetriever();
if (Build.VERSION.SDK_INT >= 14)
mediaMetadataRetriever.setDataSource(videoPath, new HashMap<String, String>());
else
mediaMetadataRetriever.setDataSource(videoPath);
// mediaMetadataRetriever.setDataSource(videoPath);
bitmap = mediaMetadataRetriever.getFrameAtTime();
} catch (Exception e) {
e.printStackTrace();
throw new Throwable("Exception in retriveVideoFrameFromVideo(String videoPath)" + e.getMessage());
} finally {
if (mediaMetadataRetriever != null) {
mediaMetadataRetriever.release();
}
}
return bitmap;
}
注:ビデオはイントラとして保存され、非イントラ(ピクチャフレーム)getFrameAtTimeは、最も近い非イントラフレームをビットマップとして返します。したがって、基本的にはビデオ全体をダウンロードすることはありません。
私はグライドでこれを試してみましたが、うまくいきました、グライドバージョン4.3.1
GlideApp.with(context)
.asBitmap()
.load(FILE_URL)
.diskCacheStrategy(DiskCacheStrategy.DATA)
.into(iv_picture);
編集:グライドは私のために遅く働いていた
トップの答えはいくつかのビデオで結果を出していない、ここに私がそれをやった方法がある
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
//give YourVideoUrl below
retriever.setDataSource("YourVideoUrl", new HashMap<String, String>());
// this gets frame at 2nd second
Bitmap image = retriever.getFrameAtTime(2000000, MediaMetadataRetriever.OPTION_CLOSEST_SYNC);
//use this bitmap image
リンクは次のとおりです。
私の意見では、サーバー側はビデオからサムネイルを作成し、サービスを通じてサムネイルビデオ画像を転送する必要があります。
これを使ってみて
Bitmap bitmap=ThumbnailUtils.createVideoThumbnail("VIDEO FILE ADDRESS",MediaStore.Video.Thumbnails.MINI_KIND);
この方法では、携帯電話のすべての動画ファイルのサムネイルが表示されます...気軽に質問してください
public static Bitmap[] getThumbnail(Context context){
Uri uri=MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
String[] projection=new String[] { MediaStore.Video.Thumbnails._ID };
Cursor ca = context.getContentResolver().query(uri, projection, null, null, null);
Bitmap[] b=new Bitmap[ca.getCount()];
int i=0;
ca.moveToFirst();
while(i<ca.getCount()) {
int id = ca.getInt(ca.getColumnIndex(MediaStore.Video.Thumbnails._ID));
b[i++]=MediaStore.Video.Thumbnails.getThumbnail(context.getContentResolver(),id, MediaStore.Images.Thumbnails.MINI_KIND, null );
ca.moveToNext();
}
ca.close();
return b;
}