我使用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.
如何使这个工作?
答案 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)?