发送行时的扭曲类型错误
我正在使用 python-RTSP 通过 Twisted 和 Python3 来运行 RTSP。我想用这个配置来访问 YouTube 链接的 RTSP 信息。因为我其他的代码都是用 Python3 写的,所以我必须使用 Python3。
我发送的命令是:
self.sendLine('%s %s RTSP/1.0' % (command, path))
这里的命令是 DESCRIBE,路径就是那个网址:
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 个回答
1
看起来python-RTSP还没有移植到Python 3上。你可以试着在Python 2.7上运行它(或者根据它的说明,甚至可以试试Python 2.6)。因为Python 3和Python 2不兼容,所以没有移植到Python 3的软件是无法正常工作的。
2
正如Jean-Paul所说,你不能用Python 3来运行python-RTSP。
如果你想知道具体是什么原因导致这个问题,关键在于transport.write
需要一个bytes
对象。在Python 2中,bytes
和str
是同一种类型,但在Python 3中,它们是不同的类型。Python 2中与Python 3的str
相对应的类型是unicode
,而unicode
不能直接写入socket,所以你不能把它传给transport.write
。
不过,你在twisted.protocols.basic
中显示的那行代码,看起来像是对Twisted的错误修改版本;我找不到任何版本的Twisted在那个地方调用过str
。你是怎么得到这个版本的Twisted的?你有没有尝试升级到最新的版本(截至目前是14.0.0)?