Ë
    š„jß(  ã                   óx   — d dl Z d dlZ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  G d„ de«      Z G d„ d	e«      Zy)
é    Né   )ÚInfoExtractoré   )ÚExtractorErrorÚencode_data_uriÚfloat_or_noneÚint_or_noneÚjoin_nonemptyÚmimetype2extÚstr_or_nonec                   ó    — e Zd ZdZdZdg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iddœddddd dd!d"d#d$œd%d&id'œd(d&d)œgZd/d+„Zd,„ Zd-„ Z	d.„ Z
y*)0Ú	UstreamIEzfhttps?://(?:www\.)?(?:ustream\.tv|video\.ibm\.com)/(?P<type>recorded|embed|embed/recorded)/(?P<id>\d+)Úustreamz_<iframe[^>]+?src=(["\'])(?P<url>https?://(?:www\.)?(?:ustream\.tv|video\.ibm\.com)/embed/.+?)\1z'http://www.ustream.tv/recorded/20274954Ú 088f151799e8f572f84eb62f17d73e5cÚ20274954Úflvz4Young Americans for Liberty February 7, 2012 2:28 AMiz0OÚ20120207Ú	yalibertyÚ6780869)ÚidÚextÚtitleÚdescriptionÚ	timestampÚupload_dateÚuploaderÚuploader_id)ÚurlÚmd5Ú	info_dictzfhttp://www.ustream.tv/embed/recorded/59307601?ub=ff0000&lc=ff0000&oc=ffffff&uc=ffffff&v=3&wmode=directÚ 5a2abf40babeac9812ed20ae12d34e10Ú59307601z"-CG11- Canada Games Figure SkatingÚsportscanadatv)r   r   r   r   zNThis Pro Broadcaster has chosen to remove this video from the ustream.tv site.)r   r   r    Úskipz$http://www.ustream.tv/embed/10299409r   Ú10299409é   )r   r    Úplaylist_countz'http://www.ustream.tv/recorded/91343263Ú91343263Úmp4z)GitHub Universe - General Session - Day 1Ú20160914iZƒÙWÚwa0dnskeqkrÚ38977840)r   r   r   r   r   r   r   r   Úskip_downloadT)r   r    ÚparamszVhttps://video.ibm.com/embed/recorded/128240221?&autoplay=true&controls=true&volume=100)r   Úonly_matchingNc                 ó<  — d„ }d„ }|sd}| j                  d |d«      › d|› d�|d|z   d	|d
   |d    | |d«      «      › d | |d«      «      › �d |d«      › �||ddœ¬«      }|d
   d   d
   d   }|d
   d   d
   d   }	| j                  d|› d|	› �|d|z   ¬«      S )Nc                 ó   — t        | «      dd  S )Nr   )Úhex)Úns    úO/var/www/html/GAP/venv/lib/python3.12/site-packages/yt_dlp/extractor/ustream.pyÚ
num_to_hexz.UstreamIE._get_stream_info.<locals>.num_to_hexI   s   € Ü�q“6˜!˜"�:Ðó    c                 ó>   — t        j                  t        | «      «      S ©N)ÚrandomÚ	randrangeÚint)Úxs    r4   ú<lambda>z,UstreamIE._get_stream_info.<locals>.<lambda>L   s   € œ×(Ñ(¬¨Q«Ó0€ r6   Ú zhttp://rg    „×—Az-1-z*-recorded-lp-live.ums.ustream.tv/1/ustreamzDownloading connection infoÚviewerr   r   ú:z_rpin.g  4&õkCÚrecorded)ÚtypeÚappIdÚ
appVersionÚrsidÚrpinÚreferrerÚmediaÚapplication)ÚnoteÚqueryÚargsÚhostÚconnectionIdzhttp://z/1/ustream?connectionId=zDownloading stream info©rJ   )Ú_download_json)
Úselfr   Úvideo_idÚ
app_id_verÚ
extra_noter5   ÚrndÚ	conn_inforM   Úconnection_ids
             r4   Ú_get_stream_infozUstreamIE._get_stream_infoH   s  € ò	ñ 1ˆáØˆJà×'Ñ'Ø‘s˜3“x�j  H :Ð-WÐXØÐ8¸:ÑEà Ø# A™Ø(¨™mÙ%¡c¨#£hÓ/Ð0°±*¹SÀ»XÓ2FÐ1GÐHØ ¡ T£ Ð,ØØ!Ø)ñ	ð (ó ˆ	ð ˜‰|˜FÑ# AÑ& vÑ.ˆØ! !™ VÑ,¨QÑ/°Ñ?ˆà×"Ñ"Ø�d�VÐ3°M°?ÐCØÐ4°zÑAð #ó Cð 	Cr6   c           	      ó¦   — t        d«      D ]B  }| j                  ||||dkD  r	d|dz   › d�nd¬«      }d|d   d	   d   v sŒ4|d   d	   d   d   c S  g S )
