发送行时的扭曲类型错误

1 投票
2 回答
1393 浏览
提问于 2025-04-18 07:40

我正在使用 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中,bytesstr是同一种类型,但在Python 3中,它们是不同的类型。Python 2中与Python 3的str相对应的类型是unicode,而unicode不能直接写入socket,所以你不能把它传给transport.write

不过,你在twisted.protocols.basic中显示的那行代码,看起来像是对Twisted的错误修改版本;我找不到任何版本的Twisted在那个地方调用过str。你是怎么得到这个版本的Twisted的?你有没有尝试升级到最新的版本(截至目前是14.0.0)?

撰写回答