sendLine中的Twisted TypeError

时间:2014-05-27 05:40:35

标签: python python-3.x twisted rtsp

我使用python-RTSP使用Twisted和Python3运行RTSP。我正在尝试使用上述配置访问youtube链接的RTSP信息。我必须使用Python3,因为我的剩余代码是在Python3中。

我正在使用

发送命令
self.sendLine('%s %s RTSP/1.0' % (command, path))

其中Command是 DESCRIBE ,而Path是url

rtsp://r7---sn-a5m7zu7d.c.youtube.com/CiILENy73wIaGQlFHOtrHD-E8RMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp

我通过以下语句获得错误:

File "/home/akshay_v/valuconnex-python/twisted/protocols/basic.py", line 637, in sendLine
        return self.transport.write(str(line + self.delimiter))
    builtins.TypeError: Can't convert 'bytes' object to str implicitly

self.delimiter = b'\r\n'
line is the *str* passed as argument in above statement.

如何使这个工作?

2 个答案:

答案 0 :(得分:1)

似乎并没有将python-RTSP移植到Python 3。尝试在Python 2.7(或者甚至是Python 2.6,正如其README建议的)上运行它。 Python 3与Python 2不兼容,未移植到它的软件将无效。

答案 1 :(得分:1)

正如Jean-Paul所说,你不能使用Python 3来运行python-RTSP。

如果您对此失败的确切性质感到好奇,则问题是transport.write会占用bytes个对象。在Python 2上与str的类型相同,在Python 3上它是它自己的类型。在Python 2上与Python 3 str类似的类型是unicode,并且您无法将unicode写入套接字,因此您可以“{1}}将其传递给transport.write

但是,您在twisted.protocols.basic中显示的代码行看起来像是Twisted的错误修改版本;我找不到在该位置曾调用str的Twisted版本。你是如何得到这个版本的Twisted的,你是否尝试升级到最新版本(截至本文撰写时为14.0.0)?