Я хочу извлекать видео из хранилища firebase

#java #android #firebase #firebase-storage

#java #Android #firebase #firebase-хранилище

Вопрос:

Я работаю над простым приложением 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();
    }

}
  

Ответ №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());
                }
            }
        });
  

Комментарии:

1. Приветствую ^_^

2. У меня есть несколько видео в каждой отдельной папке пользователя, я хочу извлечь их все сразу, чтобы добавить в arraylist, а затем дополнительно использовать их в соответствии с требованиями

3. каким должно быть значение «videoUri». если я задаю путь в ссылке на хранилище.

4. Значением videoUri является uri, который вы передаете в параметре метода. private void uploadData(Uri videoUri) { if (videoUri != null) {

5. Я не совсем понимаю, что делать с videoUri, если я уже устанавливаю путь к «mstorageRef». Если я установлю путь к хранилищу в 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) {

        }
    });
}
  

Комментарии:

1. Добро пожаловать в SO! Не могли бы вы, пожалуйста, объяснить свой код и почему он решает эту проблему? Спасибо!

2. можете ли вы помочь мне вывести случайное видео из firebase, исправив другой код, ModelVideo — это средство установки и получения (идентификатор строки, заголовок строки, временная метка строки, строка videoURL), RecyclerView videosRv, AdapterVideo — обработчик воспроизведения видео