Сообщите сервлету Java, когда возвращаться из внешнего вызова командной строки - PullRequest
1 голос
/ 02 января 2011

У меня есть Java-сервлет api, который по запросу запускает преобразование видеофайла в реальном времени с помощью ffmpeg и направляет его в mediastreamsegmenter, чтобы сегментировать его для потоковой передачи по HTTP. Я хочу, чтобы сервлет Java возвращал URL индексного файла, как только он был сгенерирован (после записи файла 4-го транспортного потока), чтобы пользователь мог начать просмотр видео, не дожидаясь его полного завершения преобразования.

Я думал о том, чтобы добиться этого, чтобы передать команду в аргумент -file-complete-command mediastreamsegmenter и заставить его вызвать какую-то команду, которая может указать сервлету java вернуть свой ответ, если последний файл завершен файл индекса.

Другая идея, которая у меня была, состояла в том, чтобы просто сегментировать первые 30 секунд или около того видео, а затем вернуть ответ и добавить оставшуюся часть видео в какую-то фоновую задачу в сервлете. Я не уверен, как это будет сделано, хотя. Могу ли я создать отдельный поток для этого преобразования, который будет продолжать работать после возвращения сервлета? Я уверен, что должен быть лучший способ сделать это. Любые мысли будут оценены.

Ответы [ 2 ]

1 голос
/ 03 января 2011

Я бы сказал, что для такой задачи вам определенно нужен отдельный поток.Почему «должен быть» лучший путь?

0 голосов
/ 20 сентября 2011

Я не так сильно увлекаюсь потоковым видео, но не могли бы вы запустить поток (называемый PARSE_THREAD), который выполняет синтаксический анализ и сообщает сервлету (проживающему в SERVLET_THREAD) ждать разумное количество времени?Я думаю, что преобразование ffmpeg занимает примерно столько же времени, чтобы проанализировать первые 30 секунд, поэтому вы запускаете PARSE_THREAD, затем спите SERVLET_THREAD на это время, а затем позволяете сервлету начать потоковую передачу.

Использованиеотдельный поток - хорошее решение этой проблемы.

...