2013-09-30 72 views
0

即时通讯尝试通过Java库Restlet流文件。但是文件在流式传输时被写入。在这里它应该如何工作。正在写文件时使用restlet流文件正在写入

我创建了一个视频和一个音频文件,然后将这两个文件合并为一个,这一步需要相当长的时间。所以,当新文件创建时,我想将文件流式传输到浏览器,无需等待10分钟即可观看视频。

目前我可以通过FileInputStream读取文件块,但我不知道如何将文件提供给浏览器。有任何想法吗?

它甚至可以使用Restlet来提供动态文件吗?

在此先感谢,并为我的英语不好对不起^^

ZimTis

[更新]

我能够播放MP3文件,它在创建的时候,多亏了杰罗姆Louvel :

public class RestletStreamTest extends ServerResource { 

    private InputRepresentation inputRepresentation; 
    public FileInputStream fis; 

    @Get 
    public InputRepresentation readFile() throws IOException { 
     final File f = new File("/path/to/tile.mp3"); 
     fis = new FileInputStream(f); 

     inputRepresentation = new InputRepresentation(new InputStream() { 
      private boolean waited = false; 

      @Override 
      public int read() throws IOException { 
       waited = false; 

       // read the next byte of the FileInputStream, when reaching the  
       // end of the file, wait for 2 seconds and try again, in case 
       // the file was not completely created yet 
       while (true) { 
        byte[] b = new byte[1]; 

        if (fis.read(b, 0, 1) > 0) { 
         return b[0] + 256; 
        } else { 
         if (waited) { 
          return -1; 
         } else { 
          try { 
           Thread.sleep(2000); 
          } catch (InterruptedException e) { 
           e.printStackTrace(); 
          } 
          waited = true; 
         } 
        } 
       } 
      } 

     }, MediaType.AUDIO_MPEG); 

     return inputRepresentation; 
    } 
} 

这是一个有点生硬,但作品和稍后将细化。 当我更改代码以尝试播放视频时,播放器会读取视频的所有字节,然后开始播放并再次读取所有字节。视频播放结束后,当我点击播放按钮时,什么也没有发生。 Restlet引发超时,然后视频重新开始播放。我尝试使用.mp4和.flv文件,但始终使用相同的结果。

我不确定它是Restlet还是palyer的问题。我在Firefox中使用VLC播放器,并尝试使用Chrome中的标准html5播放器。但是Chrome播放器甚至没有开始播放。

我错过了什么吗?或者这只是玩家的问题?

回答

1

我建议您尝试返回一个包装您的FileInputStream的InputRepresentation实例,或者直接包装一个包装新创建文件的FileRepresentation。

+0

谢谢,我能够加载文件,但遇到了一堆新问题。文件将加载到页面加载时写入的位置,然后在超时后重新开始,但这次是更多的数据。如果我的声望超过15,你的答案肯定会得到+1 ^^ – ZimTis

0

也许创建一个小小的1分钟文件并按顺序播放它们,直到完成编码为止。

+0

我也在想这个。这是一个选项,但在其他项目中需要大量重新编码。但我认为,如果切换到下一个剪辑是没有黑色的,没有黑色的框架,或者暂停或者任何事情,我都会按照他的方式行事。 – ZimTis