将视频从Firebase存储加载到videoView

时间:2017-02-05 15:32:16

标签: android firebase android-videoview firebase-storage

我想通过带有视频的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();
                    }
                });

但它不会播放。视频是空的。

4 个答案:

答案 0 :(得分:6)

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

通过将uri直接传递到VideoView,您现在正在做的事情被解释为尝试从给定的uri流式传输视频。 Firebase存储不支持视频流,因此无法使用。从uri流式传输需要另一端的服务器能够流式传输给定的资源。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我认为答案的时间已经很晚了,但是对于那些以后寻找它的人来说这是答案:

通过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 :(得分:-1)

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

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

FROM node:stretch

ARG APP_ENV='prod'

IF APP_ENV == 'prod'
COPY src/ /app
# do some other specific instructions for production.
ENDIF

EXPOSE 3000