o
    i>                     @   sd   d dl ZddlmZ ddlmZmZmZmZm	Z	m
Z
mZmZmZmZ ddlmZ G dd deZdS )	    N   )InfoExtractor   )
ExtractorError
clean_htmlfilter_dictget_element_by_idint_or_nonejoin_nonempty
js_to_json	qualitiesurl_or_noneurljoin)traverse_objc                   @   sj   e Zd ZdZdddddddd	d
ddddddddddd
dddddgZdddZdd Zdd ZdS )KukuluLiveIEz1https?://live\.erinn\.biz/live\.php\?h(?P<id>\d+)z*https://live.erinn.biz/live.php?h675134569 e380fa6a47fc703d91cea913ab44ec2e	675134569mp4u   プロセカu*   テストも兼ねたプロセカ配信。i||e20231216zre:^https?://.*)idexttitledescription	timestampupload_date	thumbnail)urlmd5	info_dictz*https://live.erinn.biz/live.php?h102338092 dcf5167a934b1c60333461e13a81a6e2	102338092u   Among Usで遊びます！！uK   VTuberになりましたねんねこ㌨ですよろしくお願いしますi-e20240107z*https://live.erinn.biz/live.php?h878049531T)r   only_matchingNc              
   C   sT   ||rdnd7 }| j d|d| dd| dt|d| d|d	d
}tj|S )Nz (force_h264) z.https://live.erinn.biz/live.player.fplayer.phpzDownloading z quality metadatazUnable to download get
liveByAjax)hashaction
force_h264query)_download_webpager   urllibparseparse_qs)selfvideo_iddesccoder(   qs r4   O/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/extractor/kukululive.py_get_quality_meta2   s   
zKukuluLiveIE._get_quality_metac                 C   s   t |ddthf}t |ddthf}td|}t |ddthfr0|||d d d||d t |ddthfrM|t|d	|d d d
d|d d S d S )Nvcodecr   now_quality)lowh264highhlsaddrr   )	format_idr   r   r7   qualityhlsaddr_audioonly	audioonlym4anone)r   strr   r   appendr
   )r/   formatsquality_metar7   r>   quality_priorityr4   r4   r5   _add_quality_formats>   s(   

z!KukuluLiveIE._add_quality_formatsc           
   
      sd  |  || |}d|v rtdddttd|dddd	| d
| | ddg|| jd|dddrrg }dD ])\}}| ||}| 	|| |dkrht
|ddkrh| 	|| j||dd q? d|dS | jddddid}t
| jd|ddtd d!d" }d( fd#d$	}	t|d%krt|	|dd&S | j|	| dd'S ))Nu8   >タイムシフトが見つかりませんでした。<zThis stream has expiredT)expected	livetitlez<SPANz<spanzSPAN>zspan>Descriptionzog:imageztwitter:imagez(var\s+timeshift\s*=\s*false)zis livestreamF)default))r;   Z)r9   ForceLowr;   )r7   r   HEVC1)r(   )r   r   r   r   is_liverE   z1https://live.erinn.biz/live.timeshift.fplayer.phpzDownloading player htmlzUnable to download player htmlr&   r)   zvar\s+fplayer_source\s*=zstream dataz\[(?s:.+)\])contains_patterntransform_sourcec                 S   s   |d S )Nfiler4   )_vr4   r4   r5   <lambda>x   s    z,KukuluLiveIE._real_extract.<locals>.<lambda>c              
   3   st    t | dD ]1\}}|r d| n|r d| dn t|dthftd|d dd	d
gdV  qd S )Nr   rU   z (Part )
time_startzhttps://live.erinn.bizrT   r   m3u8_native)r   r   protocol)r   r   r   r   r   rE   )	enumerater   r	   r   )segmentsplaylistisegmentr   r   r   r0   r4   r5   entriesz   s   
z+KukuluLiveIE._real_extract.<locals>.entriesr   )r^   )multi_video)T)	_match_idr+   r   r   r   replace_html_search_meta_search_regexr6   rH   r   _search_jsonr   lennextplaylist_result)
r/   r   htmlrE   r1   r2   rF   player_htmlsourcesrb   r4   ra   r5   _real_extractS   sP   


zKukuluLiveIE._real_extract)N)__name__
__module____qualname__
_VALID_URL_TESTSr6   rH   ro   r4   r4   r4   r5   r      s>    
r   )urllib.parser,   commonr   utilsr   r   r   r   r	   r
   r   r   r   r   utils.traversalr   r   r4   r4   r4   r5   <module>   s
    0