Оптимизировать base64 кодирование и декодирование в C - PullRequest
1 голос
/ 08 января 2020

Я разрабатываю приложение в C для отправки видео журнала запущенного сеанса. Для этого я использую архитектуру клиент-сервер.

Клиент

  • Захватывает экран каждую секунду в серии кадров.
  • Кодирует фрейм, т.е. байтовый массив с использованием base64
  • и отправка на целевой сервер в функции потока с помощью вызова API веб-служб (в C#).

Сервер

  • Сервер получает байтовый массив, декодирует их для формирования изображения (в C#).

ПРОБЛЕМА: -

  • Когда я подключаюсь с одной машины с двумя или более сеансами в реальном времени, загрузка ЦП достигает 100%, и кажется, что все зависает.
  • Я не могу принять и перехватить более одного сеанса в режиме реального времени в качестве кодировки base64. слишком тяжелый и трудоемкий для обработки.

Прежде чем отправлять на сервер, ищите метод оптимизации для файлов BMP в base64 на стороне клиента.

Заранее спасибо.

РЕДАКТИРОВАТЬ:

Код использует функции openssl f или кодирование на стороне клиента, и это обязательно, поскольку обычная строка с некоторыми специальными символами отбрасывается и блокируется g SOAP, который обеспечивает связь со службами C# на стороне сервера.

char *base64(const unsigned char *input, int length)
{
    BIO *bmem, *b64;
    BUF_MEM *bptr;

    b64 = BIO_new(BIO_f_base64());
    bmem = BIO_new(BIO_s_mem());
    b64 = BIO_push(b64, bmem);
    BIO_write(b64, input, length);
    BIO_flush(b64);
    BIO_get_mem_ptr(b64, &bptr);

    char *buff = (char *)malloc(bptr->length);
    memcpy(buff, bptr->data, bptr->length - 1);
    buff[bptr->length - 1] = 0;

    BIO_free_all(b64);

    return buff;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...