[英]How to partially stream an mp3 file
我正在尝试部分流mp3文件,但是请求的“字节标记”之前的所有字节都被下载:
我正在使用JLayer(Java Zoom- http://www.javazoom.net/javalayer/javalayer.html )播放mp3文件。
import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import javazoom.jl.decoder.JavaLayerException; import javazoom.jl.player.advanced.AdvancedPlayer; try { URL url = new URL("http://somerandomsite.com/audiotestfile.mp3"); URLConnection connection = url.openConnection(); connection.connect(); int fileSize = connection.getContentLength(); InputStream inputStream = url.openStream(); System.out.println("Filesize in bytes: " + fileSize); // Lets assume the filesize of the mp3 file is 7000000 bytes long skippedBytes = inputStream.skip(6000000); // Skip to 6000000 bytes to only stream the file partially System.out.println("Skipped bytes: " + skippedBytes); // The skipped bytes are equal to 6000000 bytes, but all previous bytes are still being downloaded. AdvancedPlayer ap = new AdvancedPlayer(inputStream); ap.play(); } catch (FileNotFoundException | JavaLayerException e) { System.out.println(e.getMessage()); }
我如何部分流媒体?
我认为您想要做的是让服务器仅从6000000字节开始向您发送消息,但是如您所见,上面的代码实际上是下载整个流,并且只是忽略或“跳过”了前6000000字节。
这是因为InputStream.skip本质上会读入并忽略您告诉它跳过的字节。 从InputStream的文档中跳过:
此类的skip方法创建一个字节数组,然后重复读取该字节数组,直到已读取n个字节或到达流的末尾为止。
我认为您真正想做的是从服务器请求它从mp3文件中的第6000001个字节开始向您流式传输。 一种实现方法是使用称为“字节服务”的概念:
在此答案中,有一个来回往返于服务器的消息流的示例-在这种情况下,它是用于mp4文件的,但是方法是完全相同的: https : //stackoverflow.com/a/8507991/334402
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.