Комментарии 12
Трафика много будет при такой передаче, это как передавать каждый кадр ключевой. Не проще было бы использовать например fragmented mp4?
Удивительно что не был сделан MJPEG over HTTP(Захват видео с сетевых камер, часть 1)
Ого! Не был полдня и уже столько всего! Спасибо за Ваши комментарии. Учту в дальнейшем. Приятно, что такое обсуждение. Сразу видно, что РУССКИЙ форум — столько льется… )))
Забавно, никакой оскорбительной, нецензурной брани в вашу сторону сказано небыло. Конструктивные вопросы коментаторов вы проигнорировали. На что вы обиделись?
Как уже заметили, использовать «комбайн» OpenCV для кодирования и декодирования затея не очень разумная. Да и TCP для видеопотока. Ну да ладно, что нового несет в себе ваша сатья?
Ну и как вишенка сорцы в дропбоксе :)
Как уже заметили, использовать «комбайн» OpenCV для кодирования и декодирования затея не очень разумная. Да и TCP для видеопотока. Ну да ладно, что нового несет в себе ваша сатья?
Ну и как вишенка сорцы в дропбоксе :)
ffmpeg получился?
unsigned char *buf = new unsigned char[MAX_BUF_SIZE];
Raw pointer лучше не использовать для обладания памятью (на случай exception'a), лучше было бы так:
std::unique_ptr buf(new unsigned char[MAX_BUF_SIZE]);
Raw pointer лучше не использовать для обладания памятью (на случай exception'a), лучше было бы так:
std::unique_ptr buf(new unsigned char[MAX_BUF_SIZE]);
Чего придрались, он же написал «отработать» технологию, нормально всё, кому надо тот допишет )
Статья шутка? :)
>> const int MAX_BUF_SIZE = 2073600;
Для такого принято использовать size_t
>>unsigned char *buf = new unsigned char[MAX_BUF_SIZE]; // Буфер для прима сообщений
>>vector videoBuffer;
Почему тогда для buf не использовать vector?
>> iResult = recv(connectSocket, (char *)&buf[0], MAX_BUF_SIZE, 0);
>> if (iResult > 0) {
откуда уверенность, что в буфере достаточно данных для декодирования?
>> // Если пришли данные изображения, копируем их
>> videoBuffer.resize(iResult);
>> memcpy((char*)(&videoBuffer[0]), buf, iResult);
>> // Декодируем данные
>> jpegimage = imdecode(Mat(videoBuffer), CV_LOAD_IMAGE_COLOR);
Зачем лишний раз копировать данные?
Печально видеть такое в хабе C++
Для такого принято использовать size_t
>>unsigned char *buf = new unsigned char[MAX_BUF_SIZE]; // Буфер для прима сообщений
>>vector videoBuffer;
Почему тогда для buf не использовать vector?
>> iResult = recv(connectSocket, (char *)&buf[0], MAX_BUF_SIZE, 0);
>> if (iResult > 0) {
откуда уверенность, что в буфере достаточно данных для декодирования?
>> // Если пришли данные изображения, копируем их
>> videoBuffer.resize(iResult);
>> memcpy((char*)(&videoBuffer[0]), buf, iResult);
>> // Декодируем данные
>> jpegimage = imdecode(Mat(videoBuffer), CV_LOAD_IMAGE_COLOR);
Зачем лишний раз копировать данные?
Печально видеть такое в хабе C++
Что я толькочто прочел…
Зачем вам TCP при передачи «видео».
Почем нельзя было взять ffmpeg или gstreamer и написать в 5 строчек и сжимать вочто угодно.
Да и вобще можно без единой строки кода эту задачу решить. Темиже ffmpeg и gstremer вам в помошь.
Картинка с буханка хлеба и троллейбус
Зачем вам TCP при передачи «видео».
Почем нельзя было взять ffmpeg или gstreamer и написать в 5 строчек и сжимать вочто угодно.
Да и вобще можно без единой строки кода эту задачу решить. Темиже ffmpeg и gstremer вам в помошь.
Картинка с буханка хлеба и троллейбус
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Сжатие и передача потокового видео по TCP с помощью OpenCV