【发布时间】:2021-09-29 07:25:23
【问题描述】:
我正在尝试使用 python websocket 执行信令,然后使用 aiortc 创建 peer2peer 连接,以实现基于 webRTC 的视频流使用纯python。
我已经成功地从一个同行向另一个人发送了一个报价,并且成功setRemoteDescription。
client_offer_request = await websocket.recv()
offer_sdp = RTCSessionDescription(client_offer_request, type='offer')
await pc.setRemoteDescription(offer_sdp)
但是,当我创建 answer 和 setLocalDescription 时,
# send answer
answer = await pc.createAnswer()
await pc.setLocalDescription(answer)
我得到了这个异常。
await self.ws_handler(self, path)
File "/xxxxx/WebRTC/websocket_server.py", line 45, in negotiate
await pc.setLocalDescription(answer)
File "/xxxxx/lib/python3.6/site-packages/aiortc/rtcpeerconnection.py", line 768, in setLocalDescription
t._currentDirection = and_direction(t.direction, t._offerDirection)
File "/xxxxx/lib/python3.6/site-packages/aiortc/rtcpeerconnection.py", line 247, in and_direction
return sdp.DIRECTIONS[sdp.DIRECTIONS.index(a) & sdp.DIRECTIONS.index(b)]
ValueError: None is not in list
代码如下:
from aiortc import RTCIceCandidate, MediaStreamTrack, RTCPeerConnection, RTCSessionDescription
import asyncio, websockets
def negotiate():
player = MediaPlayer('foo.mp4')
pc = RTCPeerConnection()
pc.addTrack(player.video)
clientOffer = await websocket.recv()
offer_sdp = RTCSessionDescription(clientOffer, type='offer')
await pc.setRemoteDescription(offer_sdp)
# send answer
answer = await pc.createAnswer()
await pc.setLocalDescription(answer)
start_server = websockets.serve(negotiate, 'localhost', 8765)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
【问题讨论】:
标签: python-3.x webrtc rtcpeerconnection aiortc