【问题标题】:Load Video from Firebase Storage to videoView将视频从 Firebase 存储加载到 videoView
【发布时间】:2017-06-22 13:41:40
【问题描述】:

我想用我正在尝试这样的视频视图播放来自 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();
                    }
                });

但它不会播放。视频为空。

【问题讨论】:

  • @RamithDR 我不希望视频流只是将视频从存储加载到 videoview
  • storageReference 的值是多少?视频格式是什么?
  • 我认为 FireBase 改变了一些东西!!!我现在可以很好地流式传输视频了。
  • @grant 你能帮忙处理你用来解决这个问题的代码吗?

标签: android firebase android-videoview firebase-storage


【解决方案1】:

首先,请确保 Storage 中的视频实际上是 Android 设备可以播放的格式。 VideoView 无法播放所有内容 - 只有types of videos that Android supports

您现在通过将 uri 直接传递到 VideoView 所做的事情被解释为尝试从给定 uri 流式传输视频。 Firebase 存储不支持视频流,所以这是行不通的。从 uri 流式传输要求另一端的服务器能够流式传输给定资源。

如果要播放存储中的视频,您必须先下载整个,保存到本地文件,然后将 VideoView 指向本地文件进行播放。

【讨论】:

  • 过去两天我一直在寻找解决方案,并在这里得到了提示。为这个声明鼓掌Firebase 存储不支持视频流,所以这是行不通的。 就像你上面所说的,我已经成功地将文件从 Firebase 存储下载到我的移动存储。现在,问题是我也有一个适配器。我在哪里将本地存储的路径设置为VideoViewMainActivity?还是我的MessageAdapter?你能看看这个post。请指导我。
  • 在使用 videoView 以外的视频播放器时可以正常工作!就像 exo 播放器..
【解决方案2】:

我认为答案的时间已经晚了,但是这个答案给那些正在寻找它的人:

通过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.

祝你好运。

【讨论】:

    【解决方案3】:

    可以通过将视频 URL 存储在数据库中,然后将它们呈现在 Recyclerview 中,该 Recyclerview 由单行中的 Webview/Youtube 集成组成

    【讨论】:

      【解决方案4】:

      我遇到了同样的问题,以下解决方案对我有用:

      将此字符串添加到 AndroidManifest.xml 文件

      <uses-permission android:name="android.permission.INTERNET" />
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-25
        • 1970-01-01
        • 1970-01-01
        • 2019-09-22
        • 2018-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多