iam using exoPlayer to play video url from realtime database but exoPlayer refuse to run video when i press play button, and i use last version from library implementation 'com.google.android.exoplayer:exoplayer:2.18.1'.
this is my first time using ExoPlayer i dont know how fix it.
the following error catched in logcat:
logcat
2022-09-19 21:06:44.435 16179-20518/com.example.task17 E/ExoPlayerImplInternal: Playback error
com.google.android.exoplayer2.ExoPlaybackException: Source error
viewHolder
public class viewHolder extends RecyclerView.ViewHolder {
View mView;
ExoPlayer exoPlayer;
private PlayerView mExoPlayerView;
ArrayList<member> mediaSources_contents = new ArrayList<>();
public viewHolder(@NonNull View itemView) {
super(itemView);
mView = itemView;
}
public void setVideo(final Context ctx, String title, final String url){
TextView mTextView = mView.findViewById(R.id.titletv);
mExoPlayerView = mView.findViewById(R.id.exoPlayer_view);
mTextView.setText(title);
try {
exoPlayer = new ExoPlayer.Builder(ctx).build();
Uri video = Uri.parse(url);
MediaSource mediaSource = new ProgressiveMediaSource.Factory(new
FileDataSource.Factory()).createMediaSource(MediaItem.fromUri(video));
mExoPlayerView.setPlayer(exoPlayer);
exoPlayer.prepare(mediaSource);
exoPlayer.setPlayWhenReady(false);
} catch (Exception e) {
Log.e( "ViewHolder", "exoPlayer Error"+ e.toString());
e.printStackTrace();
}
}
}
Main Activty
public class MainActivity extends AppCompatActivity {
RecyclerView mRecyclerView;
FirebaseDatabase database;
DatabaseReference reference;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = findViewById(R.id.recyclerview_video);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
database = FirebaseDatabase.getInstance();
reference = database.getReference("video");
}
@Override
protected void onStart() {
super.onStart();
FirebaseRecyclerOptions<member> options =
new FirebaseRecyclerOptions.Builder<member>()
.setQuery(reference, member.class)
.build();
FirebaseRecyclerAdapter<member,viewHolder> firebaseRecyclerAdapter =
new FirebaseRecyclerAdapter<member, viewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull viewHolder holder, int position,
@NonNull member model) {
holder.setVideo(MainActivity.this,model.getTitle(),model.getUrl());
}
@NonNull
@Override
public viewHolder onCreateViewHolder(@NonNull ViewGroup parent, int
viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row,
parent, false);
viewHolder viewHolder = new viewHolder(view);
return viewHolder;
}
};
mRecyclerView.setAdapter(firebaseRecyclerAdapter);
firebaseRecyclerAdapter.startListening();
}
}
realtime structure
video
1
title:"video 1"
url: "link"
2
title:"video 2"
url: "link"