Ë
    ÖÉ�jËa  ã            
       ó†  — d dl Z d dlZd dlZd dlmZmZ d dlmZmZmZ d dl	m
Z
mZmZ d dlmZ ddlmZ dZ ed	d
«      Z edd«      ZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$e G d„ d«      «       Z% G d„ d«      Z&de'de'fd„Z(de'de)fd „Z*d!e)de'fd"„Z+d#e'de'd$e)de)fd%„Z,d&e'd'e-e'   de)fd(„Z.d)e)de/e'e-e'   f   fd*„Z0d+e)de1fd,„Z2d-e'de'fd.„Z3d/e'd0e)de-e/e'e)f      fd1„Z4d2e-e/e'e)f      de/e'e)f   fd3„Z5d4ede'fd5„Z6e G d6„ d7«      «       Z7e G d8„ d9«      «       Z8e G d:„ d;«      «       Z9e G d<„ d=«      «       Z:e G d>„ d?«      «       Z;e G d@„ dA«      «       Z<e G dB„ dC«      «       Z=e G dD„ dE«      «       Z>e G dF„ dG«      «       Z?ee:e;e<e=e>e?f   Z@ G dH„ dI«      ZA G dJ„ dK«      ZBdLeBdMe'dNe'deBfdO„ZCdPeBdMe'dQe'dNe'deBf
dR„ZDy)Sé    N)Ú	dataclassÚfield)ÚpackÚunpackÚunpack_from)ÚAnyÚOptionalÚUnion)Ú
AudioFrameé   )ÚRTCRtpParametersé€   éH   éM   é`   é   é   i  €ÿiÿÿ éÈ   éÉ   éÊ   éË   éÍ   éÎ   é   é   é   c                   ó‚   — e Zd ZU dZee   ed<   dZeed<   dZ	eed<   dZ
eed<   dZeed<   dZee   ed<   dZee   ed<   y)	ÚHeaderExtensionsNÚabs_send_timeÚaudio_levelÚmidÚrepaired_rtp_stream_idÚrtp_stream_idÚtransmission_offsetÚtransport_sequence_number)Ú__name__Ú
__module__Ú__qualname__r   r	   ÚintÚ__annotations__r    r   r!   r"   r#   r$   r%   © ó    úK/home/uftp/webrtc-recorder/.venv/lib/python3.12/site-packages/aiortc/rtp.pyr   r   )   sV   … à#'€M�8˜C‘=Ó'Ø€K�ÓØ€CˆƒOØ"&Ð˜CÓ&Ø€M�3ÓØ)-Ð˜ #™Ó-Ø/3Ð˜x¨™}Ô3r,   r   c                   óR   — e Zd Zdd„Zdeddfd„Zdededefd„Z	d	ede
eef   fd
„Zy)ÚHeaderExtensionsMapÚreturnNc                 ó"   — t        «       | _        y ©N)r   Ú_HeaderExtensionsMap__ids©Úselfs    r-   Ú__init__zHeaderExtensionsMap.__init__5   s   € Ü%Ó'ˆ�
r,   Ú
parametersc                 óˆ  — |j                   D �]2  }|j                  dk(  r|j                  | j                  _        Œ/|j                  dk(  r|j                  | j                  _        ŒZ|j                  dk(  r|j                  | j                  _        Œ…|j                  dk(  r|j                  | j                  _        Œ°|j                  dk(  r|j                  | j                  _        ŒÛ|j                  dk(  r|j                  | j                  _	        �Œ|j                  dk(  s�Œ|j                  | j                  _
        �Œ5 y )Nz#urn:ietf:params:rtp-hdrext:sdes:midz6urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-idz-urn:ietf:params:rtp-hdrext:sdes:rtp-stream-idz:http://www.webrtc.org/experiments/rtp-hdrext/abs-send-timez"urn:ietf:params:rtp-hdrext:toffsetz+urn:ietf:params:rtp-hdrext:ssrc-audio-levelzIhttp://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01)ÚheaderExtensionsÚuriÚidr3   r!   r"   r#   r   r$   r    r%   )r5   r7   Úexts      r-   Ú	configurezHeaderExtensionsMap.configure8   sæ   € Ø×.Ñ.ó 	>ˆCØ�w‰wÐ?Ò?Ø!$§¡�—
‘
•Ø—‘ÐTÒTØ47·F±F�—
‘
Õ1Ø—‘ÐKÒKØ+.¯6©6�—
‘
Õ(à—‘ÐWÒWà+.¯6©6�—
‘
Õ(Ø—‘Ð@Ò@Ø14·±�—
‘
Õ.Ø—‘ÐIÒIØ),¯©�—
‘
Ö&à—‘Ø^ô_ð 8;·v±v�—
‘
Ö4ñ'	>r,   Úextension_profileÚextension_valuec                 ó  — t        «       }t        ||«      D �]f  \  }}|| j                  j                  k(  r|j	                  d«      |_        Œ7|| j                  j
                  k(  r|j	                  d«      |_        Œg|| j                  j                  k(  r|j	                  d«      |_        Œ—|| j                  j                  k(  rt        dd|z   «      d   |_        ŒÈ|| j                  j                  k(  rt        d|dz   «      d   dz	  |_	        Œü|| j                  j                  k(  r#t        d|«      d   }|d	z  d	k(  |d
z  f|_
        �Œ8|| j                  j                  k(  s�ŒSt        d|«      d   |_        �Œi |S )NÚutf8Úasciiú!Ló    r   ú!lé   ú!Br   é   ú!H)r   Úunpack_header_extensionsr3   r!   Údecoder"   r#   r   r   r$   r    r%   )r5   r>   r?   ÚvaluesÚx_idÚx_valueÚ	vad_levels          r-   ÚgetzHeaderExtensionsMap.getN   sY  € Ü!Ó#ˆÜ5Ø˜ó
ó 	L‰MˆD�'ð �t—z‘z—~‘~Ò%Ø$Ÿ^™^¨FÓ3�•
Ø˜Ÿ™×:Ñ:Ò:Ø07·±¸wÓ0G�Õ-Ø˜Ÿ™×1Ñ1Ò1Ø'.§~¡~°gÓ'>�Õ$Ø˜Ÿ™×1Ñ1Ò1Ü'-¨d°F¸WÑ4DÓ'EÀaÑ'H�Õ$Ø˜Ÿ™×7Ñ7Ò7Ü-3°D¸'ÀFÑ:JÓ-KÈAÑ-NÐRSÑ-S�Õ*Ø˜Ÿ™×/Ñ/Ò/Ü" 4¨Ó1°!Ñ4�	Ø&/°$Ñ&6¸$Ñ&>À	ÈDÑ@PÐ%Q�Ö"Ø˜Ÿ™×=Ñ=Ô=Ü39¸$ÀÓ3HÈÑ3K�Ö0ð#	Lð$ ˆr,   rL   c           	      ó–  — g }|j                   �V| j                  j                   r@|j                  | j                  j                   |j                   j                  d«      f«       |j                  �V| j                  j                  r@|j                  | j                  j                  |j                  j                  d«      f«       |j
                  �V| j                  j
                  r@|j                  | j                  j
                  |j
                  j                  d«      f«       |j                  �T| j                  j                  r>|j                  | j                  j                  t        d|j                  «      dd  f«       |j                  �W| j                  j                  rA|j                  | j                  j                  t        d|j                  dz  «      dd f«       |j                  �k| j                  j                  rU|j                  | j                  j                  t        d	|j                  d   rd
nd|j                  d   dz  z  «      f«       |j                  �Q| j                  j                  r;|j                  | j                  j                  t        d|j                  «      f«       t        |«      S )NrA   rB   rC   r   rE   rF   r   r   rG   r   rH   rI   )r!   r3   ÚappendÚencoder"   r#   r   r   r$   r    r%   Úpack_header_extensions)r5   rL   Ú
extensionss      r-   ÚsetzHeaderExtensionsMap.setd   sH  € Øˆ
Ø�:‰:Ð! d§j¡j§n¢nØ×Ñ˜tŸz™zŸ~™~¨v¯z©z×/@Ñ/@ÀÓ/HÐIÔJà×)Ñ)Ð5Ø—
‘
×1Ò1à×Ñà—J‘J×5Ñ5Ø×1Ñ1×8Ñ8¸ÓAðôð ×ÑÐ+°·
±
×0HÒ0HØ×ÑØ—‘×)Ñ)¨6×+?Ñ+?×+FÑ+FÀwÓ+OÐPôð ×ÑÐ+°·
±
×0HÒ0HØ×ÑØ—‘×)Ñ)¬4°°f×6JÑ6JÓ+KÈAÈBÐ+OÐPôð ×%Ñ%Ð1°d·j±j×6TÒ6TØ×Ñà—J‘J×2Ñ2Ü˜˜v×9Ñ9¸QÑ>Ó?ÀÀ!ÐDðôð ×ÑÐ)¨d¯j©j×.DÒ.DØ×Ñà—J‘J×*Ñ*ÜØØ!'×!3Ñ!3°AÒ!6™¸AØ!×-Ñ-¨aÑ0°4Ñ7ñ9óðô	ð ×,Ñ,Ð8Ø—
‘
×4Ò4à×Ñà—J‘J×8Ñ8Ü˜˜v×?Ñ?Ó@ðôô & jÓ1Ð1r,   )r0   N)r&   r'   r(   r6   r   r=   r)   Úbytesr   rP   ÚtuplerV   r+   r,   r-   r/   r/   4   sS   „ ó(ð>Ð$4ð >¸ó >ð, Sð ¸5ð ÐEUó ð,22Ð*ð 22¨u°S¸%°ZÑ/@ô 22r,   r/   Úcountr0   c                 ó>   — t        t        t        | t        «      «      S r2   )ÚmaxÚPACKETS_LOST_MINÚminÚPACKETS_LOST_MAX©rY   s    r-   Úclamp_packets_lostr`   ™   s   € ÜÔ¤ UÔ,<Ó!=Ó>Ð>r,   c                 ó    — t        d| «      dd  S )NrE   r   )r   r_   s    r-   Úpack_packets_lostrb   �   s   € Ü��eÓ˜Q˜RÐ Ð r,   Údc                 óF   — | d   dz  rd| z   } nd| z   } t        d| «      d   S )Nr   r   ó   ÿrD   rE   ©r   )rc   s    r-   Úunpack_packets_lostrg   ¡   s0   € Øˆ�tˆd‚{Ø�a‰K‰à�a‰KˆÜ�$˜‹?˜1ÑÐr,   Úpacket_typeÚpayloadc                 óh   — t        |«      dz  dk(  sJ ‚t        dd|z  | t        |«      dz  «      |z   S )Nr   r   ú!BBHr   )Úlenr   )rh   rY   ri   s      r-   Úpack_rtcp_packetrm   ©   s=   € Üˆw‹<˜!Ñ˜qÒ Ð Ð Ü�˜ 5Ñ(¨+´s¸7³|ÀqÑ7HÓIÈGÑSÐSr,   ÚbitrateÚssrcsc                 ó´   — d}d}| }|dkD  r|dz  }|dz  }|dkD  rŒ|t        dt        |«      |dz  |dz	  z  |dz  «      z  }|D ]  }|t        d	|«      z  }Œ |S )
z‡
    Pack the FCI for a Receiver Estimated Maximum Bitrate report.

    https://tools.ietf.org/html/draft-alvestrand-rmcat-remb-03
    ó   REMBr   iÿÿ r   rk   r   é   iÿÿ  rC   )r   rl   )rn   ro   ÚdataÚexponentÚmantissaÚssrcs         r-   Úpack_remb_fcirw   ®   s�   € ð €DØ€HØ€HØ
