首页
学习
活动
专区
圈层
工具
发布

FLV体长
EN

Stack Overflow用户
提问于 2012-04-24 11:44:02
回答 1查看 345关注 0票数 0

我正在制作我自己的FLV音频下载程序,而不使用外部库。我正在跟踪这份文件:

http://osflash.org/flv

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

BodyLength,时间戳,StreamId,它们是uint24_be类型的。怎么读?我在这里找到了答案:

Extract Audio from FLV stream in C#

然而,我不明白一些事情:

如果时间戳和StreamId都是uint24_be(uint24_be也是什么?)那为什么

代码语言:javascript
复制
reader.ReadInt32(); //skip timestamps 
ReadNext3Bytes(reader); // skip streamID

另外,ReadNext3Bytes到底是做什么的?为什么不读取下面三个字节:

代码语言:javascript
复制
reader.ReadInt32()+reader.ReadInt32()+reader.ReadInt32();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-24 13:07:54

您不能使用reader.ReadInt32()+reader.ReadInt32()+reader.ReadInt32(),因为最初它是12字节而不是3字节,而在第二,简单地概括这些字节是不够的--您应该创建一个24位的值。下面是更易读的ReadNext3Bytes函数版本:

代码语言:javascript
复制
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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10297172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档