2012-04-24 98 views
0

我正在製作自己的FLV音頻下載器,而無需使用外部庫。 我下面這個文檔:FLV身體長度

http://osflash.org/flv

在FLV標籤類型,有三個有趣的價值觀:

BodyLength時間戳流ID這是uint24_be類型。如何閱讀它們? 我在這裏找到了答案:

Extract Audio from FLV stream in C#

但是我不明白幾件事情:

如果時間戳流IDuint24_be(也有什麼uint24_be?)那麼爲什麼

reader.ReadInt32(); //skip timestamps 
ReadNext3Bytes(reader); // skip streamID 

ReadNext3Bytes究竟是做什麼的?爲什麼不讀3個一個字節是這樣的:

reader.ReadInt32()+reader.ReadInt32()+reader.ReadInt32(); 

回答

1

您不能使用reader.ReadInt32()+reader.ReadInt32()+reader.ReadInt32()因爲,首先,是12個字節,而不是3個字節,而在第二個它是不是很簡單總結這些字節 - 你應該創建一個24位的值。這裏有更多可讀版本的ReadNext3Bytes功能:

int ReadNext3Bytes(System.IO.BinaryReader reader) { 
    try { 
     byte b0 = reader.ReadByte(); 
     byte b1 = reader.ReadByte(); 
     byte b2 = reader.ReadByte(); 
     return MakeInt(b0, b1, b2); 
    } 
    catch { return 0; } 
} 
int MakeInt(byte b0, byte b1, byte b2) { 
    return ((b0 << 0x10) | (b1 << 0x08)) | b2; 
}