Nr&   r   z (try r   ú)r>   )rT   ÚstreamrL   )ÚrangerX   )rQ   r   rR   rS   Útrial_countÚstream_infos         r4   Ú_get_streamszUstreamIE._get_streamse   sƒ   € ä  ›8ò 	;ˆKØ×/Ñ/Ø�X˜zØ:EÈº/˜V K°!¡OÐ#4°AÑ6Èrð 0ó SˆKð ˜; q™>¨&Ñ1°!Ñ4Ò4Ø" 1‘~ fÑ-¨aÑ0°Ñ:Ò:ð	;ð ˆ	r6   c                 óü  — d„ }g }|d   D �]m  }|d   d   }d ||d   |d   z   d|d   d   «      ig}t        |d	   |d
   z  «      D ];  }|j                  d ||d   |d   z   ||d   t        |dz  dz  «         «      i«       Œ= |d   }|j                  d«      d   }	t	        d|	t        |j                  d«      «      «      dt        dd«      t        |«      |j                  d«      |j                  d«      |dœ}
|	dk(  r4|
j                  |j                  d«      d|j                  d«      dœ«       n3|
j                  d|j                  d«      |j                  d«      dœ«       |j                  |
«       �Œp |S )Nc                 óZ   — | j                  dt        |«      d«      j                  d|«      S )Nú%r   )ÚreplaceÚstr)ÚtemplateÚidxÚ
chunk_hashs      r4   Úresolve_dash_templatez=UstreamIE._parse_segmented_mp4.<locals>.resolve_dash_templatep   s(   € Ø×#Ñ# C¬¨S«°1Ó5×=Ñ=¸cÀ:ÓNÐNr6   ÚstreamsÚ	providersr   r   ÚinitUrlÚhashesÚ0ÚvideoLengthÚ	chunkTimeÚ
segmentUrlé
   ÚcontentTypeú/ÚdashÚbitrateÚhttp_dash_segmentss   <MPD/>ztext/xmlÚheightÚwidth)Ú	format_idÚprotocolr   r   rw   rx   Ú	fragmentsÚvideoÚcodecÚnone)ÚvcodecÚacodecÚvbr)r   r€   Úabr)
r\   Úappendrd   Úsplitr
   r   Úgetr   r   Úupdate)rQ   Údash_stream_inforh   Úformatsr[   Úproviderr{   rf   Úcontent_typeÚkindÚfs              r4   Ú_parse_segmented_mp4zUstreamIE._parse_segmented_mp4o   sÏ  € ò	Oð ˆØ& yÑ1ó &	ˆFà'¨Ñ4°QÑ7ˆHàÑ,Ø˜U‘O f¨YÑ&7Ñ7¸Ð<LÈXÑ<VÐWZÑ<[ó]ðð ˆIô Ð-¨mÑ<Ð@PÐQ\Ñ@]Ñ]Ó^ò �Ø× Ñ ØÑ0Ø  ™¨&°Ñ*>Ñ>ÀØ(¨Ñ2´3°s¸b±yÀ2±~Ó3FÑGóIð"õ ðð " -Ñ0ˆLØ×%Ñ% cÓ*¨1Ñ-ˆDä*Ø˜D¤+¨f¯j©j¸Ó.CÓ"DóFà0ä& y°*Ó=Ü# LÓ1Ø Ÿ*™* XÓ.ØŸ™ GÓ,Ø&ñ
ˆAð �wŠØ—‘Ø$Ÿj™j¨Ó1Ø$Ø!Ÿ:™: iÓ0ñõ ð —‘Ø$Ø$Ÿj™j¨Ó1Ø!Ÿ:™: iÓ0ñô ð
 �N‰N˜1ÖðM&	ðN ˆr6   c                 ó8  ‡ — ‰ j                  |«      }|j                  d«      }|j                  d«      dk(  r(|j                  d«      }d|z   }‰ j                  |d«      S |j                  d«      dk(  ra|j                  d«      }‰ j                  ||«      }‰ j	                  ‰ j                  d|d«      |«      }‰ j                  ˆ fd	„|D «       |«      S ‰ j                  d
