2011-04-07 32 views
2

我试图实现在Tomcat上运行的Java servlet,能够将多个FLV文件传输到具有JWPlayer的客户端浏览器。问题是我必须一次传输多个文件,有时会从第一个剪辑的中间开始流式传输,我需要JWPlayer认为文件持续时间是所有剪辑组合的持续时间。通过Java servlet将多个FLV文件作为单个文件流式传输

如果我将所有剪辑合并到单个FLV文件,注入元数据(使用yamdi)然后进行流式传输,那么我的servlet将会运行良好。但这可能相当耗时。我已经尝试向播放器发送我从中间流式传输的文件的元信息,然后继续从中间流式传输,但这似乎不起作用。我尝试过在元数据中调用duration参数无济于事。

我认为这是因为我跳过标签时,我开始从剪辑的中间流。在servlet发送出来之前处理字节流时,是否可以构建标签?

+0

检查出以mime-multipart格式发送 – Gandalf 2011-04-07 17:02:10

回答

0

除了初始FLV标题和各个帧描述之外,您不需要元数据。只要你的FLV帧是正确的,原子开始和停止,你正在做的事对我来说似乎是非常可能的。 (我曾考虑做类似的事情,已经写了一个FLV解析器。)请确保不要发送长度标题。 ;)有两件事可能会使这一切更容易完成:

  1. 确保您已经用小的关键帧间隔编码了您的视频。您将无法在分辨率更高的任何分辨率之间切换。小于1的任何一个可能会有问题,高得多的视频速率。
  2. 将所有视频文件预先解析为段。当servlet被调用时,
    1. 发送FLV标头
    2. 读写整个段文件到客户机 1-切换视频,移动到另一组分段文件

实施例它假定你想从一开始发送的每个原始文件:

send(FLV_HEADER) 
i = 0 
while(send file 1 condition == true) 
    send(file-1-segment i++) 
i = 0 
while(send file 2 condition == true) 
    send(file-2-segment i++) 

(或者你可以映射一些索引并使用它们从文件中间读取帧。在那里,做到这一点。)

相关问题