使用 Toro 视频库的网络 url 中的视频未显示在 Recyclerview 中

video not display in Recyclerview from web url using Toro video library

我正在从事一个项目,该项目涉及使用改造从后端显示视频列表,我想使用 recyclerview 在 UI 上显示带有一些数据的视频,我正在尝试使用TORO 视频库来处理视频,但没有显示视频,视频 space 是空白和黑色,除此之外,视频已成功显示。 如果我弄错了,我想要的是正确使用库,或者 link 到你已经测试过的我可以使用的其他库,或者如果你以前做过,你如何在你自己的项目中使用它。

检查下面与库一起使用的适配器代码。

package com.theproject.allClass.adapters;

import android.app.Activity;
import android.content.Context;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.VideoView;

import com.bumptech.glide.Glide;
import com.google.android.exoplayer2.ui.SimpleExoPlayerView;
import com.klinker.android.simple_videoview.SimpleVideoView;
import com.theproject.R;
import com.theproject.allClass.api.model.AuditionRoom;
import com.theproject.allClass.api.model.Timeline;

import java.util.List;

import im.ene.toro.ToroPlayer;
import im.ene.toro.ToroUtil;
import im.ene.toro.exoplayer.SimpleExoPlayerViewHelper;
import im.ene.toro.media.PlaybackInfo;
import im.ene.toro.widget.Container;

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

    private Context context;
    private List<AuditionRoom> data;

    public AuditionRoomAdapter(Context context, List<AuditionRoom> data) {
        this.context = context;
        this.data = data;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.audition_timeline, viewGroup, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, int position) {
        holder.username.setText(data.get(position).getUsername());
        holder.userPostText.setText(data.get(position).getUserMessage());
        holder.yes.setText(""+data.get(position).getYes_votes_count());
        holder.no.setText(""+data.get(position).getNo_votes_count());
        Glide.with(context).load(data.get(position).getUserProfilepicUrl()).into(holder.userProfilePic);
//        Glide.with(context).load(data.get(position).getUpload_file_url()).into(holder.userPostImage);
        holder.bind(Uri.parse(data.get(position).getUpload_file_url()));

    }

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

    public class ViewHolder extends RecyclerView.ViewHolder implements ToroPlayer{

        TextView username;
        TextView userPostText;
        TextView yes;
        TextView no;
        ImageView userProfilePic;
        ImageView userPostImage;
        SimpleExoPlayerView playerView;
        SimpleExoPlayerViewHelper helper;
        Uri mediaUri;

        public ViewHolder(View itemView) {
            super(itemView);

            userProfilePic = itemView.findViewById(R.id.audition_user_profile_pic);
            username = itemView.findViewById(R.id.audition_user_name);
            userPostText =  itemView.findViewById(R.id.audition_user_post_text);
            //userPostImage = itemView.findViewById(R.id.audition_user_post_image);
            playerView = itemView.findViewById(R.id.player);

            yes =  itemView.findViewById(R.id.audition_yes_figure);
            no = itemView.findViewById(R.id.audition_no_figure);
        }

        @NonNull
        @Override
        public View getPlayerView() {
            return playerView;
        }

        @NonNull
        @Override
        public PlaybackInfo getCurrentPlaybackInfo() {
            return helper != null ? helper.getLatestPlaybackInfo() : new PlaybackInfo();
        }

        @Override
        public void initialize(@NonNull Container container, @Nullable PlaybackInfo playbackInfo) {
            if (helper == null) {
                helper = new SimpleExoPlayerViewHelper(container, this, mediaUri);
            }
            helper.initialize(playbackInfo);
        }

        @Override
        public void play() {
            if (helper != null) helper.play();
        }

        @Override
        public void pause() {
            if (helper != null) helper.pause();
        }

        @Override
        public boolean isPlaying() {
            return helper != null && helper.isPlaying();
        }

        @Override
        public void release() {
            if (helper != null) {
                helper.release();
                helper = null;
            }
        }

        @Override
        public boolean wantsToPlay() {
            return ToroUtil.visibleAreaOffset(this, itemView.getParent()) >= 0.85;
        }

        @Override
        public int getPlayerOrder() {
            return getAdapterPosition();
        }

        @Override
        public void onSettled(Container container) {

        }

        // called from Adapter to setup the media
        void bind(Uri item) {
            if (item != null) {
                mediaUri = item;
            }
        }
    }
}

The result of the recyclerview with video not working link github 到图书馆 https://github.com/eneim/toro/

我能够通过将架构(http 或 https)添加到加载来解决问题 url,TORO 库非常适合在 recyclerview 上显示视频,经过测试和确认。

我遇到了同样的错误,但我通过添加解决了它 Container 而不是 RecycerView.

<im.ene.toro.widget.Container android:id="@+id/recyleVideo" android:layout_width="match_parent" android:layout_height="match_parent" />