【问题标题】:I want to retrieve videos from firebase storage我想从 Firebase 存储中检索视频
【发布时间】:2019-03-14 11:13:38
【问题描述】:

我正在开发简单的 firebase 应用程序,在该应用程序中我将用户信息作为注册数据上传,并将视频上传到存储中。视频路径也存储在实时数据库中,作为每个正常工作的特定用户的嵌套子级,但我不知道如何检索视频并在用户配置文件中设置其他用户信息。我需要代码来从存储中检索视频。

     case PICK_VIDEO_REQUEST:
            if (resultCode == RESULT_OK) {


                selectedVideoUri = data.getData();
               userUid = FirebaseAuth.getInstance().getCurrentUser().getEmail();
                StorageReference storageRef = FirebaseStorage.getInstance().getReference();
                filename = data.getData().getLastPathSegment();
                tv_file_path.setText(filename);
                videoRef = storageRef.child("/videos/" + userUid + "/" + filename);
                //TODO: save the video in the db


            }
            break;




`//Button upload data in firebase
    btn_upload_notes.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            uploadData(selectedVideoUri);


                           try {
                               if (FirebaseAuth.getInstance().getCurrentUser().getEmail().equals(value.getT_email())) {

                                   file_name = filename;
                                   notes_Category = text;
                                   lecture_topic = et_topic.getText().toString().trim();
                                   id = mDatabase.push().getKey();
                                   NotesModelClass notesModelClass = new NotesModelClass(id, notes_Category, lecture_topic, file_name);
                                   mDatabase.child(value.getT_id()).child("Video Notes").child(id).setValue(notesModelClass);
                                   return;
                               }
                           }
                           catch (Exception ex){
                               throw  ex;
                           }

        }
    });

`

     private void uploadData(Uri videoUri) {
    if (videoUri != null) {
        final ProgressDialog progressDialog = new ProgressDialog(this);
        progressDialog.setTitle("Uploading...");
        progressDialog.show();
        UploadTask uploadTask = videoRef.putFile(videoUri);

        uploadTask.addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
                if (task.isSuccessful())
                    progressDialog.dismiss();
                Toast.makeText(MainActivity.this, "Upload Complete", Toast.LENGTH_SHORT).show();

            }
        }).addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
                double progress = (100.0 * taskSnapshot.getBytesTransferred() / taskSnapshot
                        .getTotalByteCount());
                progressDialog.setMessage("Uploaded " + (int) progress + "%");
            }
        });
    } else {
        Toast.makeText(MainActivity.this, "Nothing to upload", Toast.LENGTH_SHORT).show();
    }

}

【问题讨论】:

    标签: java android firebase firebase-storage


    【解决方案1】:

    试试这个代码

    检索单个视频。

    StorageReference videoRef = storageRef.child("/videos/" + userUid + "/" + filename);
    
    final long ONE_MEGABYTE = 1024 * 1024;
    videoRef.getBytes(ONE_MEGABYTE).addOnSuccessListener(new OnSuccessListener<byte[]>() {
        @Override
        public void onSuccess(byte[] bytes) {
            // Transform bytes to a video, play
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception exception) {
            // Handle any errors
        }
    });
    

    检索多个视频

     StorageTask<UploadTask.TakeSnapshot> storageTask;
            storageTask = yourStorageRefernce.putFile(videoUri);
            storageTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
                @Override
                public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
                    if (!task.isSuccessful()) {
                        throw task.getException();
                    }
                    return yourStorageRefernce.getDownloadUrl();
                }
            }).addOnCompleteListener(new OnCompleteListener<Uri>() {
                @Override
                public void onComplete(@NonNull Task<Uri> task) {
                    if (task.isSuccessful()) {
                        Uri downloadUri = task.getResult();
                        arrayList.add(downloadUri.toString());
                    }
                }
            });
    

    【讨论】:

    • 最欢迎 ^_^
    • 我在每个用户文件夹中有多个视频,我想一次检索所有视频以添加到数组列表中,然后根据要求进一步使用它们
    • “videoUri”值应该是什么。如果我在存储参考中设置路径。
    • videoUri 的值就是你在方法参数中传入的uri。 private void uploadData(Uri videoUri) { if (videoUri != null) {
    • 如果我已经将路径设置为“mstorageRef”,我不明白如何处理 videoUri。如果我将存储路径设置为 videosUri,那么它会要求将类型转换为“UploadTask”。
    【解决方案2】:

    帮我在 firebase 中随机播放视频

    private void loadVideosFromFirebase() {
    
        videoArrayList=new ArrayList<>();
    
        DatabaseReference reb = FirebaseDatabase.getInstance().getReference().child("Videos");
        reb.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
    
                for (DataSnapshot ds:dataSnapshot.getChildren()) {
                    ModelVideo modelVideo = ds.getValue(ModelVideo.class);
                    videoArrayList.add(modelVideo);
    
                }
                adapterVideo = new AdapterVideo(VideosActivity.this,videoArrayList);
                videosRv.setAdapter(adapterVideo);
    
    
            }
    
            @Override
            public void onCancelled(@NonNull DatabaseError error) {
    
            }
        });
    }
    

    【讨论】:

    • 欢迎来到 SO!您能否解释一下您的代码以及为什么它可以解决此问题?谢谢!
    • 你能帮我通过修复另一个代码从firebase输出随机视频吗,ModelVideo是seter和getter(字符串id,字符串标题,字符串时间戳,字符串videoUrl),RecyclerView videosRv,AdapterVideo是视频播放处理程序
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    • 2018-06-11
    • 2020-10-23
    • 2016-10-18
    相关资源
    最近更新 更多