首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Toro视频库在web url中的回收视图中不显示视频

使用Toro视频库在web url中的回收视图中不显示视频
EN

Stack Overflow用户
提问于 2018-02-07 10:15:01
回答 2查看 1K关注 0票数 0

我正在做一个项目,通过改造从后端显示视频列表,我想用回收视图显示UI上的一些数据,我尝试使用TORO视频库来处理视频,但不是显示视频空间是空白的,黑色和其他信息,除了视频被成功地显示出来。如果我弄错了,我想要的是正确地使用这个库,或者链接到您测试过的其他库,如果您以前做过,或者您如何在自己的项目中使用它。

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

代码语言:javascript
运行
复制
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;
            }
        }
    }
}

视频回收站的效果链接到github https://github.com/eneim/toro/上的库

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-08 14:31:36

我能够通过将模式(http或https)添加到加载url中来解决这个问题,TORO库很适合在回收视图上显示视频,经过测试和确认。

票数 1
EN

Stack Overflow用户

发布于 2020-07-09 12:40:54

我得到了同样的错误,但是我通过添加Container而不是RecycerView来解决这个问题。

代码语言:javascript
运行
复制
<im.ene.toro.widget.Container android:id="@+id/recyleVideo" android:layout_width="match_parent" android:layout_height="match_parent" />
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48661147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档