�WÒ
Ø�Q‰ˆØ�A‰ˆð �WÓ
ð 	ŒDØ”�E“
˜X¨™]¨x¸2©~Ñ>ÀÈFÑARóñ €Dð ò !ˆØ”�T˜4Ó Ñ ‰ð!à€Kr,   rs   c                 ó  — t        | «      dk  s| dd dk7  rt        d«      ‚| d   dz  dz	  }| d   d	z  d
z  | d   dz  z  | d   z  }||z  }d}g }t        | d   «      D ]&  }|j                  t	        d| |«      d   «       |dz  }Œ( ||fS )z‰
    Unpack the FCI for a Receiver Estimated Maximum Bitrate report.

    https://tools.ietf.org/html/draft-alvestrand-rmcat-remb-03
    rF   r   r   rq   zInvalid REMB prefixé   éü   r   r   rr   é   é   rC   )rl   Ú
ValueErrorÚrangerR   r   )rs   rt   ru   rn   Úposro   Úrs          r-   Úunpack_remb_fcir�   Â   s½   € ô ˆ4ƒy�1‚}˜˜Q˜q˜	 WÒ,ÜÐ.Ó/Ð/à�Q‘˜$‘ 1Ñ$€HØ�a‘˜4‘ BÑ&¨4°©7°a©<Ñ8¸4À¹7ÑB€HØ˜(Ñ"€Gà
€CØ€EÜ�4˜‘7‹^ò ˆØ�‰”[  t¨SÓ1°!Ñ4Ô5Øˆq‰‰ðð �UÐÐr,   Úmsgc                 óF   — t        | «      dk\  xr | d   dk\  xr | d   dk  S )Nr   r   éÀ   éÐ   )rl   )r‚   s    r-   Úis_rtcpr†   Ø   s*   € Üˆs‹8�q‰=Ò<˜S ™V s™]Ò<¨s°1©v¸©}Ð<r,   Úlengthc                 ó   — d| dz   dz  z  | z
  S )z@
    Return amount of padding needed for a 4-byte multiple.
    r   r   r+   )r‡   s    r-   Úpadlr‰   Ü   s   € ð �˜!‘ Ñ!Ñ" VÑ+Ð+r,   r>   r?   c                 óZ  — g }d}| dk(  r„|t        |«      k  rt||   dk(  r|dz  }Œ||   dz  dz	  }||   dz  dz   }|dz  }t        |«      ||z   k  rt        d«      ‚||||z    }|j                  ||f«       ||z  }|t        |«      k  rŒt|S | dk(  r˜|t        |«      k  rŠ||   dk(  r|dz  }Œt        |«      |d	z   k  rt        d
