解码十六进制(?)数据包

时间:2014-10-31 05:31:57

标签: python linux python-2.7 rtmp

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

首先,

我有这样的事情:

import librtmp

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

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

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

example

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

0200 086f 6e42 5744 6f6e 6500 0000 0000
0000 0000 0500 0000 0000 0000 0000 0200
066e 6f74 6963 6500 0000 0000 0000 0000
0502 0003 2a2a 2a02 000a 5072 6f63 6573

所以我的问题是,如何将其转换为只有可读文本的真实字符串(或缓冲区)?我尝试了不同的东西来解码十六进制,但最终在结果中使用了“\ x05”。

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

任何人都知道如何以简单而又好的方式实现我之前提出的要求?

提前致谢。

2 个答案:

答案 0 :(得分:1)

如果您不知道将要获得什么,请将数据保存到文件中并使用查看器查看它? (例如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并没有为你提供高级解析对象。你不可能是第一个想要这样做的人..所以看看别人是否有一个lib来处理这个问题。

答案 1 :(得分:0)

解决方案是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)

管理librtmp包装器的人指出了这一点。