Проектирование живого видео потока для wxWidgets - PullRequest
3 голосов
/ 11 октября 2010

В моем приложении мы представим видеопоток с камеры слежения за клиентом для просмотра. (И, в конечном счете, несколько клиентских зрителей.) Клиент должен иметь возможность просматривать видео в реальном времени или с перемоткой видео и смотреть более ранние кадры, в том числе видео, которые произошли до подключения к видеопотоку. Мы намерены использовать wxWidgets для просмотра видео, и в рамках этого мы, вероятно, будем использовать wxMediaCtrl.

Теперь, из приведенных выше утверждений, некоторые из вас могут подумать: «Эй, он не знает, о чем говорит». И ты был бы прав! Я новичок в этих понятиях и меня смущает избыток информации. Являются ли приведенные выше утверждения разумными? Кто-нибудь может порекомендовать базовую архитектуру сервер / клиент для этого? Мы определенно будем использовать C ++ wxWidgets для GUI, но, возможно, wxMediaCtrl - это не то, что мне нужно ... я должен напрямую использовать что-то вроде библиотек ffmpeg?

Наш нынешний метод выглядит менее чем оптимальным. Сервер извлекает растровое изображение из каждого видеокадра и затем ждет, пока один клиент отправит сообщение «следующий кадр», после чего сервер отправляет растровое изображение. По сути, мы воссоздали наш собственный неуклюжий, нестандартный, неэффективный и малофункциональный протокол и средство просмотра потокового видео. Должно быть что-то лучше!

Ответы [ 4 ]

0 голосов
/ 27 февраля 2011

Для средств воспроизведения мультимедиа, как музыки, так и аудио, вы можете посмотреть на GStream .И говоря о сервере, я думаю, Twisted (сетевая библиотека на Python) должен быть хорошим вариантом.Известный социальный веб-сайт с живым видео justin.tv основан на Twisted.Здесь вы можете прочитать историю от здесь .Также я создал группу серверов для потоковой передачи аудио на Twisted.Они могут одновременно обслуживать тысячи слушателей.

0 голосов
/ 23 февраля 2011

Есть игрок по имени VLC . У него есть библиотека для c ++, и вы можете использовать ее для встраивания проигрывателя в ваше приложение с графическим интерфейсом. Он поддерживает очень широкий спектр протоколов. Поэтому вам следует оставить подключение, поиск и воспроизведение заданий к VLC и позаботиться только о запуске и остановке заданий. Это было бы легко и, вероятно, лучшее решение, чем делать это самостоятельно.

0 голосов
/ 24 февраля 2011

Вам следует проверить этот RTMP-сервер C ++: http://www.rtmpd.com/. Я быстро загрузил, скомпилировал и успешно протестировал его без каких-либо проблем (на Ubuntu Maverick). Документация довольно хорошая, если немного повсюду. Я подозреваю, что если у вас есть сервер потокового мультимедиа, способный поддерживать типичные протоколы (что, похоже, делает rtmpd), то написание клиента должно стать естественным, особенно если вы используете wxWidgets в качестве интерфейса API. Конечно, легко написать, что здесь, не выходя из моей гостиной, будет совсем другая история, когда вы будете по колено в коде:)

0 голосов
/ 23 февраля 2011

Вы можете изменить свое программное обеспечение так, чтобы:

Сервер подключается, сервер захватывает изображение, передает его в поток установления ffmpeg, затем копирует закодированные данные из потока ffmpeg и отправляет клиенту по сети, если соединение разрывается, закройте поток ffmpeg.

Может быть, вы можете использовать следующее в своих интересах:

http://www.kirsle.net/blog.html?u=kirsle&id=63

...