Kompresja pakietów!

0

Witam,

przesyłam obecnie dźwięk "na żywo" z jednego komputera na parę innych.
Jednak to powoduje straszne obciążenie sieci.
[Zarówno do nagrywania i przesyłania wykorzystuję bibliotekę SFML]
Chciałbym zmniejszyć te dane. Oczywiście kompresją bezstratną.
Znalazłem na stronie SFML'a to:

class ZipPacket : public sf::Packet
{
    virtual const void* onSend(std::size_t& size)
    {
        const void* srcData = getData();
        std::size_t srcSize = getDataSize();
        return compressTheData(srcData, srcSize, &size); // this is a fake function, of course :)
    }
    virtual void onReceive(const void* data, std::size_t size)
    {
        std::size_t dstSize;
        const void* dstData = uncompressTheData(data, size, &dstSize); // this is a fake function, of course :)
        append(dstData, dstSize);
    }
};

Więc szukam jakiś możliwości do skompresowania danych np: jakiejś bibliotekii/algorytmu.
Co polecicie?
P.S. Dane które dopisuje do pakietów są typu:
const short int* -> próbki
size_t -> liczba próbek

1

Bezstratna kompresja nie da raczej dużego stopnia kompresji. Na pewno trzeba ci kompresji bezstratnej?

Jeśli masz duże parcie na kompresję bezstratną to wybierz coś popularnego, to da ci większą szansę, że znajdziesz dokumentację czy wsparcie. Popularne i otwarte kodeki to np FLAC lub WavPack.

Jeśli chodzi o kompresję stratną to tutaj obecnie najlepszym wyborem byłby Opus. Ma niskie opóźnienia (ważne przy rozmowach i innych interakcjach głosowych na żywo), dobrą jakość i jest otwarty.

0
        return compressTheData(srcData, srcSize, &size); // this is a fake function, of course :)

Tylko nie rób tego kodu tak w rzeczywistości, bo będziesz miał wycieki pamięci jeśli compressTheData alokuje nowy bufor.

0

A ma ktoś jakiś tutorial dla Opusa?
Niczego porządnego za bardzo nie umiem znaleźć.

1 użytkowników online, w tym zalogowanych: 0, gości: 1