2014-10-31 121 views
1

使用Python的rtmplib绑定并遇到一些问题。解码十六进制(?)数据包

首先,

我有这样的事情:

import librtmp 

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

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

这将打印数据包像图所示:

example

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

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的。

任何人都知道我怎么才能实现我早期以简单但好的方式提出的问题?

在此先感谢。

回答

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) 

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

1

如果你不知道你会得到什么,然后将数据保存到文件,并用查看器来看看它? (例如linux上的od)。

另外,如果你不知道你要接收什么数据,那么看看你是否找不到rtmp给你在线的格式描述。 (我想既然存在之类的东西RED5这应该被记录在案)..和LO有一些文档http://wwwimages.adobe.com/content/dam/Adobe/en/devnet/rtmp/pdf/rtmp_specification_1.0.pdf

如果你知道你会得到你可以解开与结构内置库 https://docs.python.org/2/library/struct.html

我的数据是什么'有点惊讶librtmp不会给你高层次的解析对象。你不能成为第一个想做这件事的人..所以看看是否有其他人有一个库来处理这个问题。

+0

我在做一些研究后正在研究struct。使用'print repr(packet)'打印出更具可读性的东西。感谢您的建议! – 2014-10-31 06:02:35

+0

不用担心队友 – 2014-10-31 06:03:20

+1

接受你的答案,也发现有一个函数叫做'librtmp.amf.decode_amf'来解码它。愚蠢的我没有想到AMF,当时我曾经使用过RTMP。 – 2014-12-21 14:24:43