我正在尝试实现在Tomcat上运行的Java servlet,它能够将多个FLV文件流式传输到具有JWPlayer的客户端浏览器。问题是我必须一次流式传输多个文件,有时从第一个剪辑的中间开始流式传输,我需要JWPlayer认为文件持续时间是所有剪辑组合的持续时间。
如果我将所有剪辑合并到一个FLV文件中,注入元数据(使用yamdi)然后对其进行流式传输,那么我的servlet会运行良好。但这可能非常耗时。我已经尝试向播放器发送我从中间首先流式传输的文件的元信息,然后继续从中间流式传输,但这似乎不起作用。我试图摆弄元数据中的duration参数无济于事。
我认为这是因为当我从剪辑中间开始流式传输时,我正在跳过标签。在servlet发送字节流之前处理字节流时,是否有可能构造标记?
答案 0 :(得分:0)
除了初始FLV标头和单独的帧描述之外,您不需要元数据。只要您的FLV帧正确且原子地启动和停止,您正在做的事情对我来说似乎是非常可能的。 (我考虑过做类似的事情,已经编写了一个FLV解析器。)一定不要发送一个Length头。 ;)有两件事可能会让所有这些更容易实现:
假设您想要从头开始发送每个原始文件的示例:
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++)
(或者你可以映射一些索引并使用它们从文件中间读取帧。就在那里,完成它。)