2009-12-01 3 views
6

Я собираюсь создать приложение на C++, которое создает поток фотографий, а затем отправляет их в виде видеопотока в другое приложение. любые идеи о том, как я могу начать? что я имею в виду, какие библиотеки я должен использовать и какова кодировка? Я думаю о MJPEG, UDP или RTP в качестве протокола .... любая помощь будет принята с благодарностью.Потоковое видео с использованием C++

ответ

5

Если ваши входные данные - это всего лишь куча случайных изображений, а не видео, вы не собираетесь делать «потоковое видео». Вы просто собираетесь отправить кучу полных изображений. Не нужно привлекать технологию кодирования видео, просто простейшая передача изображений. Видеокодеры полагаются на каждый кадр, имеющий различные отношения с предыдущим, как это обычно бывает в реальном видео. Для входов случайных изображений они не смогут так сильно сжимать, и однокадровое сжатие (например, JPEG/PNG/безотносительно), скорее всего, уже будет применяться к вашим входным данным.

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

Возможно, вы просто используете TCP для этого, ничего в ваших требованиях, указывающих на необходимость использования более сложных и подверженных ошибкам решений на основе UDP/RTP.

+2

Исключением является «Motion JPEG» (MJPEG), который на самом деле представляет собой последовательность сжатых кадров JPEG с небольшим заголовком на каждом из них. Моя цифровая камера Canon записывала видео в этом формате. –

+0

Разница между связкой изображений и видеопотоком (кроме типа сжатия) заключается в том, что в потоке видео вы синхронизируете время. –

0

Используйте библиотеку ffmpeg для кодирования вашего потока и используйте RTP/RTSP стек для их потока.

5

Для потоковой части вы можете использовать Live555. Он должен охватывать все, что вам нужно. Это все еще оставляет проблему генерации потока MJpeg. Я могу только догадываться, FFMpeg может быть, что вы ищете (как я вижу, он также охватывает потоковое вещание, поэтому вам может понадобиться только этот). Я думаю, что MJpeg очень подходит для вас. Что касается TCP или UDP, это зависит от того, как вы хотите его использовать. UDP имеет смысл, если вы хотите сделать свой поток Multicast, иначе я бы предпочел TCP, потому что он более надежный.

Надеюсь, что это несколько полезных советов.