o
    dif                     @   st   d dl Z d dlmZ ddlmZ ddlmZmZmZ ddl	m
Z
 ddlmZ ddlmZ e eZG d	d
 d
ZdS )    N)Optional   )get_capabilities)RTCRtpCodecCapabilityRTCRtpCodecParametersRTCRtpHeaderExtensionParameters)RTCRtpReceiver)RTCRtpSender)
DIRECTIONSc                	   @   s4  e Zd ZdZ	d)dedededefddZed	e	e fd
dZ
ed	efddZejded	dfddZed	efddZed	e	e fddZed	efddZed	efddZed	efddZdee d	dfddZd*ddZded	dfdd Zd!ed	dfd"d#Zd	e	e fd$d%Zd&ed	dfd'd(ZdS )+RTCRtpTransceiverz
    The RTCRtpTransceiver interface describes a permanent pairing of an
    :class:`RTCRtpSender` and an :class:`RTCRtpReceiver`, along with some
    shared state.
    sendrecvkindreceiversender	directionc                 C   sR   d | _ || _|| _d | _d | _|| _|| _d| _d | _g | _	d| _
g | _g | _d S )NF)$_RTCRtpTransceiver__currentDirection_RTCRtpTransceiver__direction_RTCRtpTransceiver__kind_RTCRtpTransceiver__mid_RTCRtpTransceiver__mline_index_RTCRtpTransceiver__receiver_RTCRtpTransceiver__sender_RTCRtpTransceiver__stopped_offerDirection_preferred_codecs_bundled_codecs_headerExtensions)selfr   r   r   r    r   L/home/ubuntu/.local/lib/python3.10/site-packages/aiortc/rtcrtptransceiver.py__init__   s   
zRTCRtpTransceiver.__init__returnc                 C      | j S )z
        The currently negotiated direction of the transceiver.

        One of `'sendrecv'`, `'sendonly'`, `'recvonly'`, `'inactive'` or `None`.
        )r   r   r   r   r    currentDirection0   s   z"RTCRtpTransceiver.currentDirectionc                 C   r#   )z
        The preferred direction of the transceiver, which will be used in
        :meth:`RTCPeerConnection.createOffer` and
        :meth:`RTCPeerConnection.createAnswer`.

        One of `'sendrecv'`, `'sendonly'`, `'recvonly'` or `'inactive'`.
        )r   r$   r   r   r    r   9   s   	zRTCRtpTransceiver.directionNc                 C   s   |t v sJ || _d S N)r
   r   r   r   r   r   r    r   D   s   
c                 C   r#   r&   )r   r$   r   r   r    r   I      zRTCRtpTransceiver.kindc                 C   r#   r&   r   r$   r   r   r    midM   r(   zRTCRtpTransceiver.midc                 C   r#   )zi
        The :class:`RTCRtpReceiver` that handles receiving and decoding
        incoming media.
        )r   r$   r   r   r    r   Q      zRTCRtpTransceiver.receiverc                 C   r#   )zq
        The :class:`RTCRtpSender` responsible for encoding and sending
        data to the remote peer.
        )r   r$   r   r   r    r   Y   r+   zRTCRtpTransceiver.senderc                 C   r#   r&   )r   r$   r   r   r    stoppeda   r(   zRTCRtpTransceiver.stoppedcodecsc                 C   sV   |sg | _ t| jj}g }t|D ]}||vrtd||vr%|d| q|| _ dS )aa  
        Override the default codec preferences.

        See :meth:`RTCRtpSender.getCapabilities` and
        :meth:`RTCRtpReceiver.getCapabilities` for the supported codecs.

        :param codecs: A list of :class:`RTCRtpCodecCapability`, in decreasing order
                        of preference. If empty, restores the default preferences.
        zCodec is not in capabilitiesr   N)r   r   r   r-   reversed
ValueErrorinsert)r   r-   capabilitiesuniquecodecr   r   r    setCodecPreferencese   s   

z%RTCRtpTransceiver.setCodecPreferencesc                    s,   | j  I dH  | j I dH  d| _dS )zC
        Permanently stops the :class:`RTCRtpTransceiver`.
        NT)r   stopr   r   r$   r   r   r    r5   {   s   
zRTCRtpTransceiver.stopc                 C   sz   || _ |dkrd| j_d| j_d S |dkrd| j_d| j_d S |dkr-d| j_d| j_d S |dkr;d| j_d| j_d S d S )Nr   TsendonlyFrecvonlyinactive)r   r   _enabledr   r'   r   r   r    _setCurrentDirection   s   z&RTCRtpTransceiver._setCurrentDirectionr*   c                 C   
   || _ d S r&   r)   )r   r*   r   r   r    _set_mid      
zRTCRtpTransceiver._set_midc                 C   r#   r&   r   r$   r   r   r    _get_mline_index   s   z"RTCRtpTransceiver._get_mline_indexidxc                 C   r;   r&   r>   )r   r@   r   r   r    _set_mline_index   r=   z"RTCRtpTransceiver._set_mline_index)r   )r"   N)__name__
__module____qualname____doc__strr   r	   r!   propertyr   r%   r   setterr   r*   r   r   boolr,   listr   r4   r5   r:   r<   intr?   rA   r   r   r   r    r      sD    


r   )loggingtypingr   r-   r   rtcrtpparametersr   r   r   rtcrtpreceiverr   rtcrtpsenderr	   sdpr
   	getLoggerrB   loggerr   r   r   r   r    <module>   s    
