java - 下载在线音频流并将其部分保存

标签 java android audio audio-streaming audio-recording

我正在尝试下载音频流并将其保存为250kb的部分。我通过下载音频文件,关闭连接并以250kb的速度开始新的下载来使其工作。但是,以这种方式执行操作时,我在音频文件之间缺少大约10秒钟的音频。

我用于下载250kb部分音频流的代码是:

public void downloadMP3() {
    Thread thread = new Thread(new Runnable() {
        @Override
        public void run() {
            try {

                URL url = new URL("http://icecast.omroep.nl/3fm-bb-aac");
                InputStream inputStream = url.openStream();
                File filemp3 = new File(
                        Environment.getExternalStorageDirectory() + "/radiorecordings/file" + fileCount + ".mp4a");
                FileOutputStream fileOutputStream = new FileOutputStream(filemp3);

                int c;
                int bytesRead = 0;

                //keep reading until file is 250kb (250.000 bytes)
                while ((c = inputStream.read()) != -1 && bytesRead < 250000) {
                    Log.d("...", "bytesRead=" + bytesRead);
                    fileOutputStream.write(c);
                    bytesRead++;
                }

                fileCount++;
                downloadMP3();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });

我知道使用Thread不是最好的解决方案,但这不是要解决的问题。有什么原因使这些片段彼此不完全匹配?

最佳答案

音频部分之间的间隙可能是由于连接已关闭并重新打开。

为什么不始终保持连接打开,并使用缓冲的输出流写入文件?您可以编写自己的输出流(通过扩展常规缓冲的输出流)并将其写入文件。一旦达到250kb,它可以决定关闭该文件并重新打开一个新文件,同时将音频缓冲到内存中。

关于java - 下载在线音频流并将其部分保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35864991/

相关文章:

java - 如何在 Spring RequestHandlerRetryAdvice 中以指数方式增加重试间隔

android - 如何管理android微调器项目的高度?

audio - 将 MFCC 特征向量与 DTW 进行比较

java - 将 Swing UI 提升到一个新的水平?

java - UnsupportedClassVersionError : has been compiled by a more recent version of the Java Runtime (class file version 55. 0),此版本 (..) 最高为 52.0

android - 'soft launch' 使用 Expo 构建的新 React Native 应用程序的最佳方法是什么?

java - 垂直 ViewPager 中的动画

JavaFX:点击某物时播放声音

javascript - 如何为 IOS 9 初始化 SoundJS

java - 由 : org. hibernate.TransientObjectException : The given object has a null identifier: com. models.User on hibernate update 引起