Я разрабатываю приложение для мониторинга 20 видеопотоков одновременно. У меня будет JFrame и 20 ящиков (например, JPanel) внутри JFrame для отображения 20 потоков. Я могу загружать поток и декодировать с помощью xuggler, но теперь как я могу отобразить это через Swing JPanel?

Я могу воспроизводить звук на SourceDataLine, моя проблема только в том, как отображать 20 * 30 = 600 видеокадров в секунду на компоненте Swing?

Также xuggler выводит декодированные кадры в формате пикселей YUV420P, есть ли накладные расходы на преобразование этого в RGB, создание BufferedImage и отображение в компоненте Swing?

Пожалуйста, помогите мне в этом. Я хочу отображать 20 видеопотоков одновременно в компонентах Swing.

0
nullptr 3 Апр 2013 в 10:58
Вы не всегда можете получить то, что хотите. Но если вы иногда будете хорошо стараться, вы можете обнаружить, что получаете то, что вам нужно.
 – 
Gilbert Le Blanc
3 Апр 2013 в 13:05

1 ответ

Лучший ответ

Вот код, который я искал в Google, который преобразует YUV420 в кадры BufferedImage. Вы можете использовать это как основу для того, что хотите.

Вы, вероятно, также не сможете обрабатывать 600 кадров видео в секунду на ПК. Вам нужно будет посмотреть, сколько видеокадров вы можете преобразовать в секунду, а остальные кадры отбросить.

Вероятно, лучший способ обработать 20 видеопотоков - иметь 20 потоков, захватывающих видеокадр, конвертирующих видеокадр в BufferedImage и передавая BufferedImage в поток отправки событий (EDT) для Swing для рисования на соответствующей панели JPanel. Когда поток возвращается, чтобы захватить следующий видеокадр, вы автоматически отбрасываете кадры, которые ПК не успел обработать.

1
Gilbert Le Blanc 3 Апр 2013 в 13:19
Спасибо за ответ, рассматриваю механизм сброса фреймов
 – 
nullptr
3 Апр 2013 в 17:56