【问题标题】:Custom streaming implementation自定义流式实现
【发布时间】:2016-02-13 18:17:08
【问题描述】:

我正在尝试实现我自己的流媒体版本。我正在通过 websocket 发送字节数组。收到第一条消息后,我将其写入临时文件并使用 android 的 MediaPlayer 播放文件。对于第一条消息,一切正常,我将字节数组转换为 mp3 并输出音频。但是,我不确定每次收到消息时如何继续写入文件。

一些示例代码

File test;
FileOutputStream fos;
MediaPlayer mediaPlayer;
FileInputStream MyFile;

每次消息通过此代码时都会运行。

                try {
                    if (fos == null) {
                        test = File.createTempFile("TCL", "mp3", getCacheDir());
                        fos = new FileOutputStream(test);
                        fos.write(bytearray);

                        mediaPlayer = new MediaPlayer();
                        MyFile = new FileInputStream(test);
                        mediaPlayer.setDataSource(MyFile.getFD());
                        mediaPlayer.prepare();
                        if(!mediaPlayer.isPlaying()){
                            mediaPlayer.start();
                        }

                    }else{
                        fos.write(bytearray);

                    }
                } catch (IOException ex) {
                    ex.printStackTrace();
                }

我以为我可以继续将传入的字节 [] 写入文件,但这似乎不起作用。任何意见,将不胜感激。

【问题讨论】:

    标签: java android stream android-mediaplayer


    【解决方案1】:

    MediaPlayer 不支持您尝试执行的操作(播放无限增长的文件中的音频)。相反,请考虑自己解码音频并将原始 PCM 数据发送到AudioTrack。工作量很大,但 AudioTrack 是渐进式播放音频数据流的最简单方法。

    【讨论】:

    • 我正在试一试,我已经尝试过实现,但它对我不起作用,它播放了第一个字节 [],我听到了音频,然后它停止了,任何指向我可以看看的例子?
    • 我不能推荐一个具体的例子,因为我编写的所有用于 AudioTrack 流的代码都是封闭源代码。但是您必须将 AudioTrack 置于流模式,并且您必须继续对其进行写入。我确信这里有足够的关键字来搜索一些样本。 :-)
    • 谢谢,我有它的工作,它正在读取所有字节[],但只是作为静态返回。我会想办法的,谢谢!
    • 另外请记住,如果音频已编码,则必须对其进行解码。例如,AudioTrack 不接受 mp3 编码数据,因此您必须在写入之前将其转换为原始 PCM 数据。这是一个完全独立的问题要解决。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    • 2018-10-26
    • 1970-01-01
    • 2018-06-07
    • 1970-01-01
    • 2014-02-01
    相关资源
    最近更新 更多