2011-01-27 5 views
0

У меня есть короткий звуковой пример игрок такой код, который работает отлично:Невозможно воспроизвести 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]] 

ответ

1

Вы могли бы реализовать интерфейс ControllerListener, а затем проверить на ControllerEvents. Затем мы можем узнать, какой этап создания игрока не работает

+0

Просмотреть мое обновление ... – PeterMmm

+0

Из журнала все кажется нормальным. Еще один вопрос, когда вы воспроизводите файл из локального хранилища, как в Player player = Manager.createPlayer (новый файл («tone.mp3»). ToURL()); Объект игрока, который создается com.sun.media.content.unknown.Handler? Я бы подумал, что это будет com.sun.media.content.audio.mp3.Handler – jogabonito

+0

В обоих случаях это com.sun.media.content.unknown.Handler ... – PeterMmm

Смежные вопросы