Heim > Backend-Entwicklung > Golang > Generieren Sie CRC-32 für SDT zu ts. dokumentieren

Generieren Sie CRC-32 für SDT zu ts. dokumentieren

PHPz
Freigeben: 2024-02-10 20:20:07
nach vorne
1122 Leute haben es durchsucht

为 SDT 到 ts 生成 CRC-32。文件

php-Editor Yuzai stellt Ihnen eine Methode vor, um CRC-32 über SDT an ts zu generieren, um die Integrität der Datei zu überprüfen. CRC-32 ist ein häufig verwendeter Prüfsummenalgorithmus, der durch Berechnung der Binärdaten der Datei einen 32-Bit-Prüfwert generiert. Mit diesem Prüfwert kann überprüft werden, ob bei der Dateiübertragung oder -speicherung Fehler oder Beschädigungen aufgetreten sind. Mit dieser Methode können wir die Dateiintegrität sicherstellen und die Zuverlässigkeit der Datenübertragung verbessern.

Frageninhalt

Meine Aufgabe ist es, einen Videostream vom Server zu erfassen und an ts zu schreiben. dokumentieren. Ich habe Probleme beim Versuch, ein SDT-Paket in ts zu schreiben. Ich bilde das Paket manuell nach Bytes, weiß aber nicht, wie ich den CRC-32 der 4 Bytes am Ende des SDT berechnen soll. (mit Golang)

Ich habe versucht, den CRC basierend auf der Prüfsumme der Daten zu ermitteln, die in das SDT-Paket geschrieben wurden, aber es funktioniert nicht. Im byteweise analysierten SDT unterscheidet sich der CRC von dem, was ich berechnet habe.

Problemumgehung

Wenn Sie über MPEG-2 sprechen, ist CRC wie folgt definiert:

width=32 poly=0x04c11db7 init=0xffffffff refin=false refout=false xorout=0x00000000 check=0x0376e6e7 residue=0x00000000 name="crc-32/mpeg-2"
Nach dem Login kopieren
Es gibt ein Beispiel in

rfc 4326:

00 3f 86 dd 00 01 02 03 04 05 60 00 00 00 00 0d
3a 40 20 01 0d b8 30 08 19 65 00 00 00 00 00 00
00 01 20 01 0d b8 25 09 19 62 00 00 00 00 00 00
00 02 80 00 9d 8c 06 38 00 04 00 00 00 00 00 7c
17 17 63
Nach dem Login kopieren

Wobei die letzten vier Bytes der crc-32/mpeg-2 (in Big-Endian-Reihenfolge) aller vorangehenden Bytes sind.

Hier ist ein C-Codebeispiel zur Berechnung von crc:

#include <stddef.h>
#include <stdint.h>

uint32_t crc32mpeg2(uint32_t crc, void const *mem, size_t len) {
    unsigned char const *data = mem;
    if (data == NULL)
        return 0xffffffff;
    for (size_t i = 0; i < len; i++) {
        crc ^= (uint32_t)data[i] << 24;
        for (unsigned k = 0; k < 8; k++) {
            crc = crc & 0x80000000 ? (crc << 1) ^ 0x4c11db7 : crc << 1;
        }
    }
    return crc;
}
Nach dem Login kopieren

(Wenn mem等于null, wird der anfängliche CRC-Wert zurückgegeben.)

Das obige ist der detaillierte Inhalt vonGenerieren Sie CRC-32 für SDT zu ts. dokumentieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage