У меня есть короткий звуковой пример игрок такой код, который работает отлично:Невозможно воспроизвести mp3 поток с JMF
public class AudioTest {
public static void main(String[] args) {
Format input1 = new AudioFormat(AudioFormat.MPEGLAYER3);
Format input2 = new AudioFormat(AudioFormat.MPEG);
Format output = new AudioFormat(AudioFormat.LINEAR);
PlugInManager.addPlugIn(
"com.sun.media.codec.audio.mp3.JavaDecoder",
new Format[]{input1, input2},
new Format[]{output},
PlugInManager.CODEC);
try {
Player player = Manager.createPlayer(new File("tone.mp3").toURL());
player.start();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
Теперь я хотел течь mp3 из сервлета с:
Manager.createPlayer(new URL("http://localhost:88/media/tone.mp3"));
сервлет получает запрос, я открываю тестовый файл и отправляю запросчику. Проблема в том, что mp3 не воспроизводится (нет звука) и никакого сообщения об ошибке вообще.
Если я загружаю файл через браузер, файл воспроизводится правильно.
сервлета выглядит следующим образом:
public class MediaSource extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.err.println(req);
File mp3 = new File("tone.mp3");
InputStream in = new FileInputStream(mp3);
resp.setContentType("audio/mpeg");
resp.addHeader("Content-Disposition",
"attachment; filename=" + mp3.getName());
resp.setContentLength((int) mp3.length());
ServletOutputStream out = resp.getOutputStream();
byte buf[] = new byte[1024];
int n = in.read(buf, 0, 1024);
while (n > 0) {
out.write(buf, 0, n);
out.flush();
n = in.read(buf, 0, 1024);
}
in.close();
out.close();
}
}
Update для @jogabonito
Это те события,
javax.media.TransitionEvent[[email protected],previous=Unrealized,current=Realizing,target=Started]
javax.media.CachingControlEvent[[email protected],[email protected]f9f9d8,progress=102400]
javax.media.DurationUpdateEvent[[email protected],[email protected]
javax.media.RealizeCompleteEvent[[email protected],previous=Realizing,current=Realized,target=Started]
javax.media.TransitionEvent[[email protected],previous=Realized,current=Prefetching,target=Started]
javax.media.CachingControlEvent[[email protected],[email protected]f9f9d8,progress=204800]
javax.media.CachingControlEvent[[email protected],[email protected]f9f9d8,progress=205889]
javax.media.PrefetchCompleteEvent[[email protected],previous=Prefetching,current=Prefetched,target=Started]
javax.media.StartEvent[[email protected],previous=Prefetched,current=Started,target=Started,[email protected],[email protected]]
javax.media.EndOfMediaEvent[[email protected],previous=Started,current=Prefetched,target=Prefetched,[email protected]]
Просмотреть мое обновление ... – PeterMmm
Из журнала все кажется нормальным. Еще один вопрос, когда вы воспроизводите файл из локального хранилища, как в Player player = Manager.createPlayer (новый файл («tone.mp3»). ToURL()); Объект игрока, который создается com.sun.media.content.unknown.Handler? Я бы подумал, что это будет com.sun.media.content.audio.mp3.Handler – jogabonito
В обоих случаях это com.sun.media.content.unknown.Handler ... – PeterMmm