«      ‚t        d||«      \  }}|d	z  }t        |«      ||z   k  rt        d«      ‚||||z    }|j                  ||f«       ||z  }|t        |«      k  rŒŠ|S )z8
    Parse header extensions according to RFC 5285.
    r   éÞ¾  r   éð   r   r   z0RTP one-byte header extension value is truncatedé   r   z*RTP two-byte header extension is truncatedú!BBz0RTP two-byte header extension value is truncated)rl   r}   rR   r   )r>   r?   rU   r   rM   Úx_lengthrN   s          r-   rJ   rJ   ã   s”  € ð €JØ
€Cà˜FÒ"à”C˜Ó(Ò(à˜sÑ# qÒ(Ø�q‘�Øà# CÑ(¨4Ñ/°AÑ5ˆDØ'¨Ñ,¨tÑ3°qÑ8ˆHØ�1‰HˆCä�?Ó# c¨H¡nÒ4Ü Ð!SÓTÐTØ% c¨C°(©NÐ;ˆGØ×Ñ˜t W˜oÔ.Ø�8‰OˆCð ”C˜Ó(Ó(ðD Ðð' 
˜fÒ	$à”C˜Ó(Ò(à˜sÑ# qÒ(Ø�q‘�Øä�?Ó# c¨A¡gÒ-Ü Ð!MÓNÐNÜ(¨°ÀÓE‰NˆD�(Ø�1‰HˆCä�?Ó# c¨H¡nÒ4Ü Ð!SÓTÐTØ% c¨C°(©NÐ;ˆGØ×Ñ˜t W˜oÔ.Ø�8‰OˆCð ”C˜Ó(Ó(ð" Ðr,   rU   c                 ó¢  — d}d}| s||fS d}| D ]:  \  }}t        |«      }|dkD  r|dk  sJ ‚|dk\  r|dk  sJ ‚|dkD  s|dk(  s|dkD  sŒ9d}Œ< |r7d}d}| D ]-  \  }}t        |«      }|t        d	|d
z  |dz
  z  «      z  }||z  }Œ/ n.d}d}| D ]%  \  }}t        |«      }|t        d||«      z  }||z  }Œ' |dt        t        |«      «      z  z  }||fS )z<
    Serialize header extensions according to RFC 5285.
    r   r,   Té   é   rr   Fr‹   rG   r   r   r�   rŽ   rD   )rl   r   r‰   )rU   r>   r?   Úone_byterM   rN   r�   s          r-   rT   rT     s<  € ð ÐØ€OáØ  /Ð1Ð1à€HØ#ò ‰ˆˆgÜ�w“<ˆØ�aŠx˜D 3šJÐ&Ð&Ø˜1Š} ¨C¢Ð/Ð/Ø�"Š9˜ Aš¨°B«Ø‰Hðñ à"ÐØˆØ'ò 	'‰MˆD�'Ü˜7“|ˆHØœt D¨4°1©9¸ÀA¹Ñ*FÓGÑGˆOØ˜wÑ&‰Oñ	'ð #ÐØˆØ'ò 	'‰MˆD�'Ü˜7“|ˆHØœt E¨4°Ó:Ñ:ˆOØ˜wÑ&‰Oð	'ð
 �w¤¤c¨/Ó&:Ó!;Ñ;Ñ;€OØ˜oÐ-Ð-r,   Úframec                 óœ  — d}d}d}d}t        | j                  d   «      }t        j                  d«      }|j	                  |«      D ]  }|d   }|||z  z  }Œ t        j                  || j                  |z  |z  z  «      }|dkD  r;dt        j                  |«      z  }	t        |	|«      }	t        |	|«      }	t        |	«      S |}	t        |	«      S )zJ
    Compute the energy level as spelled out in RFC 6465, Appendix A.
    iÿ  r   i�ÿÿÿg        Úhé   )rW   ÚplanesÚstructÚStructÚiter_unpackÚmathÚsqrtÚsamplesÚlog10r[   r]   Úround)
r”   ÚMAX_SAMPLE_VALUEÚMAX_AUDIO_LEVELÚMIN_AUDIO_LEVELÚrmsÚbufÚsÚunpackedÚsampleÚdbs
             r-   Úcompute_audio_level_dbovrª   :  sÛ   € ð ÐØ€OØ€OØ
