Android: как показывать URL-адреса видео в режиме просмотра с миниатюрами - PullRequest
0 голосов
/ 19 ноября 2018

В моем приложении для Android я должен показывать различные видео с нашего сервера с миниатюрой. Миниатюра должна идти вместе с кнопкой воспроизведения. Когда мы нажимаем на кнопку воспроизведения, видео должно воспроизводиться. Я попробовал приведенный ниже код, но его нет отображение именно того, что я хочу, а также занимает некоторое время. Я не хочу использовать уменьшенное изображение, уже прикрепленное к видео, вместо этого просто создайте миниатюру во время выполнения.

public class AttachmentGridAdapter extends RecyclerView.Adapter<AttachmentGridAdapter.ViewHolder> {

List<Attachments> item = new ArrayList<Attachments>();
Context context;

private static LayoutInflater inflater=null;
private Typeface fontFamily;

public AttachmentGridAdapter(Context activity, List<Attachments> arrayList, Typeface fontFamily) {
    item=arrayList;
    context=activity;
    this.fontFamily=fontFamily;
    inflater = ( LayoutInflater )context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    final View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.grid_attachment, parent, false);
    final ViewHolder vh = new ViewHolder(v);
    return vh;
}

@Override
public void onBindViewHolder(final AttachmentGridAdapter.ViewHolder gridHolder, final int position) {
    gridHolder.gridAttachmentItem=item.get(position);

        try {
            Bitmap bitmap = null;

                try {
                    bitmap = retriveVideoFrameFromVideo(gridHolder.gridAttachmentItem.getUrl());
                } catch (Throwable throwable) {
                    throwable.printStackTrace();
                }
                if (bitmap != null) {
                    bitmap = Bitmap.createScaledBitmap(bitmap, 240, 240, false);
                    gridHolder.imgAttachment.setImageBitmap(bitmap);
                }
        }catch (Exception e){
            e.printStackTrace();
        }



}

@Override
public int getItemCount() {
    return item.size();
}

public class ViewHolder extends RecyclerView.ViewHolder {
    Attachments gridAttachmentItem;
    ImageView imgExpAttachment;

    public ViewHolder(View itemView) {
        super(itemView);
        imgExpAttachment=(ImageView) itemView.findViewById(R.id.imgExpAttachment);
    }
}

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);

        bitmap = mediaMetadataRetriever.getFrameAtTime(1, MediaMetadataRetriever.OPTION_CLOSEST);
    } catch (Exception e) {
        e.printStackTrace();
        throw new Throwable(
                "Exception in retriveVideoFrameFromVideo(String videoPath)"
                        + e.getMessage());

    } finally {
        if (mediaMetadataRetriever != null) {
            mediaMetadataRetriever.release();
        }
    }
    return bitmap;
}

}
...