[TOC]
aiortc
aiortc是 WebRTC 和 ORTC 的Python异步实现。
install
apt install libavdevice-dev libavfilter-dev libopus-dev libvpx-dev pkg-config
# ffmpeg >= 3.2
pip install aiortc
example
from aiortc import RTCPeerConnection, RTCSessionDescription
from aiortc import VideoStreamTrack
async def offer(paramse):
# 解析 offer
request_offer = RTCSessionDescription(
sdp=params['sdp'],
type=params['type'])
# 创建一个连接class
pc = RTCPeerConnection()
pcs.add(pc)
# 监听数据通道
@pc.on("datachannel")
def on_datachannel(channel):
# 监听接收数据
@channel.on("message")
def on_message(message):
message_recieve = json.loads(message)
print("message_recieve:{message_recieve}")
# 监听断开连接
@pc.on('iceconnectionstatechange')
async def on_iceconnectionstatechange():
print(f'ICE connection state is {pc.iceConnectionState}')
if pc.iceConnectionState == 'failed':
await pc.close()
pcs.discard(pc)
@pc.on('track')
def on_track(track):
print('Track %s received' % track.kind)
if track.kind == 'audio':
# 接收语音数据
frame = await audio_track.recv()
pass
elif track.kind == 'video':
local_video = VideoTransformTrack(track)
pc.addTrack(local_video)
@track.on('ended')
async def on_ended():
print('Track %s ended' % track.kind)
# 设置 请求端 连接信息: request_offer
await pc.setRemoteDescription(request_offer)
# 设置 响应端 连接信息: answer
answer = await pc.createAnswer()
await pc.setLocalDescription(answer)
# 将 响应端 信息返回给 请求端: offer_result
offer_result = json.dumps({'sdp': pc.localDescription.sdp, 'type': pc.localDescription.type})
return offer_result