
    yf1)                         d dl Z d dlZddlmZ ddlmZ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   )
compat_strcompat_urlparse)encode_data_uriExtractorErrorint_or_nonefloat_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20160914iZW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                 R   d }t         j                  }|sd}| j                  d |d      |fz  |d|z   d|d   |d    | |d            d	 | |d            d
 |d      z  ||dd      }|d   d   d   d   }|d   d   d   d   }	| j                  d|d|	|d|z         S )Nc                     t        |       dd  S )Nr   )hex)ns    :/usr/lib/python3/dist-packages/yt_dlp/extractor/ustream.py
num_to_hexz.UstreamIE._get_stream_info.<locals>.num_to_hexL   s    q6!":     z9http://r%d-1-%s-recorded-lp-live.ums.ustream.tv/1/ustreamg    חAzDownloading connection infoviewerr   r   :z_rpin.%dg  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rE   )random	randrange_download_json)
selfr    video_id
app_id_ver
extra_noter7   rnd	conn_inforH   connection_ids
             r6   _get_stream_infozUstreamIE._get_stream_infoK   s    	 J''G3s8U]J^^8:E #A(m#-c#h#7CH9MN"SY.!)	 ( 	 |F#A&v.!!V,Q/?""59=I4zA # C 	Cr8   c           	          t        d      D ]A  }| j                  ||||dkD  rd|dz   z  nd      }d|d   d   d   v s3|d   d   d   d   c S  g S )	Nr(   r   z	 (try %d)r   r9   )rQ   streamrG   )rangerU   )rN   r    rO   rP   trial_countstream_infos         r6   _get_streamszUstreamIE._get_streamsh   s     8 	;K//Xz>IAo;+/:SU 0 WK ;q>&1!44"1~f-a0::	; 	r8   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   )replacer   )templateidx
chunk_hashs      r6   resolve_dash_templatez=UstreamIE._parse_segmented_mp4.<locals>.resolve_dash_templates   s(    ##CC!<DDS*UUr8   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   rr   rs   	fragmentsvideocodecnone)vcodecacodecvbr)rz   r{   abr)
rX   appendr   splitr   r   getr   r   update)rN   dash_stream_inforc   formatsrW   providerrv   ra   content_typekindfs              r6   _parse_segmented_mp4zUstreamIE._parse_segmented_mp4r   s   	V &y1 &	F'4Q7H,UOfY&77<LX<VWZ<[] I -m<@PQ\@]]^   0 &*>>(2:cRi"n3MNP"  "-0L%%c*1-D*D+fjj.C"DF0&y*=#L1 **X.G,&
A w$jj1$!::i0  $$jj1!::i0 
 NN1M&	N r8   c                 >     j                  |      }|j                  d      }|j                  d      dk(  r(|j                  d      }d|z   } j                  |d      S |j                  d      dk(  re|j                  d      } j                  ||      } j	                   j                  d|d      |      } j                  t         fd	|      |      S  j                  d
|z  |      }|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   r=   zembed/recordedhttp://www.ustream.tv/recorded/Ustreamembedz-ustream\.vars\.offAirContentVideoIds=([^;]+);zcontent video IDsc                 .    j                  d| z   d      S )Nr   r   )
url_result)urN   s    r6   <lambda>z)UstreamIE._real_extract.<locals>.<lambda>   s    doo.ORS.SU^_ r8   z%https://api.ustream.tv/videos/%s.jsonerrorz returned error: T)expectedrw   r   	file_size
media_urls)r   r    r   filesize)   r   )rP   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_resultmaprM   r   r	   IE_NAMEr   itemsr[   extend_extract_m3u8_formatsr
   )rN   r    mrO   desktop_urlwebpagecontent_video_idsr0   r   rw   r   r   rt   	video_urlr   hls_streamsr   r   r   r   r   r   thumbnail_idthumbnail_urlr   s   `                        r6   _real_extractzUstreamIE._real_extract   s   !!#&774= 776?..wwt}H;hFK??;	::776?g%wwt}H,,S(;G $ 0 01C1C@'#2%&.!0 ''_ars  $$3h>J 

7# +/<<?$P P wg ;!78 ',L&9&?&?&AP
 #iY	  	
 P P ++Cg+NKt99N5)8  :  O P ii.		, 78	 8!45 7!34
99Wb)--j9ii,006
 .3YY{B-G-M-M-OQ *lM  
 Q
 Q &$" $ &
 	
EP:Qs   J4J)N)__name__
__module____qualname__
_VALID_URLr   _EMBED_REGEX_TESTSrU   r[   r   r    r8   r6   r   r      s    zJGvwL81KQ#%#$	
  x19(	
 a 6*
  9@%F#%%	
 T
  h]1FfC:,\M
r8   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|z  }g }|rg| j	                  t        j                  ||      |dt        |      dz   z        }	|j                  t        j                  d|	d	                |	d
   }|rg|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/%s/1.jsonz(Downloading video information (next: %d)r   rJ   zdata-content-id="(\d.*)"datanextUrlr   r   playlist)_typer   
display_identries)r   r   r   _html_search_metarM   r   urljoinlenr   refindallr   )rN   r    r   r   r   
channel_idBASEnext_url	video_idsreplyvidr   s               r6   r   zUstreamChannelIE._real_extract   s   !!#&WWV_
((j9++,@'J
&8:E	''''h7?3y>TUCUV ( XE RZZ(CU6]STY'H  !" OO=CYO" "  $	
 	
"s   =C"N)r   r   r   r   r   _TESTr   r   r8   r6   r   r      s*    GJG;*
  E
r8   r   )rK   r   commonr   compatr   r   utilsr   r	   r
   r   r   r   r   r   r   r   r8   r6   <module>r      s=     	 !  Y
 Y
x#
} #
r8   