我有一个java servlet api,根据请求,使用ffmpeg启动视频文件的实时转换,并将其传输到mediastreamsegmenter,将其分段为http直播。我想要的是java servlet在生成后立即返回索引文件的url(在写入第4个传输流文件之后),这样用户就可以开始观看视频而无需等待它完全完成转换。
我是如何想到实现这一点的,是将命令传递给mediastreamsegmenter的-file-complete-command参数,并让它调用某种命令,告诉java servlet如果最后一个文件返回它的响应完成了索引文件。
我的另一个想法是只分割视频的前30秒左右,然后返回响应,并将视频的其余部分添加到servlet中的某种后台任务中。我不知道如何做到这一点。我可以创建一个单独的线程来执行此转换,该转换将在servlet返回后继续运行吗?我确信必须有更好的方法来做到这一点。任何想法将不胜感激。
答案 0 :(得分:1)
我会说你肯定需要一个单独的线程来完成这样的任务。为什么“必须有”更好的方式?
答案 1 :(得分:0)
我不是很喜欢视频流,但是你可以启动一个线程(称为PARSE_THREAD)进行解析并告诉servlet(生活在SERVLET_THREAD中)等待一段合理的时间吗?我认为ffmpeg转换需要大约相同的时间来解析前30秒,因此启动PARSE_THREAD,然后休眠SERVLET_THREAD,然后让servlet启动流式传输。
使用单独的线程是解决该问题的好方法。