Рендеринг видео на Swing

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

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

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

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


person nullptr    schedule 03.04.2013    source источник
comment
Вы не всегда можете получить то, что хотите. Но если вы иногда хорошо постараетесь, вы можете обнаружить, что получаете то, что вам нужно.   -  person Gilbert Le Blanc    schedule 03.04.2013


Ответы (1)


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

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

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

person Gilbert Le Blanc    schedule 03.04.2013
comment
Спасибо за ответ, я рассматриваю механизм пропуска кадров - person nullptr; 03.04.2013