€CÜ
�—‘˜Q‘Ó
 €CÜ�‰�cÓ€AØ—M‘M #Ó&ò ˆØ˜!‘ˆØˆv˜‰Ñ‰ðô �)‰)�C˜5Ÿ=™=Ð+;Ñ;Ð>NÑNÑOÓ
P€CØ
ˆQ‚wØ”$—*‘*˜S“/Ñ!ˆÜ��_Ó%ˆÜ��_Ó%ˆô �‹9Ðð ˆÜ�‹9Ðr,   c                   óz   — e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   eed<   defd	„Zed
edd fd„«       Zy)ÚRtcpReceiverInforv   Úfraction_lostÚpackets_lostÚhighest_sequenceÚjitterÚlsrÚdlsrr0   c                 óì   — t        d| j                  | j                  «      }|t        | j                  «      z  }|t        d| j
                  | j                  | j                  | j                  «      z  }|S )Nú!LBú!LLLL)	r   rv   r­   rb   r®   r¯   r°   r±   r²   )r5   rs   s     r-   Ú	__bytes__zRtcpReceiverInfo.__bytes__[  s^   € Ü�E˜4Ÿ9™9 d×&8Ñ&8Ó9ˆØÔ! $×"3Ñ"3Ó4Ñ4ˆØ”�W˜d×3Ñ3°T·[±[À$Ç(Á(ÈDÏIÉIÓVÑVˆØˆr,   rs   c           	      óˆ   — t        d|dd «      \  }}t        |dd «      }t        d|dd  «      \  }}}} | |||||||¬«      S )Nr´   r   ry   rF   rµ   )rv   r­   r®   r¯   r°   r±   r²   )r   rg   )	Úclsrs   rv   r­   r®   r¯   r°   r±   r²   s	            r-   ÚparsezRtcpReceiverInfo.parsea  sg   € ä$ U¨D°°1¨IÓ6ÑˆˆmÜ*¨4°°!¨9Ó5ˆÜ.4°W¸dÀ1À2¸hÓ.GÑ+Ð˜& # tÙØØ'Ø%Ø-ØØØô
ð 	
r,   N©	r&   r'   r(   r)   r*   rW   r¶   Úclassmethodr¹   r+   r,   r-   r¬   r¬   Q  sW   … à
ƒIØÓØÓØÓØƒKØ	ƒHØ
ƒIð˜5ó ð ð
˜ð 
Ð#5ò 
ó ñ
r,   r¬   c                   ó\   — e Zd ZU eed<   eed<   eed<   eed<   defd„Zededd fd„«       Zy	)
ÚRtcpSenderInfoÚntp_timestampÚrtp_timestampÚpacket_countÚoctet_countr0   c                 óp   — t        d| j                  | j                  | j                  | j                  «      S )Nú!QLLL)r   r¾   r¿   rÀ   rÁ   r4   s    r-   r¶   zRtcpSenderInfo.__bytes__x  s6   € ÜØØ×ÑØ×ÑØ×ÑØ×Ñó
ð 	
r,   rs   c                 ó<   — t        d|«      \  }}}} | ||||¬«      S )NrÃ   )r¾   r¿   rÀ   rÁ   rf   )r¸   rs   r¾   r¿   rÀ   rÁ   s         r-   r¹   zRtcpSenderInfo.parse�  s1   € äBHÈÐRVÓBWÑ?ˆ�} l°KÙØ'Ø'Ø%Ø#ô	
ð 	
r,   Nrº   r+   r,   r-   r½   r½   q  sI   … àÓØÓØÓØÓð
˜5ó 
ð ð
˜ð 
Ð#3ò 
ó ñ
r,   r½   c                   ó2   — e Zd ZU eed<   eeeef      ed<   y)ÚRtcpSourceInforv   ÚitemsN)	r&   r'   r(   r)   r*   ÚlistrX   r   rW   r+   r,   r-   rÆ   rÆ   Œ  s   … à
ƒIØ��c˜5�jÑ!Ñ"Ô"r,   rÆ   c                   óH   — e Zd ZU ee   ed<   defd„Zedededd fd„«       Z	y)ÚRtcpByePacketÚsourcesr0   c           	      óº   — dj                  | j                  D �cg c]  }t        d|«      ‘Œ c}«      }t        t        t        | j                  «      |«      S c c}w )Nr,   rC   )ÚjoinrË   r   rm   ÚRTCP_BYErl   )r5   rv   ri   s      r-   r¶   zRtcpByePacket.__bytes__–  sD   € Ø—(‘(¸¿¹ÖF°œD  tÕ,ÒFÓGˆÜ¤¬#¨d¯l©lÓ*;¸WÓEÐEùò Gs   šArs   rY   c                 ó”   — t        |«      d|z  k  rt        d«      ‚|dkD  rt        t        dd|z  z   |d«      «      }ng } | |¬«      S )Nr   zRTCP bye length is invalidr   ú!ÚL)rË   )rl   r}   rÈ   r   )r¸   rs   rY   rË   s       r-   r¹   zRtcpByePacket.parseš  sQ   € äˆt‹9�q˜5‘yÒ ÜÐ9Ó:Ð:Ø�1Š9Üœ; s¨c°E©kÑ':¸DÀ!ÓDÓE‰GàˆGÙ˜7Ô#Ð#r,   N)
r&   r'   r(   rÈ   r)   r*   rW   r¶   r»   r¹   r+   r,   r-   rÊ   rÊ   ’  sC   … à�#‰YÓðF˜5ó Fð ð$˜ð $ sð $¨ò $ó ñ$r,   rÊ   c                   óh   — e Zd ZU dZeed<   eed<   eed<   dZeed<   defd„Ze	d	ededd fd
„«       Z
y)ÚRtcpPsfbPacketz7
    Payload-Specific Feedback Message (RFC 4585).
    Úfmtrv   Ú
media_ssrcr,   Úfcir0   c                 ó”   — t        d| j                  | j                  «      | j                  z   }t	        t
        | j                  |«      S )Nú!LL)r   rv   rÕ   rÖ   rm   Ú	RTCP_PSFBrÔ   )r5   ri   s     r-   r¶   zRtcpPsfbPacket.__bytes__°  s4   € Ü�u˜dŸi™i¨¯©Ó9¸D¿H¹HÑDˆÜ¤	¨4¯8©8°WÓ=Ð=r,   rs   c                 óz   — t        |«      dk  rt        d«      ‚t        d|dd «      \  }}|dd  } | ||||¬«      S )NrF   z0RTCP payload-specific feedback length is invalidrØ   r   )rÔ   rv   rÕ   rÖ   )rl   r}   r   )r¸   rs   rÔ   rv   rÕ   rÖ   s         r-   r¹   zRtcpPsfbPacket.parse´  sL   € äˆt‹9�qŠ=ÜÐOÓPÐPä! %¨¨a°¨Ó3ÑˆˆjØ�1�2ˆhˆÙ�s °*À#ÔFÐFr,   N)r&   r'   r(   Ú__doc__r)   r*   rÖ   rW   r¶   r»   r¹   r+   r,   r-   rÓ   rÓ   ¥  s]   … ñð 