|› d�|«      }|j                  d«      }|rt        ‰ j                  › d|› �d¬«      ‚|d   }	|	d   }
t        |	j                  d«      «      }|	d   j                  «       D ��cg c]  \  }}|r||||dœ‘Œ }}}|sA‰ j                  ||d¬«      }|r*|j                  ‰ j                  |d   d   |dd¬«      «       	 |	j                  d«      }t!        |	j                  d«      «      }t        |	j                  d«      «      }t!        |	j                  d«      «      }|	j                  d i «      j                  d!«      }|	j                  d i «      j                  d«      }|	j                  d"i «      j                  «       D ��cg c]
  \  }}||d#œ‘Œ }}}||
||||||||d$œ
S c c}}w c c}}w )%Nr   rB   zembed/recordedúhttp://www.ustream.tv/recorded/ÚUstreamÚembedz-ustream\.vars\.offAirContentVideoIds=([^;]+);zcontent video IDsc              3   óH   •K  — | ]  }‰j                  d |z   d«      –— Œ y­w)r�   r�   N)Ú
url_result)Ú.0ÚurQ   s     €r4   ú	<genexpr>z*UstreamIE._real_extract.<locals>.<genexpr>­   s#   øè ø€ ÒnÐWX�—‘Ð!BÀQÑ!FÈ	×RÑnùs   ƒ"zhttps://api.ustream.tv/videos/z.jsonÚerrorz returned error: T)Úexpectedr|   r   Ú	file_sizeÚ
media_urls)r   r   r   Úfilesize)é   r   )rS   r   r   r)   Úhls)r   Úm3u8_idr   Ú
created_atÚlengthÚviewsÚownerÚusernameÚ	thumbnail)r   r   )
r   r   r   Ú
thumbnailsr   ÚdurationÚ
view_countr   r   rˆ   )Ú_match_valid_urlÚgroupr“   Ú_download_webpageÚ_parse_jsonÚ_search_regexÚplaylist_resultrP   r…   r   ÚIE_NAMEr   Úitemsr_   ÚextendÚ_extract_m3u8_formatsr	   )rQ   r   ÚmrR   Údesktop_urlÚwebpageÚcontent_video_idsr.   r—   r|   r   r›   ry   Ú	video_urlrˆ   Úhls_streamsr   r   r¦   r§   r   r   Úthumbnail_idÚthumbnail_urlr¥   s   `                        r4   Ú_real_extractzUstreamIE._real_extract�   sé  ø€ Ø×!Ñ! #Ó&ˆØ—7‘7˜4“=ˆð �7‰7�6‹?Ð.Ò.Ø—w‘w˜t“}ˆHØ;¸hÑFˆKØ—?‘? ;°	Ó:Ð:Ø�7‰7�6‹?˜gÒ%Ø—w‘w˜t“}ˆHØ×,Ñ,¨S°(Ó;ˆGØ $× 0Ñ 0°×1CÑ1CØ@À'Ø#ó2%à&.ó!0Ðð ×'Ñ'ÛnÐ\mÔnØóð ð ×$Ñ$Ø,¨X¨J°eÐ<¸hóHˆð —
‘
˜7Ó#ˆÙÜ Ø—<‘<�.Ð 1°%°Ð9ÀDôJð Jð �w‘ˆà�g‘ˆÜ  §¡¨;Ó!7Ó8ˆð ',¨LÑ&9×&?Ñ&?Ó&A÷Pñ
 #ˆi˜ÁYð	 ØØØ ó	
ð Pˆñ Pñ Ø×+Ñ+¨C°ÀgÐ+ÓNˆKÙà—‘˜t×9Ñ9Ø ‘N 5Ñ)¨8¸Èð  :ó  Oô Pðð —i‘i Ó.ˆÜ §	¡	¨,Ó 7Ó8ˆ	Ü  §¡¨8Ó!4Ó5ˆÜ  §¡¨7Ó!3Ó4ˆ
à—9‘9˜W bÓ)×-Ñ-¨jÓ9ˆØ—i‘i ¨Ó,×0Ñ0°Ó6ˆð
 .3¯Y©Y°{ÀBÓ-G×-MÑ-MÓ-O÷Qñ *ˆl˜Mð Ø ó
ð Qˆ
ñ Qð ØØ&Ø$Ø"Ø Ø$Ø Ø&Øñ
ð 	
ùóEPùó:Qs   ÅJÉ1Jr8   )Ú__name__Ú
__module__Ú__qualname__Ú
_VALID_URLr®   Ú_EMBED_REGEXÚ_TESTSrX   r_   r�   rº   © r6   r4   r   r      sÛ   „ Øz€JØ€GØvÐw€Là8Ø1àØØKØQØ#Ø%Ø#Ø$ñ	
ñð  xØ1àØØ9Ø(ñ	
ð añð 6à�*ð
ð ñð 9àØØ@Ø%ØFØ#Ø%Ø%ñ	
ð ˜Tð
ñð  hØñð]1€FófCò:ò,ó\M
r6   r   c                   ó*   — e Zd ZdZdZdddiddœZd„ Zy	)
ÚUstreamChannelIEz3https?://(?:www\.)?ustream\.tv/channel/(?P<slug>.+)zustream:channelz*http://www.ustream.tv/channel/channeljapanr   Ú10874166é   )r   r    Úplaylist_mincountc                 óæ  — | j                  |«      }|j                  d«      }| j                  ||«      }| j                  d|«      }d}d|› d�}g }|rr| j	                  t
        j                  j                  ||«      |dt        |«      dz   › d�¬	«      }	|j                  t        j                  d
|	d   «      «       |	d   }|rŒr|D �
cg c]  }
| j                  d|
z   d«      ‘Œ }}
d|||dœS c c}
w )NÚslugzustream:channel_idzhttp://www.ustream.tvz/ajax/socialstream/videos/z/1.jsonz%Downloading video information (next: r   rZ   rO   zdata-content-id="(\d.*)"ÚdataÚnextUrlr�   r�   Úplaylist)Ú_typer   Ú
display_idÚentries)r¨   r©   rª   Ú_html_search_metarP   ÚurllibÚparseÚurljoinÚlenr°   ÚreÚfindallr“   )rQ   r   r²   rÍ   r´   Ú
channel_idÚBASEÚnext_urlÚ	video_idsÚreplyÚvidrÎ   s               r4   rº   zUstreamChannelIE._real_extractø   s  € Ø×!Ñ! #Ó&ˆØ—W‘W˜V“_ˆ
Ø×(Ñ(¨¨jÓ9ˆØ×+Ñ+Ð,@À'ÓJˆ
à&ˆØ/°
¨|¸7ÐCˆØˆ	ÙØ×'Ñ'Ü—‘×$Ñ$ T¨8Ó4°jØ<¼SÀ»^ÈaÑ=OÐ<PÐPQÐRð (ó TˆEð ×ÑœRŸZ™ZÐ(CÀUÈ6Á]ÓSÔTØ˜YÑ'ˆHò ð !ö"àð �O‰OÐ=ÀÑCÀYÕOð"ˆð "ð  ØØ$Øñ	
ð 	
ùò"s   Ã	C.N)r»   r¼   r½   r¾   r®   Ú_TESTrº   rÁ   r6   r4   rÃ   rÃ   í   s*   „ ØG€JØ€Gà;à�*ð
ð  ñ€Eó
r6   rÃ   )r9   rÔ   Úurllib.parserÐ   Úcommonr   Úutilsr   r   r   r	   r
   r   r   r   rÃ   rÁ   r6   r4   ú<module>rà      s;   ðÛ Û 	Û å !÷÷ ñ ôY
�ô Y
ôx#
�}õ #
r6   