Home >Backend Development >Golang >Generate CRC-32 for SDT to ts. document
php Xiaobian Yuzai will introduce a method to generate CRC-32 through SDT to ts to verify the integrity of the file. CRC-32 is a commonly used checksum algorithm that generates a 32-bit check value by calculating the binary data of the file. This check value can be used to verify whether errors or corruption occurred during file transfer or storage. Using this method, we can ensure file integrity and improve data transfer reliability.
My task is to capture the video stream from the server and write it to ts. document. I'm having trouble trying to write an SDT package to ts. I manually form the packet by bytes but don't know how to calculate the CRC-32 of the 4 bytes at the end of the SDT. (using golang)
I tried to get the CRC based on the checksum of the data that has been written to the SDT packet, but it doesn't work. In the SDT parsed byte by byte, the CRC is different from what I calculated.
If you are talking about mpeg-2, the crc is defined as:
width=32 poly=0x04c11db7 init=0xffffffff refin=false refout=false xorout=0x00000000 check=0x0376e6e7 residue=0x00000000 name="crc-32/mpeg-2"There is an example in
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
Where the last four bytes are the crc-32/mpeg-2 (in big-endian order) of all the bytes preceding it.
The following is a c code example to calculate 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; }
(When mem
is equal to null
, the initial crc value is returned.)
The above is the detailed content of Generate CRC-32 for SDT to ts. document. For more information, please follow other related articles on the PHP Chinese website!