ƒHØ
ƒIØƒOØ€CˆÓð>˜5ó >ð ðG˜ð G Sð GÐ-=ò Gó ñGr,   rÓ   c                   ód   — e Zd ZU eed<    ee¬«      Zee   ed<   de	fd„Z
ede	dedd fd„«       Zy	)
ÚRtcpRrPacketrv   ©Údefault_factoryÚreportsr0   c                 ó´   — t        d| j                  «      }| j                  D ]  }|t        |«      z  }Œ t	        t
        t        | j                  «      |«      S ©NrC   )r   rv   rà   rW   rm   ÚRTCP_RRrl   ©r5   ri   Úreports      r-   r¶   zRtcpRrPacket.__bytes__Ã  sK   € Ü�t˜TŸY™YÓ'ˆØ—l‘lò 	%ˆFØ”u˜V“}Ñ$‰Gð	%ä¤¬¨T¯\©\Ó):¸GÓDÐDr,   rs   rY   c           	      óþ   — t        |«      dd|z  z   k7  rt        d«      ‚t        d|dd «      d   }d}g }t        |«      D ]1  }|j	                  t
        j                  |||dz    «      «       |dz  }Œ3  | ||¬«      S )Nr   é   z&RTCP receiver report length is invalidrC   r   )rv   rà   )rl   r}   r   r~   rR   r¬   r¹   )r¸   rs   rY   rv   r   rà   r€   s          r-   r¹   zRtcpRrPacket.parseÉ  s‘   € äˆt‹9˜˜B ™J™Ò&ÜÐEÓFÐFä�d˜D  1˜IÓ& qÑ)ˆØˆØˆÜ�u“ò 	ˆAØ�N‰NÔ+×1Ñ1°$°s¸SÀ2¹XÐ2FÓGÔHØ�2‰I‰Cð	ñ ˜ gÔ.Ð.r,   N)r&   r'   r(   r)   r*   r   rÈ   rà   r¬   rW   r¶   r»   r¹   r+   r,   r-   rÝ   rÝ   ¾  sS   … à
ƒIÙ&+¸DÔ&A€GˆTÐ"Ñ#ÓAðE˜5ó Eð ð
/˜ð 
/ sð 
/¨~ò 
/ó ñ
/r,   rÝ   c                   ó|   — e Zd ZU dZeed<   eed<   eed<    ee¬«      Zee   ed<   de	fd„Z
ed	e	dedd fd
„«       Zy)ÚRtcpRtpfbPacketz2
    Generic RTP Feedback Message (RFC 4585).
    rÔ   rv   rÕ   rÞ   Úlostr0   c                 óP  — t        d| j                  | j                  «      }| j                  r_| j                  d   }d}| j                  dd  D ],  }||z
  dz
  }|dk  r	|d|z  z  }Œ|t        d||«      z  }|}d}Œ. |t        d||«      z  }t	        t
        | j                  |«      S )NrØ   r   r   rr   ú!HH)r   rv   rÕ   rê   rm   Ú
RTCP_RTPFBrÔ   )r5   ri   ÚpidÚblpÚprc   s         r-   r¶   zRtcpRtpfbPacket.__bytes__ä  s°   € Ü�u˜dŸi™i¨¯©Ó9ˆØ�9Š9Ø—)‘)˜A‘,ˆCØˆCØ—Y‘Y˜q˜r�]ò �Ø˜‘G˜a‘K�Ø�r’6Ø˜1 ™6‘M‘Càœt E¨3°Ó4Ñ4�GØ�CØ‘Cðð ”t˜E 3¨Ó,Ñ,ˆGÜ¤
¨D¯H©H°gÓ>Ð>r,   rs   c                 ót  — t        |«      dk  st        |«      dz  rt        d«      ‚t        d|dd «      \  }}g }t        dt        |«      d«      D ]Y  }t        d|||dz    «      \  }}|j	                  |«       t        dd«      D ]"  }	||	z	  dz  sŒ|j	                  ||	z   dz   «       Œ$ Œ[  | ||||¬	«      S )
NrF   r   z#RTCP RTP feedback length is invalidrØ   r   rì   rr   r   )rÔ   rv   rÕ   rê   )rl   r}   r   r~   rR   )
r¸   rs   rÔ   rv   rÕ   rê   r   rî   rï   rc   s
             r-   r¹   zRtcpRtpfbPacket.parseô  sÉ   € äˆt‹9�qŠ=œC ›I¨šMÜÐBÓCÐCä! %¨¨a°¨Ó3ÑˆˆjØˆÜ˜œC ›I qÓ)ò 	-ˆCÜ˜e T¨#°°a±Ð%8Ó9‰HˆC�Ø�K‰K˜ÔÜ˜1˜b“\ò -�Ø˜1‘H “>Ø—K‘K  a¡¨!¡Õ,ñ-ð	-ñ �s °*À4ÔHÐHr,   N)r&   r'   r(   rÛ   r)   r*   r   rÈ   rê   rW   r¶   r»   r¹   r+   r,   r-   ré   ré   ×  sh   … ñð 
