c# - FLV车身长度

标签 c# audio stream bit-manipulation flv

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

http://osflash.org/flv

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

BodyLength,Timestamp,StreamId是uint24_be类型。如何阅读它们?
我在这里找到了答案:

Extract Audio from FLV stream in C#

但是我不明白几件事:

如果Timestamp和StreamId都是uint24_be(又是uint24_be?),那么为什么

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

还有ReadNext3Bytes到底做什么?为什么不读取这样的下3个字节:
reader.ReadInt32()+reader.ReadInt32()+reader.ReadInt32();

最佳答案

您不能使用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;
}

关于c# - FLV车身长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10297172/

相关文章:

c++ - Win32 Audio API endpointVolume 接口(interface)返回错误的 channel 数

flutter - 如何控制 FLutter 包 audio_service 中通知栏中显示的内容

iphone - 在单点触控中显示来自 Byte[] 的图像

c# - 更改datagridview日期列上的日期时间显示格式

c# - ASP.NET Core 5.0 RouteDataRequestCultureProvider 删除 url 中的默认文化

c# - 使用 MouseMove 事件在 Canvas 内移动动态绘制的矩形

用于生成和读取音频的 C++ 库

node.js - Azure无服务器函数: input binding DataType "stream" not supported

java - 在字节流中添加数据的最有效方法是什么?

c# - 结构 C# 的大小