【问题标题】:Unable to play audio in firebase storage sent from android app无法在从 Android 应用发送的 Firebase 存储中播放音频
【发布时间】:2019-08-27 03:33:58
【问题描述】:

我正在使用 Firebase 存储从我的 Android 应用上传音频,然后下载并在我的应用中播放。 音频文件已上传,但是当我从 Firebase 存储播放它时,它采用如下图所示的视频格式,并且不播放音频。 我还将元数据设置为音频/mp3。

我尝试在 firebase 文档和谷歌中搜索相同的内容,但无法解决我的问题。

Uri file = Uri.fromFile(new File(fileName));
 //filename is audio stored in my phone's local storage.

StorageMetadata metadata = new StorageMetadata.Builder()
            .setContentType("audio/mp3")
            .build();

// Upload the file and metadata


 UploadTask uploadTask = storageReference.child("audio/audio.mp3").putFile(file, metadata);

uploadTask.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
    @Override
    public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
        double progress = (100.0 * taskSnapshot.getBytesTransferred()) / taskSnapshot.getTotalByteCount();
    }
}).addOnPausedListener(new OnPausedListener<UploadTask.TaskSnapshot>() {
    @Override
    public void onPaused(UploadTask.TaskSnapshot taskSnapshot) {
    }
}).addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception exception) {
        // Handle unsuccessful uploads
    }
}).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
    @Override
    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
        // Handle successful uploads on complete
        // ...
        Task<Uri> uri = taskSnapshot.getStorage().getDownloadUrl();
        while(!uri.isComplete());
        Uri url = uri.getResult();

        Toast.makeText(MainActivity.this, "Upload Success, download URL " +
                url.toString(), Toast.LENGTH_LONG).show();
    }
});

Task<Uri> urlTask = uploadTask.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();
        }

        // Continue with the task to get the download URL
        return storageReference.getDownloadUrl();

    }
}).addOnCompleteListener(new OnCompleteListener<Uri>() {
    @Override
    public void onComplete(@NonNull Task<Uri> task) {
        if (task.isSuccessful()) {
            Uri downloadUri = task.getResult();

        } else {
            // Handle failures
            // ...
        }
    }
});

我希望将音频正确保存在 Firebase 存储中,然后将其流式传输到我的应用中。 任何帮助将不胜感激。 谢谢!

【问题讨论】:

    标签: android firebase audio firebase-storage


    【解决方案1】:

    您的问题可能是由 MediaRecorder 引起的。我发现输出格式应该设置为AAC。然后浏览器就可以播放了。当我尝试使用 React JS 在 Android 中播放 MediaRecorder 捕获的音频时遇到了这个问题,我尝试了各种格式(.3gp、.mp4、.wav),但这是唯一有效的一种。我怀疑还有其他的。

    所以:

    mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    mRecorder.setOutputFormat(MediaRecorder.OutputFormat.AAC_ADTS);
    mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
    

    【讨论】:

    • 完美解决方案。
    【解决方案2】:

    这样试试,

    
    metadata = new StorageMetadata.Builder()
            .setContentType("audio/mpeg")
            .build();
    
    uploadTask = storageRef.child("audio/"+file.getLastPathSegment()).putFile(file,metadata);
    

    【讨论】:

    • 我尝试了上面的代码,但问题仍然存在。
    猜你喜欢
    • 2017-10-27
    • 2019-04-03
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多