ƒHØ
ƒIØƒOñ ¨DÔ1€Dˆ$ˆs‰)Ó1ð?˜5ó ?ð  ðI˜ð I Sð IÐ->ò Ió ñIr,   ré   c                   óZ   — e Zd ZU  ee¬«      Zee   ed<   defd„Z	e
dededd fd„«       Zy)	ÚRtcpSdesPacketrÞ   Úchunksr0   c           
      óP  — d}| j                   D ]P  }|t        d|j                  «      z  }|j                  D ]!  \  }}|t        d|t	        |«      «      |z   z  }Œ# |dz  }ŒR t	        |«      dz  r|dz  }t	        |«      dz  rŒt        t        t	        | j                   «      |«      S )Nr,   rC   rŽ   s     r   rD   )rô   r   rv   rÇ   rl   rm   Ú	RTCP_SDES)r5   ri   ÚchunkÚd_typeÚd_values        r-   r¶   zRtcpSdesPacket.__bytes__  s¬   € ØˆØ—[‘[ò 	#ˆEØ”t˜D %§*¡*Ó-Ñ-ˆGØ#(§;¡;ò G‘�˜Øœ4  v¬s°7«|Ó<¸wÑFÑF‘ðGà�{Ñ"‰Gð		#ô
 �'‹l˜QÒØ�wÑˆGô �'‹l˜QÓä¤	¬3¨t¯{©{Ó+;¸WÓEÐEr,   rs   rY   c                 óÎ  — d}g }t        |«      D ]Ë  }t        |«      |dz   k  rt        d«      ‚t        d||«      d   }|dz  }g }|t        |«      dz
  k  rit        d||«      \  }}	|dz  }t        |«      ||	z   k  rt        d«      ‚||||	z    }
