Hasilkan CRC-32 untuk SDT kepada ts. dokumen

PHPz
Lepaskan: 2024-02-10 20:20:07
ke hadapan
1073 orang telah melayarinya

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

editor php Yuzai akan memperkenalkan kepada anda kaedah untuk menjana CRC-32 melalui SDT ke ts untuk mengesahkan integriti fail. CRC-32 ialah algoritma checksum yang biasa digunakan yang menghasilkan nilai semakan 32-bit dengan mengira data binari fail. Nilai semakan ini boleh digunakan untuk mengesahkan sama ada ralat atau rasuah berlaku semasa pemindahan atau penyimpanan fail. Menggunakan kaedah ini, kami boleh memastikan integriti fail dan meningkatkan kebolehpercayaan pemindahan data.

Kandungan soalan

Tugas saya ialah menangkap aliran video dari pelayan dan menulisnya ke ts. dokumen. Saya menghadapi masalah untuk menulis pakej SDT ke ts. Saya secara manual membentuk paket mengikut bait tetapi tidak tahu cara mengira CRC-32 daripada 4 bait pada penghujung SDT. (menggunakan golang)

Saya cuba mendapatkan CRC berdasarkan checksum data yang telah ditulis ke paket SDT, tetapi ia tidak berfungsi. Dalam SDT dihuraikan bait demi bait, CRC berbeza daripada apa yang saya kira.

Penyelesaian

Jika anda bercakap tentang mpeg-2, crc ditakrifkan sebagai:

width=32 poly=0x04c11db7 init=0xffffffff refin=false refout=false xorout=0x00000000 check=0x0376e6e7 residue=0x00000000 name="crc-32/mpeg-2"
Salin selepas log masuk
Terdapat contoh dalam

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
Salin selepas log masuk

Di mana empat bait terakhir ialah crc-32/mpeg-2 (dalam susunan big-endian) bagi semua bait yang mendahuluinya.

Berikut ialah contoh kod c untuk mengira 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;
}
Salin selepas log masuk

(Apabila mem等于null, kembalikan nilai crc awal.)

Atas ialah kandungan terperinci Hasilkan CRC-32 untuk SDT kepada ts. dokumen. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!