
    V|h                     b    S SK Jr  SSKJr  SSKJrJrJrJrJ	r	J
r
Jr  SSKJr   " S S\5      rg)	   )InfoExtractor   )	HTTPError)ExtractorErrorUserNotLiveint_or_nonejoin_nonemptyparse_iso8601str_or_noneurl_or_none)traverse_objc                   P    \ rS rSrSrSrSrSSSSS	S
\SSSS.	SS.SSS./rS r	Sr
g)FlexTVIE   	ttingliveu   띵라이브 (formerly FlexTV)zNhttps?://(?:www\.)?(?:ttinglive\.com|flextv\.co\.kr)/channels/(?P<id>\d+)/livez-https://www.flextv.co.kr/channels/231638/live231638mp4u   re:^214하나만\.\.\. zre:^https?://.+\.jpgzre:\d{8}is_liveu   Hi별244396)	idexttitle	thumbnailupload_date	timestamplive_statuschannel
channel_idzThe channel is offline)url	info_dictskipz*https://www.flextv.co.kr/channels/746/liveT)r   only_matchingc                 ^   U R                  U5      n U R                  SU S3USS0S9n/ n[        USS	[        145       H  nUR                  S
5      S:X  aE  [        UR                  S5      5      (       a&  UR                  U R                  US   USSSSS95        S Ht  n[        USUSS 45       H\  nUR                  [        XxR                  S5      SS9US   [!        UR                  S5      5      US:X  a  SOSUS:X  a  SOSS.5        M^     Mv     M     UUSS.[        USS["        14SS [$        14S![        14S"S#["        14S"S$[&        14S%.5      E$ ! [         aH  n[        UR                  [
        5      (       a#  UR                  R                  S:X  a	  [        US9ee S nAff = f)&Nz'https://api.ttinglive.com/api/channels/z/streamoptionall)queryi  )video_idsources.formativsr   r   TF)livefatalm3u8_id)hlsflv	urlDetail
resolutionc                     [        US   5      $ )Nr   )r   )_vs     Q/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/flextv.py<lambda>(FlexTVIE._real_extract.<locals>.<lambda>9   s    [YZ[`YaMb    
suffixName )delimr.   r/   m3u8_nativehttp)	format_idr   heightr   protocol)r   formatsr   streamr   	createdAtthumbUrlownernamer   )r   r   r   r   r   )	_match_id_download_jsonr   
isinstancecauser   statusr   r   dictgetr   extend_extract_m3u8_formatsappendr	   r   strr
   r   )	selfr   r   stream_dataerA   rB   format_typedatas	            r5   _real_extractFlexTVIE._real_extract&   s   ^^C(
	--9*WM8U"3 . 5K ";C$0HIFzz(#u,VZZ=N1O1Ot995M:u4uV[  :  ] ^-(#[,@b2d eDNN%2;@V^`%a#E{"-dhh|.D"E(3u(<u%5@E5IMv$ e  .	 J  
 ;"GcU3&m_E(;-8#VcU3&{m<) 	
 	
+  	!''9--!''..C2G!:66	s   E 
F,$AF''F, N)__name__
__module____qualname____firstlineno__IE_NAMEIE_DESC
_VALID_URLint_TESTSrW   __static_attributes__rY   r8   r5   r   r      sW    G.GbJ>/0&$"

 ) <F&'
r8   r   N)commonr   networking.exceptionsr   utilsr   r   r   r	   r
   r   r   utils.traversalr   r   rY   r8   r5   <module>rh      s+    ! -   +>
} >
r8   