o
    di                     @   s   d dl Z d dlZd dlZd dlZd dlmZmZ d dlmZ d dl	m
Z
mZ d dlmZ d dlmZ d dlmZ dZd	Zd
ZedeZdedejdejdefddZG dd deZG dd deedZG dd deZG dd deZdS )    N)ABCMetaabstractmethod)Union)
AudioFrame
VideoFrame)Frame)Packet)AsyncIOEventEmitterg{Gz?i_ g?   pts	from_baseto_basereturnc                 C   s   ||krt | | | } | S )N)int)r   r   r    r   G/home/ubuntu/.local/lib/python3.10/site-packages/aiortc/mediastreams.pyconvert_timebase   s   r   c                   @   s   e Zd ZdS )MediaStreamErrorN)__name__
__module____qualname__r   r   r   r   r      s    r   c                       sn   e Zd ZdZdZd fddZedefddZedefd	d
Z	e
deeef fddZdddZ  ZS )MediaStreamTrackz/
    A single media track within a stream.
    unknownr   Nc                    s"   t    d| _tt | _d S )NF)super__init___MediaStreamTrack__endedstruuiduuid4_idself	__class__r   r   r   &   s   
zMediaStreamTrack.__init__c                 C   s   | j S )z@
        An automatically generated globally unique ID.
        )r   r    r   r   r   id+   s   zMediaStreamTrack.idc                 C   s   | j rdS dS )Nendedlive)r   r    r   r   r   
readyState2   s   zMediaStreamTrack.readyStatec                    s   dS )z
        Receive the next :class:`~av.audio.frame.AudioFrame`,
        :class:`~av.video.frame.VideoFrame` or :class:`~av.packet.Packet`
        Nr   r    r   r   r   recv6   s    zMediaStreamTrack.recvc                 C   s&   | j sd| _ | d |   d S d S )NTr%   )r   emitremove_all_listenersr    r   r   r   stop=   s
   
zMediaStreamTrack.stop)r   N)r   r   r   __doc__kindr   propertyr   r$   r'   r   r   r   r   r(   r+   __classcell__r   r   r"   r   r      s    r   )	metaclassc                   @   s4   e Zd ZU dZdZeed< eed< defddZ	dS )	AudioStreamTrackz2
    A dummy audio track which reads silence.
    audio_start
_timestampr   c                    s   | j dkrtd}tt| }t| dr1|  j|7  _| j| j|  t  }t	|I dH  nt | _d| _t
dd|d}|jD ]
}|t|j qC| j|_||_td	||_|S )
z
        Receive the next :class:`~av.audio.frame.AudioFrame`.

        The base implementation just reads silence, subclass
        :class:`AudioStreamTrack` to provide a useful implementation.
        r&   i@  r4   Nr   s16mono)formatlayoutsamplesr
   )r'   r   r   AUDIO_PTIMEhasattrr4   r3   timeasynciosleepr   planesupdatebytesbuffer_sizer   sample_rate	fractionsFraction	time_base)r!   rC   r9   waitframepr   r   r   r(   Q   s$   



zAudioStreamTrack.recvN)
r   r   r   r,   r-   float__annotations__r   r   r(   r   r   r   r   r1   G   s   
 r1   c                   @   sL   e Zd ZU dZdZeed< eed< deee	j
f fddZdefdd	Zd
S )VideoStreamTrackz7
    A dummy video track which reads green frames.
    videor3   r4   r   c                    st   | j dkrtt| dr-|  jttt 7  _| j| jt  t  }t	
|I d H  nt | _d| _| jtfS )Nr&   r4   r   )r'   r   r;   r4   r   VIDEO_PTIMEVIDEO_CLOCK_RATEr3   r<   r=   r>   VIDEO_TIME_BASE)r!   rG   r   r   r   next_timestampy   s   



zVideoStreamTrack.next_timestampc                    sL   |   I dH \}}tddd}|jD ]
}|t|j q||_||_|S )z
        Receive the next :class:`~av.video.frame.VideoFrame`.

        The base implementation just reads a 640x480 green frame at 30fps,
        subclass :class:`VideoStreamTrack` to provide a useful implementation.
        Ni  i  )widthheight)rQ   r   r?   r@   rA   rB   r   rF   )r!   r   rF   rH   rI   r   r   r   r(      s   
zVideoStreamTrack.recvN)r   r   r   r,   r-   rJ   rK   r   tuplerD   rE   rQ   r   r(   r   r   r   r   rL   o   s   
 rL   )r=   rD   r<   r   abcr   r   typingr   avr   r   av.framer   	av.packetr   pyee.asyncior	   r:   rO   rN   rE   rP   r   r   	Exceptionr   r   r1   rL   r   r   r   r   <module>   s6    
((