使用 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" />
我正在从事一个项目,该项目涉及使用改造从后端显示视频列表,我想使用 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" />