我正在开发一个安卓应用程序,目的是从2台服务器上下载代码块(视频文件的一部分),在每个服务器下载后,按顺序将它们附加到一个主要视频文件中,最后在继续下载时播放这个视频文件。
当下载是通过使用执行下载的两个不同的线程(每个服务器一个)来完成串行下载时,这是很好的。我想知道如何实现上述目标,但通过并发下载,而不是串行下载。
也就是说,同时按顺序从服务器上下载块。例如,在同一时间内从server1下载chunk0、chunk1和chunk2 (比方说比server2快3倍)和从server2下载chunk3,因此在这段时间内我们完全使用了2台服务器的所有可用带宽。这个过程会重复,直到下载所有的块。
正如我前面所说,通过使用线程和连接,下载是串行的。为了使其并发,我尝试从每个线程中删除联接,但是它不按顺序下载块,也只从一台服务器下载,而不是从两台服务器下载。AsyncTask不是一个解决方案,因为它也不按顺序下载块。
那么,是否有任何方法可以实现并发和,以便像我前面描述的那样对块进行下载?有没有人做过这样的项目,以便确切地知道答案?
发布于 2013-07-24 04:53:45
您可以在下载加速器中使用流行的技术。
通常,其想法是使用Range HTTP报头从每个服务器请求块。(当服务器能够相应地处理范围标头时,服务器会响应Accept-Ranges报头)。(这个博客对此有很好的解释。)。
每个线程/可运行/可调用必须知道哪个块是它的责任(第一个字节位置+长度?)因为每个人都必须在文件中写自己的部分。
然后作出决定,你可以:
注意:如果您希望能够在有第一个块时开始播放,则可以在第一个块线程download+write完成后执行该代码。
https://stackoverflow.com/questions/16551987
复制相似问题