Firebase Storage, невозможно воспроизвести записанное звуковое сообщение. Замена старой регистрации новой записью. Как решить?

Пытаюсь реализовать систему чата с возможностью отправки голосовых сообщений. Вот немного моей логики: поддерживать кнопку и передавать ее сообщение. После этого отпустите кнопку, сообщение будет сохранено в хранилище firestore. Я делаю запись хорошо, но сталкиваюсь с двумя препятствиями: при новой записи предыдущая запись перезаписывается, я бы предпочел иметь полный список голосовых сообщений в моем хранилище firenase. К тому же после записи не могу открыть голос. Кто-нибудь может меня спасти?

введите описание изображения здесь

Вот мой код: Oncreate Methode

fileName = Environment.getExternalStorageDirectory().getAbsolutePath();
        fileName += "/recored_audio.3gp" ;
        btnrecoder.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {

                if (event.getAction() == MotionEvent.ACTION_DOWN) {

                    startRecording();
                    btnrecoder.setText(" Recording start...");
                } else if (event.getAction() == MotionEvent.ACTION_UP) {
                    stopRecording();
                }
                return  true;
            }
        });

Out of the onCreate  :

    private void startRecording() {
        MediaRecorder  recorder = new MediaRecorder();
            recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
            recorder.setOutputFile(fileName);
            recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

            try {
                recorder.prepare();
            } catch (IOException e) {
                Log.e(LOG_TAG, "prepare() failed" + e.getMessage());
            }

            recorder.start();
        }

        private void stopRecording() {
            recorder = new MediaRecorder();

            recorder.release();
            try{
                recorder.stop();
            }catch(RuntimeException stopException){
                //handle cleanup here
                Log.d(TAG," message derreure " + stopException.getMessage());
            }
            recorder = null;
            uploadAudio();

        }


        private void uploadAudio(){

            StorageReference fii = storageReference.child("Audio").child("new audio.3gp");
            Uri uri = Uri.fromFile(new File(fileName));
            fii.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                    btnrecoder.setText("Uploading finished");
                    Toast.makeText(FriendList.this, "Vocal Save to db storage", Toast.LENGTH_SHORT).show();
                }
            });
        }

Были вопросы, похожие на этот, на которые не было конкретных ответов


person Rolanddev    schedule 24.02.2020    source источник
comment
@Frank van Puffelen   -  person Rolanddev    schedule 25.02.2020


Ответы (1)


Как я писал здесь, Невозможно воспроизвести звук в firebase хранилище, отправленное из приложения для Android,

Ваша проблема могла быть вызвана MediaRecorder. Я понял, что формат вывода должен быть установлен на AAC. Тогда браузер сможет поиграть в нее. У меня возникла эта проблема, когда я пытался использовать React JS для воспроизведения звука, записанного с помощью MediaRecorder, в Android, и я пробовал различные форматы (.3gp, .mp4, .wav), но это единственный, который работал. Я подозреваю, что есть и другие.

So:

mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.AAC_ADTS);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
person OlgaPp    schedule 17.03.2020
comment
В итоге я нашел ответ. Я использовал AAC для кодировщика: mediaRecorder = new MediaRecorder (); mediaRecorder.setAudioSource (MediaRecorder.AudioSource.MIC); mediaRecorder.setOutputFormat (MediaRecorder.OutputFormat.MPEG_4); mediaRecorder.setAudioEncoder (MediaRecorder.AudioEncoder.AAC); lecture.setBackgroundResource (R.drawable.ic_play_noir); mediaRecorder.setAudioEncodingBitRate (128000); mediaRecorder.setAudioSamplingRate (96000); mediaRecorder.setOutputFile (выходной файл); - person Rolanddev; 18.03.2020