将视频从 Firebase 存储加载到 videoView
Load Video from Firebase Storage to videoView
我想使用 videoview 播放来自 Firebase 存储的视频 我正在尝试这样:
storageReference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
//Toast.makeText(Chat.this, uri.toString(), Toast.LENGTH_SHORT).show();
MediaController mc = new MediaController(Chat.this);
videoView.setMediaController(mc);
videoView.setVideoURI(uri);
videoView.requestFocus();
//videoView.start();
}
});
但是它不会播放。视频是空的。
首先,请确保存储中的视频实际上是 Android 设备可以播放的格式。 VideoView 无法播放所有内容 - 只有 types of videos that Android supports.
您现在通过将 uri 直接传递到 VideoView 所做的操作被解释为尝试从给定的 uri 流式传输视频。 Firebase 存储不支持视频流,所以这是行不通的。从 uri 流式传输要求另一端的服务器能够流式传输给定的资源。
如果要播放存储中的视频,您必须先下载整个,保存到本地文件,然后将VideoView指向本地播放文件。
可以通过将视频 URL 存储在数据库中,然后将它们呈现在由 Webview/Youtube 单行集成
组成的 Recyclerview 中来实现
我觉得回答的时间有点晚了,不过这个回答给以后找的人:
通过RecyclerView
从适配器
中的数据快照查看拨号Uri
@Override
protected void onStart() {
super.onStart();
final FirebaseRecyclerAdap...///
) {
@Override
protected void popul...////
/////
viewHolder.setVideo(Uri.parse(String.valueOf(videoUri)),model.getVideo());
// Here the position is sent to videoview adapter
final String post_key = getRef( position ).getKey().toString();
final String post_id = String.valueOf(post_key);
viewHolder.setUid(model.getUid());
// Here the position is sent to videoview adapter
viewHolder.setVideo(post_id);
viewHolder.setUserprofile(getApplication(),model.getUserprofile());
}
yourAdpater ....
}
public static class ViewHolder extends RecyclerView.ViewHolder {
View mView;
Videoview post_video ;
public ViewHolder(View itemView) {
super(itemView);
mView = itemView;
post_video = (VideoView ) mView.findViewById(R.id.videoView);
}
public void setVideo(final String post_id) {
mDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//
Uri uri=Uri.parse(dataSnapshot.child(post_id).child("video").getValue(true).toString());
//You can set up the video display as you like
post_video.setVideoURI(uri);
post_video.requestFocus();
post_video.start();
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
数据库应如下所示:
look here.
祝你好运。
我遇到了同样的问题,以下解决方案对我有用:
将此字符串添加到 AndroidManifest.xml 文件
<uses-permission android:name="android.permission.INTERNET" />
我想使用 videoview 播放来自 Firebase 存储的视频 我正在尝试这样:
storageReference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
//Toast.makeText(Chat.this, uri.toString(), Toast.LENGTH_SHORT).show();
MediaController mc = new MediaController(Chat.this);
videoView.setMediaController(mc);
videoView.setVideoURI(uri);
videoView.requestFocus();
//videoView.start();
}
});
但是它不会播放。视频是空的。
首先,请确保存储中的视频实际上是 Android 设备可以播放的格式。 VideoView 无法播放所有内容 - 只有 types of videos that Android supports.
您现在通过将 uri 直接传递到 VideoView 所做的操作被解释为尝试从给定的 uri 流式传输视频。 Firebase 存储不支持视频流,所以这是行不通的。从 uri 流式传输要求另一端的服务器能够流式传输给定的资源。
如果要播放存储中的视频,您必须先下载整个,保存到本地文件,然后将VideoView指向本地播放文件。
可以通过将视频 URL 存储在数据库中,然后将它们呈现在由 Webview/Youtube 单行集成
组成的 Recyclerview 中来实现我觉得回答的时间有点晚了,不过这个回答给以后找的人:
通过RecyclerView
从适配器
Uri
@Override
protected void onStart() {
super.onStart();
final FirebaseRecyclerAdap...///
) {
@Override
protected void popul...////
/////
viewHolder.setVideo(Uri.parse(String.valueOf(videoUri)),model.getVideo());
// Here the position is sent to videoview adapter
final String post_key = getRef( position ).getKey().toString();
final String post_id = String.valueOf(post_key);
viewHolder.setUid(model.getUid());
// Here the position is sent to videoview adapter
viewHolder.setVideo(post_id);
viewHolder.setUserprofile(getApplication(),model.getUserprofile());
}
yourAdpater ....
}
public static class ViewHolder extends RecyclerView.ViewHolder {
View mView;
Videoview post_video ;
public ViewHolder(View itemView) {
super(itemView);
mView = itemView;
post_video = (VideoView ) mView.findViewById(R.id.videoView);
}
public void setVideo(final String post_id) {
mDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//
Uri uri=Uri.parse(dataSnapshot.child(post_id).child("video").getValue(true).toString());
//You can set up the video display as you like
post_video.setVideoURI(uri);
post_video.requestFocus();
post_video.start();
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
数据库应如下所示:
look here.
祝你好运。
我遇到了同样的问题,以下解决方案对我有用:
将此字符串添加到 AndroidManifest.xml 文件
<uses-permission android:name="android.permission.INTERNET" />