||	z  }|dk(  rn%|j	                  ||
f«       |t        |«      dz
  k  rŒi|j	                  t        ||¬	«      «       ŒÍ  | |¬
«      S )Nr   r   zRTCP SDES source is truncatedrC   r   rŽ   r   zRTCP SDES item is truncated)rv   rÇ   )rô   )r~   rl   r}   r   rR   rÆ   )r¸   rs   rY   r   rô   r€   rv   rÇ   rø   Úd_lengthrù   s              r-   r¹   zRtcpSdesPacket.parse  s  € àˆØˆÜ�u“ò 	BˆAÜ�4‹y˜3 ™7Ò"Ü Ð!@ÓAÐAÜ˜t T¨3Ó/°Ñ2ˆDØ�1‰HˆCàˆEØœ˜D›	 A™Ò%Ü#.¨u°d¸CÓ#@Ñ �˜Ø�q‘�ä�t“9˜s X™~Ò-Ü$Ð%BÓCÐCØ˜s S¨8¡^Ð4�Ø�x‘�Ø˜Q’;Øà—L‘L &¨'Ð!2Ô3ð œ˜D›	 A™Ó%ð �M‰Mœ.¨d¸%Ô@ÕAð'	Bñ( ˜&Ô!Ð!r,   N)r&   r'   r(   r   rÈ   rô   rÆ   r*   rW   r¶   r»   r)   r¹   r+   r,   r-   ró   ró     sN   … á#(¸Ô#>€FˆD�Ñ Ó>ð	F˜5ó 	Fð ð"˜ð " sð "Ð/?ò "ó ñ"r,   ró   c                   ón   — e Zd ZU eed<   eed<    ee¬«      Zee	   ed<   de
fd„Zede
dedd fd	„«       Zy
)ÚRtcpSrPacketrv   Úsender_inforÞ   rà   r0   c                 óä   — t        d| j                  «      }|t        | j                  «      z  }| j                  D ]  }|t        |«      z  }Œ t        t        t        | j                  «      |«      S râ   )r   rv   rW   rþ   rà   rm   ÚRTCP_SRrl   rä   s      r-   r¶   zRtcpSrPacket.__bytes__4  s`   € Ü�t˜TŸY™YÓ'ˆØ”5˜×)Ñ)Ó*Ñ*ˆØ—l‘lò 	%ˆFØ”u˜V“}Ñ$‰Gð	%ä¤¬¨T¯\©\Ó):¸GÓDÐDr,   rs   rY   c           	      ó0  — t        |«      dd|z  z   k7  rt        d«      ‚t        d|«      d   }t        j	                  |dd «      }d}g }t        |«      D ]1  }|j                  t        j	                  |||dz    «      «       |dz  }Œ3 t        |||¬«      S )Nrç   z$RTCP sender report length is invalidrC   r   r   )rv   rþ   rà   )	rl   r}   r   r½   r¹   r~   rR   r¬   rý   )r¸   rs   rY   rv   rþ   r   rà   r€   s           r-   r¹   zRtcpSrPacket.parse;  s£   € äˆt‹9˜˜R %™Z™Ò'ÜÐCÓDÐDä˜4 Ó& qÑ)ˆÜ$×*Ñ*¨4°°"¨:Ó6ˆØˆØˆÜ�u“ò 	ˆAØ�N‰NÔ+×1Ñ1°$°s¸SÀ2¹XÐ2FÓGÔHØ�2‰I‰Cð	ô  °;ÈÔPÐPr,   N)r&   r'   r(   r)   r*   r½   r   rÈ   rà   r¬   rW   r¶   r»   r¹   r+   r,   r-   rý   rý   .  s^   … à
ƒIØÓÙ&+¸DÔ&A€GˆTÐ"Ñ#ÓAðE˜5ó Eð ðQ˜ð Q sð Q¨~ò Qó ñQr,   rý   c                   ó,   — e Zd Zededee   fd„«       Zy)Ú
RtcpPacketrs   r0   c                 óô  — d}g }|t        |«      k  �rät        |«      |t        z   k  rt        dt        › d�«      ‚t        d|||dz    «      \  }}}|dz	  }|dz	  dz  }|d	z  }	|d
k7  rt        d«      ‚|dz  }||dz  z   }
t        |«      |
k  rt        d«      ‚|||
 }|
}|r,|r|d   r|d   t        |«      kD  rt        d«      ‚|d|d     }|t        k(  r&|j                  t        j                  ||	«      «       nê|t        k(  r&|j                  t        j                  ||	«      «       n»|t        k(  r&|j                  t        j                  ||	«      «       nŒ|t        k(  r&|j                  t        j                  ||	«      «       n]|t        k(  r&|j                  t        j                  ||	«      «       n.|t         k(  r%|j                  t"        j                  ||	«      «       |t        |«      k  r�Œä|S )Nr   z RTCP packet length is less than ú bytesrk   r   r{   ry   r   é   r   zRTCP packet has invalid versionzRTCP packet is truncatedéÿÿÿÿz%RTCP packet padding length is invalid)rl   ÚRTCP_HEADER_LENGTHr}   r   rÎ   rR   rÊ   r¹   rö   ró   r   rý   rã   rÝ   rí   ré   rÙ   rÓ   )r¸   rs   r   ÚpacketsÚ	v_p_countrh   r‡   ÚversionÚpaddingrY   Úendri   s               r-   r¹   zRtcpPacket.parseU  së  € àˆØ')ˆà”C˜“I‹oÜ�4‹y˜3Ô!3Ñ3Ò3Ü Ø6Ô7IÐ6JÈ&ÐQóð ô .4°F¸DÀÀsÈQÁwÐ<OÓ-PÑ*ˆI�{ FØ 1‘nˆGØ  A‘~¨Ñ*ˆGØ Ñ$ˆEØ˜!Š|Ü Ð!BÓCÐCØ�1‰HˆCà˜ ™
Ñ"ˆCÜ�4‹y˜3ŠÜ Ð!;Ó<Ð<Ø˜3˜s�mˆGØˆCáÙ g¨b¢k°W¸R±[Ä3ÀwÃ<Ò5OÜ$Ð%LÓMÐMØ! ! w¨r¡{ lÐ3�àœhÒ&Ø—‘œ}×2Ñ2°7¸EÓBÕCØ¤	Ò)Ø—‘œ~×3Ñ3°G¸UÓCÕDØ¤Ò'Ø—‘œ|×1Ñ1°'¸5ÓAÕBØ¤Ò'Ø—‘œ|×1Ñ1°'¸5ÓAÕBØ¤
Ò*Ø—‘œ×4Ñ4°W¸eÓDÕEØ¤	Ò)Ø—‘œ~×3Ñ3°G¸UÓCÔDðI ”C˜“IŒoðL ˆr,   N)r&   r'   r(   r»   rW   rÈ   ÚAnyRtcpPacketr¹   r+   r,   r-   r  r  T  s'   „ Øð*˜ð * 4¨Ñ#6ò *ó ñ*r,   r  c                   ó”   — e Zd Z	 	 	 	 	 	 ddededededededdfd	„Zdefd
„Ze e	«       fdede	dd fd„«       Z
 e	«       fde	defd„Zy)Ú	RtpPacketÚpayload_typeÚmarkerÚsequence_numberÚ	timestamprv   ri   r0   Nc                 ó    — d| _         || _        || _        || _        || _        || _        g | _        t        «       | _        || _	        d| _
        y )Nr   r   )r  r  r  r  r  rv   Úcsrcr   rU   ri   Úpadding_size)r5   r  r  r  r  rv   ri   s          r-   r6   zRtpPacket.__init__„  sP   € ð ˆŒØˆŒØ(ˆÔØ.ˆÔØ"ˆŒØˆŒ	Ø!ˆŒ	Ü*Ó,ˆŒØˆŒØˆÕr,   c                 óœ   — d| j                   › d| j                  › d| j                  › d| j                  › dt	        | j
                  «      › d�S )NzRtpPacket(seq=z, ts=z	, marker=z
, payload=z, z bytes))r  r  r  r  rl   ri   r4   s    r-   Ú__repr__zRtpPacket.__repr__˜  sT   € à˜T×1Ñ1Ð2°%¸¿¹Ð7Gð HØ—k‘k�] *¨T×->Ñ->Ð,?¸rÜ�4—<‘<Ó Ð! ð*ð	
r,   rs   Úextensions_mapc                 ó:  — t        |«      t        k  rt        dt        › d�«      ‚t        d|dd «      \  }}}}}|dz	  }|dz	  dz  }	|d	z	  dz  }
|d
z  }|dk7  rt        d«      ‚t        |«      t        d	|z  z   k  rt        d«      ‚ | |dz	  |dz  |||¬«      }t        }t	        d|«      D ]0  }|j
                  j                  t        d||«      d   «       |d	z  }Œ2 |
rvt        |«      |d	z   k  rt        d«      ‚t        d||«      \  }}|d	z  }|d	z  }t        |«      ||z   k  rt        d«      ‚||||z    }||z  }|j                  ||«      |_	        |	r7|d   }|r|t        |«      |z
  kD  rt        d«      ‚||_
        |||  |_        |S ||d  |_        |S )NzRTP packet length is less than r  ú!BBHLLr   r   r{   ry   r   r   r   r   zRTP packet has invalid versionzRTP packet has truncated CSRCr|   rH   )r  r  r  r  rv   rC   z3RTP packet has truncated extension profile / lengthrì   z(RTP packet has truncated extension valuer  z$RTP packet padding length is invalid)rl   ÚRTP_HEADER_LENGTHr}   r   r~   r  rR   r   rP   rU   r  ri   )r¸   rs   r  Úv_p_x_ccÚm_ptr  r  rv   r  r  Ú	extensionÚccÚpacketr   Úir>   Úextension_lengthr?   Úpadding_lens                      r-   r¹   zRtpPacket.parseŸ  s  € ô ˆt‹9Ô(Ò(ÜØ1Ô2CÐ1DÀFÐKóð ô <BÀ(ÈDÐQRÐSUÈJÓ;WÑ8ˆ�$˜¨°DØ˜a‘-ˆØ˜q‘= AÑ%ˆØ ‘] aÑ'ˆ	Ø˜‰_ˆØ�aŠ<ÜÐ=Ó>Ð>Üˆt‹9Ô(¨1¨r©6Ñ1Ò1ÜÐ<Ó=Ð=áØ˜A‘IØ ™+Ø+ØØô
ˆô  ˆÜ�q˜"“ò 	ˆAØ�K‰K×Ñœ{¨4°°sÓ;¸AÑ>Ô?Ø�1‰H‰Cð	ñ Ü�4‹y˜3 ™7Ò"Ü Ð!VÓWÐWÜ2=¸eÀTÈ3Ó2OÑ/ÐÐ/Ø Ñ!ÐØ�1‰HˆCä�4‹y˜3Ð!1Ñ1Ò1Ü Ð!KÓLÐLØ" 3¨Ð/?Ñ)?Ð@ˆOØÐ#Ñ#ˆCØ .× 2Ñ 2Ð3DÀoÓ VˆFÔáØ˜r™(ˆKÙ +´°D³	¸C±Ò"?Ü Ð!GÓHÐHØ"-ˆFÔØ! # { lÐ3ˆFŒNð ˆð " # $˜ZˆFŒNàˆr,   c                 óˆ  — |j                  | j                  «      \  }}t        |«      }| j                  dkD  }t	        d| j
                  dz  |dz  z  |dz  z  t        | j                  «      z  | j                  dz  | j                  z  | j                  | j                  | j                  «      }| j                  D ]  }|t	        d|«      z  }Œ |r!|t	        d|t        |«      d	z	  «      z  }||z  }|| j                  z  }|r>|t        j                  | j                  d
z
  «      z  }|t!        | j                  g«      z  }|S )Nr   r  r{   ry   r   r|   rC   rì   r   r   )rV   rU   Úboolr  r   r  rl   r  r  r  r  r  rv   ri   ÚosÚurandomrW   )r5   r  r>   r?   Úhas_extensionr  rs   r  s           r-   Ú	serializezRtpPacket.serialize×  sI  € ð .<×-?Ñ-?ÀÇÁÓ-PÑ*Ð˜?Ü˜_Ó-ˆà×#Ñ# aÑ'ˆÜØØ�\‰\˜QÑØ˜!‰|ñà Ñ!ñ#ô �$—)‘)‹nñð �[‰[˜AÑ ×!2Ñ!2Ñ2Ø× Ñ Ø�N‰NØ�I‰Ió

ˆð —I‘Iò 	%ˆDØ”D˜˜tÓ$Ñ$‰Dð	%áØ”D˜Ð 1´3°Ó3GÈ1Ñ3LÓMÑMˆDØ�OÑ#ˆDØ�—‘ÑˆÙØ”B—J‘J˜t×0Ñ0°1Ñ4Ó5Ñ5ˆDØ”E˜4×,Ñ,Ð-Ó.Ñ.ˆDØˆr,   )r   r   r   r   r   r,   )r&   r'   r(   r)   rW   r6   Ústrr  r»   r/   r¹   r+  r+   r,   r-   r  r  ƒ  s¼   „ ð ØØ ØØØñàðð ðð ð	ð
 ðð ðð ðð 
óð(
˜#ó 
ð á@SÓ@Uñ5Øð5Ø*=ð5à	ò5ó ð5ñp 5HÓ4IñØ1ðà	ôr,   r  Úrtxr  rv   c           
      óâ   — t        || j                  t        d| j                  dd «      d   | j                  || j                  dd ¬«      }| j
                  |_        | j                  |_        |S )z>
    Recover initial packet from a retransmission packet.
    rI   r   r   N©r  r  r  r  rv   ri   )r  r  r   ri   r  r  rU   )r-  r  rv   r"  s       r-   Ú
unwrap_rtxr0  õ  sg   € ô Ø!Ø�z‰zÜ˜t S§[¡[°°1Ð%5Ó6°qÑ9Ø—-‘-ØØ—‘˜A˜B�ô€Fð —(‘(€F„KØŸ™€FÔØ€Mr,   r"  r  c                 óÖ   — t        || j                  || j                  |t        d| j                  «      | j
                  z   ¬«      }| j                  |_        | j                  |_        |S )z<
    Create a retransmission packet from a lost packet.
    rI   r/  )r  r  r  r   r  ri   r  rU   )r"  r  r  rv   r-  s        r-   Úwrap_rtxr2    s_   € ô Ø!Ø�}‰}Ø'Ø×"Ñ"ØÜ�T˜6×1Ñ1Ó2°V·^±^ÑCô€Cð �{‰{€C„HØ×&Ñ&€C„NØ€Jr,   )Erœ   r(  r™   Údataclassesr   r   r   r   r   Útypingr   r	   r
   Úavr   Úrtcrtpparametersr   ÚRTP_HISTORY_SIZEr~   ÚFORBIDDEN_PAYLOAD_TYPESÚDYNAMIC_PAYLOAD_TYPESr  r  r\   r^   r   rã   rö   rÎ   rí   rÙ   ÚRTCP_RTPFB_NACKÚRTCP_PSFB_PLIÚRTCP_PSFB_SLIÚRTCP_PSFB_RPSIÚRTCP_PSFB_FIRÚRTCP_PSFB_APPr   r/   r)   r`   rW   rb   rg   rm   rÈ   rw   rX   r�   r'  r†   r‰   rJ   rT   rª   r¬   r½   rÆ   rÊ   rÓ   rÝ   ré   ró   rý   r  r  r  r0  r2  r+   r,   r-   ú<module>r@     sa  ðÛ Û 	Û ß (ß ,Ñ ,ß 'Ñ 'å å .ð Ð ñ    B›-Ð Ù˜b #›Ð àÐ ØÐ àÐ Ø Ð à
