问题标签 [bitstream]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
video - h264 创意比特流是如何组织的?/header 起始码
我试图通过使用十六进制编辑器查看视频文件的比特流来了解 h264。我在这里找到了视频对象平面 (0x000001b6) 和 i 帧 (0x000001b600) 的起始代码。
但是我在视频文件中找不到很多这些字节。大多数情况下,这些起始代码出现在文件的开头,中间只有几处。我希望他们会非常有规律地出现,在整个文件中以相等的距离出现!?
以这种方式使用十六进制编辑器查看文件是否可以?还存在哪些其他起始代码以及 h264 文件是如何组织的?
language-agnostic - 表示字节流中的比特流
我正在尝试一些想法,其中算法必须将比特作为最小的信息单位。这是一个模块化应用程序,用户可以像 unix shell 管道一样重新排列“管道”的一部分。这些算法做各种各样的事情,比如成帧、压缩、解压缩、错误检查和纠正;引入、检测和去除噪声等。
由于它们在位级别上工作,因此算法可能会采用 5 位输入并产生 19 位输出。输入和输出很少是字节的倍数。
借助std::vector<bool>
_
甚至:
问题是如何有效地序列化这些位,因为标准流 (stdin
和stdout
) 是面向字节的。我必须处理输入和输出中的位数不是一个字节的倍数的情况。
目前,我有一个有效的概念验证,它通过将每个位扩展为 0x30 或 0x31(“0”或“1”)的字节来实现。显然,这将数据大小增加了 8 倍,消耗的空间和带宽是必要的 8 倍。我希望以更有效的方式打包这些位。
我正在考虑的一种替代方案是一种协议,它缓冲输出中的位并生成由Length标头后跟数据上限(Length/8)字节组成的块,并在适当的时候刷新输出。
但不是创建一个虚构的协议,我想知道是否有人已经有这些要求,你的经验是什么,以及是否已经有一些标准协议(任意位数的序列化)我可以利用。也许有人已经遇到了这个问题,并且已经在使用某种形式的编码,也可以在这个应用程序中使用,以避免不兼容格式的扩散。
scala - Scala 中的比特流库
我需要使用内部开发的旧算法压缩/解压缩一些数据。我有很多操作,例如:
知道有人喜欢 Scala 中的“Bitstrem”类吗?(我没有找到任何东西,希望我不必自己实现它。)
谢谢
编辑:我将答案与http://www.scala-lang.org/node/8413(“Scala 集合的架构”)结合起来如果有人需要同样的东西:
java - 比特流中的比特顺序
位流中的位是否有首选顺序(其中位流有点类似于 Java 的 Input/OutputStream,但提供位级粒度)?
我读过 DEFLATE 算法的霍夫曼阶段的输出考虑到一个字节的最低有效位 (lsb) “在”最高有效位 (msb) 之前,用于编码非字节-对齐的值。是否有理由选择 lsb-to-msb 排序而不是 msb-to-lsb 排序?例如,这是否允许稍微更简单/更快的解码(或编码)代码?
我假设 Java 中的“InputBitStream”类会提供一些基本操作:
DEFLATE 位包装: http ://www.gzip.org/zlib/rfc-deflate.html#packing
h.264 - 在二进制 H.264 比特流中创建“洞”
我试图通过有选择地删除 H.264 比特流数据来模拟视频中的数据丢失。数据只是一个原始的 H.264 文件,本质上是一个二进制文件。我的计划是每 100 个字节删除 2 个字节,以达到 2% 的损失。最后,我将测试一些运动矢量错误隐藏算法的有效性。
如果能够在 Unix 环境中执行此操作,那就太好了。到目前为止,我已经对 xxd 命令进行了一些研究,并且能够从二进制文件中保存十六进制转储的特定部分。例如,要跳过二进制比特流的前 50 个字节并保存随后的 100 个字节,我将执行以下操作:
xxd -s 50 -l 100 inputBinaryFile | xxd -r > outputBinaryFile
我希望将类似的东西合并到一个 bash 脚本中,该脚本将自动删除每 100 个字节的最后 2 个字节。此外,我希望脚本在第二次出现序列00 00 01 06 05
(第一个 P 帧 SEI 开始代码)之前跳过所有内容。
我不知道在基于 C 的语言中这会容易多少,但我的编程技能非常有限,如果可能的话,我宁愿现在只处理 Linux 编程。
谢谢。
python - 位串与 python
我正在尝试使用 python 的位串来解释传入的数据包并将其分解为可读的部分。数据包将包含一个标头(Source(8bits),Destination(8bits),NS(3bits),NR(3bits),RSV(1bit),LST(1bit),OPcode(8bits),LEN(8bits)),有效负载介于 0 和 128 字节之间(由标头中的 LEN 确定)和 16 位的 CRC。
数据将通过 com 端口以大数据包的形式到达。数据来自一个微控制器,该微控制器将数据打包并将其发送给用户,这就是 python 发挥作用的地方。
由于我不确定如何在解析之前存储它,因此我没有任何代码。
我是 python 新手,需要一点帮助才能开始。
谢谢,埃里克
编辑
我目前有一段代码启动并运行,但它并没有产生我需要的东西......这是我启动并运行的代码段......
当 source 和 payload 都为 1 时,打印到终端的输出如下:
串行另一端的微读:0a0101441310031 当它应该读到 1 1 44 1 31 0031
Python 将每个值作为单独的字符发送,而不是将其作为一个字符发送。当它被附加到数据包中而不是存储到正确的长度和数据类型中时,它似乎已将十六进制分成 2 个 8 位位置而不是 1 个 8 位位置......
在读取确认数据包时,我从 Micro 读取的 Python 代码部分完美无缺。我没有用数据尝试过,但我认为这不会是一个问题。C 端无法从 python 端读取 ACK,因为它将十六进制值分成 2 个字符,而不是仅传输 8 位值......
有任何想法吗???谢谢
c++ - 在指定位偏移处读取/写入值
我需要在内存缓冲区中的指定位偏移处读取和写入指定位长(不一定是 8 的倍数)的数值,首先是最重要的位。
例如,在偏移量 6 和位长 4 处写入值 5:
所以我正在寻找的功能可能是这样定义的:
以及示例用法:
这些函数将用于在相对较大的缓冲区中读取/写入少量值(过滤大量网络流量),因此我丢弃(可能是错误地)使用std::bitset
.
是否有任何现有的库可用于实现/简化此任务?关于实施它有什么建议吗?
python - 如何使用位串读取完整的文件
我想从文件中读取尽可能多的 24 位块。 当我现在不知道有多少块时,如何使用位串的ConstBitStream来做到这一点?
目前我这样做:
(这里我要预先计算事件的数量)
perl - 使用 Perl 修改比特流
在 Perl 中修改比特后,如何将比特重新打包到比特流中?
我目前正在使用以下内容来解包:
例如,输出可能是 16。
编辑:
这个问题与GIF图像的数据块有关。
我要做的是填充 LZW 代码以匹配 PDFLZWDecode
方法所需的长度。
LZWDecode
需要 8 位图像,其中<Clear>
代码为 256,<End>
代码为 257(PDF 参考,第 44 页。)
对于 5 位图像,代码 0-31 映射到图像全局颜色表中的颜色,分别<Clear>
为 32 和<End>
33。
所以我需要重新打包比特流,使代码 0-31 保持不变,但 32+ 偏移 256-32。
我正在为 Windows 使用 ActiveState Perl。