5c97379765
date: 2026-08-01T16:05:18 master commit: 3a05c03079d796f533f342489b3f681cfd21f98d
38 lines
1.2 KiB
Python
38 lines
1.2 KiB
Python
import dataclasses
|
|
|
|
from libdatachannel import Description
|
|
|
|
|
|
@dataclasses.dataclass
|
|
class StreamingMediaInfo:
|
|
n_expected_camera_tracks: int
|
|
expected_audio_track: bool
|
|
incoming_audio_track: bool
|
|
incoming_datachannel: bool
|
|
|
|
|
|
def parse_info_from_offer(sdp: str) -> StreamingMediaInfo:
|
|
"""
|
|
helper function to parse info about outgoing and incoming streams from an offer sdp
|
|
"""
|
|
desc = Description(sdp, Description.Type.Offer)
|
|
n_video = 0
|
|
expected_audio_track = False
|
|
incoming_audio_track = False
|
|
incoming_datachannel = desc.has_application()
|
|
|
|
for i in range(desc.media_count()):
|
|
media = desc.media(i)
|
|
if media is None:
|
|
continue
|
|
direction = media.direction()
|
|
if media.type() == "video" and direction in (Description.Direction.RecvOnly, Description.Direction.SendRecv):
|
|
n_video += 1
|
|
elif media.type() == "audio":
|
|
if direction in (Description.Direction.RecvOnly, Description.Direction.SendRecv):
|
|
expected_audio_track = True
|
|
if direction in (Description.Direction.SendOnly, Description.Direction.SendRecv):
|
|
incoming_audio_track = True
|
|
|
|
return StreamingMediaInfo(n_video, expected_audio_track, incoming_audio_track, incoming_datachannel)
|