Можно ли сделать кодировку h264 на лету и отправить видео через сеть веб-сокетов? - PullRequest
0 голосов
/ 24 октября 2018

Я уже создал тестовое приложение, которое может отправлять пакеты сообщений по UDP, используя RTP.Теперь я хочу отправить кадры веб-камеры через это соединение.Я могу захватывать отдельные кадры, кодировать их в формат JPEG и отправлять по сети.

Но для этого требуется высокая пропускная способность сети - около 5 Мбит / с для потоковой передачи с разрешением 360p со скоростью обновления 5 кадров в секунду.

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

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

Редактировать: включенный фрагмент кода

    RTPUDPv4TransmissionParams transparams;
    RTPSessionParams sessparams;

    sessparams.SetOwnTimestampUnit(1.0 / 10.0);

    sessparams.SetAcceptOwnPackets(true);
    transparams.SetPortbase(portbase);

    transparams.SetRTCPMultiplexing(true);

    status = sender.Create(sessparams, &transparams);
    checkerror(status);
    RTPIPv4Address addr(destip, destport, true);

    status = sender.AddDestination(addr);
    checkerror(status);

    std::string msg;

    for (i = 1; i <= num; i++)
    {
        printf("\nSending packet %d/%d\n", i, num);
        std::cout << "Enter message to be sent: ";
        std::getline(std::cin, msg);

        // send the packet
        status = sender.SendPacket((void *)msg.c_str(), msg.length(), 0, false, 10);
        checkerror(status);

        status = sess.Poll();
        checkerror(status);

        RTPTime::Wait(RTPTime(1, 0));
    }
...