0

外部ライブラリを使用せずに、独自のFLVオーディオダウンローダーを作成しています。私はこのドキュメントに従っています:

http://osflash.org/flv

FLVタグタイプには、次の3つの興味深い値があります。

タイプのBodyLengthTimestampStreamIduint24_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()。最初は 3 バイトではなく 12 バイトであり、次にこれらのバイトを単純に要約するだけでは十分ではないため、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 に答える