0

我正在制作自己的 FLV 音频下载器,而不使用外部库。我正在关注此文档:

http://osflash.org/flv

在 FLV 标签类型中,有三个有趣的值:

BodyLengthTimestampStreamId类型uint24_be。如何阅读它们?我在这里找到了答案:

在 C# 中从 FLV 流中提取音频

但是我不明白一些事情:

如果TimestampStreamId都是uint24_be(也是什么uint24_be?)那为什么

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

还有具体是做什么的ReadNext3Bytes?为什么不像这样读取 3 个下一个字节:

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

1 回答 1

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;
}
于 2012-04-24T13:07:54.513 回答