Kompresja pakietów!

Kompresja pakietów!
BU
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 9 lat
  • Postów:4
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:

Kopiuj
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

Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:około 6 godzin
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.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 2x, ostatnio: Wibowit
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 13 godzin
0
Kopiuj
        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.

BU
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 9 lat
  • Postów:4
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.