解码十六进制(?)小包

2024-10-04 09:31:03 发布

您现在位置:Python中文网/ 问答频道 /正文

使用Python的rtmplib绑定并遇到一些问题。在

首先

我有这样的东西:

import librtmp

conn = librtmp.RTMP(...)
conn.connect()

while True:
  packet = conn.read_packet().body
  print packet

这将打印如下所示的数据包:

{1美元^

对我来说,这看起来像十六进制,当我写入一个文件时,我得到4个字符字符串,如下所示:

^{pr2}$

所以我的问题是,如何将它转换成一个只有可读文本的真正的字符串(或缓冲区)?我尝试了不同的方法来解码hex,但结果是“\x05”。在

另外值得一提的是,在写作的时候,它包含了很多的00

有人知道我怎样才能以一种简单而好的方式实现我之前所要求的?在

提前谢谢。在


Tags: 文件字符串importtruereadpacketconnectbody
2条回答

解决方案是librtmp.amf.decode_amf。在

import librtmp

conn = librtmp.RTMP(...)
conn.connect()

while True:
  packet = conn.read_packet().body
  print packet
  print librtmp.amf.decode_amf(packet)

这是由管理Python的librtmp包装器的人指出的。在

如果你不知道你将得到什么,那么把数据保存到一个文件中,然后用查看器查看它?(例如linux上的od)。在

另外,如果你不知道你将收到什么样的数据,那么看看你是否找不到rtmp在线提供的任何格式的描述。(我认为既然像red5这样的东西存在,这应该被记录下来。。还有一些文档http://wwwimages.adobe.com/content/dam/Adobe/en/devnet/rtmp/pdf/rtmp_specification_1.0.pdf

如果你知道你得到了什么,你可以用struct内置库解包数据 https://docs.python.org/2/library/struct.html

不过,我有点惊讶librtmp没有提供高级解析对象。你不可能是第一个想这么做的人。。所以看看有没有其他人有一个库来处理这个问题。在

相关问题 更多 >