€Ø
€Ø€	Ø€Ø€
Ø€	à€à€Ø€Ø€Ø€Ø€ð ÷4ð 4ó ð4÷b2ñ b2ðJ?˜cð ? có ?ð!˜Sð ! Uó !ð˜5ð  Só ðT #ð T¨cð T¸Eð TÀeó Tð
˜3ð  t¨C¡yð °Uó ð(˜%ð  E¨#¨t°C©y¨.Ñ$9ó ð,=�ð =˜4ó =ð,�ð ,˜ó ,ð-Øð-Ø-2ð-à	ˆ%��U�
Ñ
Ñó-ð`$. t¨E°#°u°*Ñ,=Ñ'>ð $.À5ÈÈeÈÑCTó $.ðN Jð °3ó ð. ÷
ð 
ó ð
ð> ÷
ð 
ó ð
ð4 ÷#ð #ó ð#ð
 ÷$ð $ó ð$ð$ ÷Gð Gó ðGð0 ÷/ð /ó ð/ð0 ÷)Ið )Ió ð)IðX ÷&"ð &"ó ð&"ðR ÷Qð Qó ðQð6 ØØØØØØðñ€÷,ñ ,÷^oñ oðd�Ið ¨Sð ¸ð À	ó ð"ØðØ%(ðØ;>ðØFIðàôr,   