summaryrefslogtreecommitdiff
path: root/media
diff options
context:
space:
mode:
authorMichael Forney <mforney@mforney.org>2016-07-04 16:46:58 -0700
committerMichael Forney <mforney@mforney.org>2016-07-04 16:48:22 -0700
commit8f2d73e425db3778a648401b2b406b22d2b80dac (patch)
treee501d6ac1b5100d511c50e380ab9a6d8af948b63 /media
parentedb1f3fe364d0cd06b987062204cdedffc41e894 (diff)
Add youtube-dl 2016.07.05
Diffstat (limited to 'media')
-rw-r--r--media/gen.rc1
-rw-r--r--media/youtube-dl/.rev1
-rw-r--r--media/youtube-dl/gen.rc6
-rw-r--r--media/youtube-dl/patch/0001-Disable-use-of-ctypes-and-dynamic-loading.patch230
-rw-r--r--media/youtube-dl/pylibs.txt659
m---------media/youtube-dl/src0
6 files changed, 897 insertions, 0 deletions
diff --git a/media/gen.rc b/media/gen.rc
index 7436dadc..2fc7cf2c 100644
--- a/media/gen.rc
+++ b/media/gen.rc
@@ -2,3 +2,4 @@ subgen alsa-lib
subgen alsa-utils
subgen ffmpeg
subgen mpv
+subgen youtube-dl
diff --git a/media/youtube-dl/.rev b/media/youtube-dl/.rev
new file mode 100644
index 00000000..d00491fd
--- /dev/null
+++ b/media/youtube-dl/.rev
@@ -0,0 +1 @@
+1
diff --git a/media/youtube-dl/gen.rc b/media/youtube-dl/gen.rc
new file mode 100644
index 00000000..52772d0c
--- /dev/null
+++ b/media/youtube-dl/gen.rc
@@ -0,0 +1,6 @@
+file bin/youtube-dl '$srcdir'/bin/youtube-dl 755
+pylibs=`{grep -v '^#' pylibs.txt}
+for(f in $pylibs)
+ file lib/python3.5/$f '$srcdir'/$f 644
+
+fetch git
diff --git a/media/youtube-dl/patch/0001-Disable-use-of-ctypes-and-dynamic-loading.patch b/media/youtube-dl/patch/0001-Disable-use-of-ctypes-and-dynamic-loading.patch
new file mode 100644
index 00000000..2d877c39
--- /dev/null
+++ b/media/youtube-dl/patch/0001-Disable-use-of-ctypes-and-dynamic-loading.patch
@@ -0,0 +1,230 @@
+From 1f9fdebfd144eb57964561dad17916fac2117225 Mon Sep 17 00:00:00 2001
+From: Michael Forney <mforney@mforney.org>
+Date: Mon, 4 Jul 2016 16:14:18 -0700
+Subject: [PATCH] Disable use of ctypes and dynamic loading
+
+---
+ youtube_dl/utils.py | 175 ++++------------------------------------------------
+ 1 file changed, 11 insertions(+), 164 deletions(-)
+
+diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py
+index d302f39..bdf3c57 100644
+--- a/youtube_dl/utils.py
++++ b/youtube_dl/utils.py
+@@ -8,7 +8,6 @@ import binascii
+ import calendar
+ import codecs
+ import contextlib
+-import ctypes
+ import datetime
+ import email.utils
+ import errno
+@@ -1207,90 +1206,11 @@ def platform_name():
+ return res
+
+
+-def _windows_write_string(s, out):
+- """ Returns True if the string was written using special methods,
+- False if it has yet to be written out."""
+- # Adapted from http://stackoverflow.com/a/3259271/35070
+-
+- import ctypes
+- import ctypes.wintypes
+-
+- WIN_OUTPUT_IDS = {
+- 1: -11,
+- 2: -12,
+- }
+-
+- try:
+- fileno = out.fileno()
+- except AttributeError:
+- # If the output stream doesn't have a fileno, it's virtual
+- return False
+- except io.UnsupportedOperation:
+- # Some strange Windows pseudo files?
+- return False
+- if fileno not in WIN_OUTPUT_IDS:
+- return False
+-
+- GetStdHandle = ctypes.WINFUNCTYPE(
+- ctypes.wintypes.HANDLE, ctypes.wintypes.DWORD)(
+- (b'GetStdHandle', ctypes.windll.kernel32))
+- h = GetStdHandle(WIN_OUTPUT_IDS[fileno])
+-
+- WriteConsoleW = ctypes.WINFUNCTYPE(
+- ctypes.wintypes.BOOL, ctypes.wintypes.HANDLE, ctypes.wintypes.LPWSTR,
+- ctypes.wintypes.DWORD, ctypes.POINTER(ctypes.wintypes.DWORD),
+- ctypes.wintypes.LPVOID)((b'WriteConsoleW', ctypes.windll.kernel32))
+- written = ctypes.wintypes.DWORD(0)
+-
+- GetFileType = ctypes.WINFUNCTYPE(ctypes.wintypes.DWORD, ctypes.wintypes.DWORD)((b'GetFileType', ctypes.windll.kernel32))
+- FILE_TYPE_CHAR = 0x0002
+- FILE_TYPE_REMOTE = 0x8000
+- GetConsoleMode = ctypes.WINFUNCTYPE(
+- ctypes.wintypes.BOOL, ctypes.wintypes.HANDLE,
+- ctypes.POINTER(ctypes.wintypes.DWORD))(
+- (b'GetConsoleMode', ctypes.windll.kernel32))
+- INVALID_HANDLE_VALUE = ctypes.wintypes.DWORD(-1).value
+-
+- def not_a_console(handle):
+- if handle == INVALID_HANDLE_VALUE or handle is None:
+- return True
+- return ((GetFileType(handle) & ~FILE_TYPE_REMOTE) != FILE_TYPE_CHAR or
+- GetConsoleMode(handle, ctypes.byref(ctypes.wintypes.DWORD())) == 0)
+-
+- if not_a_console(h):
+- return False
+-
+- def next_nonbmp_pos(s):
+- try:
+- return next(i for i, c in enumerate(s) if ord(c) > 0xffff)
+- except StopIteration:
+- return len(s)
+-
+- while s:
+- count = min(next_nonbmp_pos(s), 1024)
+-
+- ret = WriteConsoleW(
+- h, s, count if count else 2, ctypes.byref(written), None)
+- if ret == 0:
+- raise OSError('Failed to write string')
+- if not count: # We just wrote a non-BMP character
+- assert written.value == 2
+- s = s[1:]
+- else:
+- assert written.value > 0
+- s = s[written.value:]
+- return True
+-
+-
+ def write_string(s, out=None, encoding=None):
+ if out is None:
+ out = sys.stderr
+ assert type(s) == compat_str
+
+- if sys.platform == 'win32' and encoding is None and hasattr(out, 'fileno'):
+- if _windows_write_string(s, out):
+- return
+-
+ if ('b' in getattr(out, 'mode', '') or
+ sys.version_info[0] < 3): # Python 2 lies about mode of sys.stderr
+ byt = s.encode(encoding or preferredencoding(), 'ignore')
+@@ -1320,78 +1240,22 @@ def intlist_to_bytes(xs):
+
+
+ # Cross-platform file locking
+-if sys.platform == 'win32':
+- import ctypes.wintypes
+- import msvcrt
+-
+- class OVERLAPPED(ctypes.Structure):
+- _fields_ = [
+- ('Internal', ctypes.wintypes.LPVOID),
+- ('InternalHigh', ctypes.wintypes.LPVOID),
+- ('Offset', ctypes.wintypes.DWORD),
+- ('OffsetHigh', ctypes.wintypes.DWORD),
+- ('hEvent', ctypes.wintypes.HANDLE),
+- ]
+-
+- kernel32 = ctypes.windll.kernel32
+- LockFileEx = kernel32.LockFileEx
+- LockFileEx.argtypes = [
+- ctypes.wintypes.HANDLE, # hFile
+- ctypes.wintypes.DWORD, # dwFlags
+- ctypes.wintypes.DWORD, # dwReserved
+- ctypes.wintypes.DWORD, # nNumberOfBytesToLockLow
+- ctypes.wintypes.DWORD, # nNumberOfBytesToLockHigh
+- ctypes.POINTER(OVERLAPPED) # Overlapped
+- ]
+- LockFileEx.restype = ctypes.wintypes.BOOL
+- UnlockFileEx = kernel32.UnlockFileEx
+- UnlockFileEx.argtypes = [
+- ctypes.wintypes.HANDLE, # hFile
+- ctypes.wintypes.DWORD, # dwReserved
+- ctypes.wintypes.DWORD, # nNumberOfBytesToLockLow
+- ctypes.wintypes.DWORD, # nNumberOfBytesToLockHigh
+- ctypes.POINTER(OVERLAPPED) # Overlapped
+- ]
+- UnlockFileEx.restype = ctypes.wintypes.BOOL
+- whole_low = 0xffffffff
+- whole_high = 0x7fffffff
++try:
++ import fcntl
+
+ def _lock_file(f, exclusive):
+- overlapped = OVERLAPPED()
+- overlapped.Offset = 0
+- overlapped.OffsetHigh = 0
+- overlapped.hEvent = 0
+- f._lock_file_overlapped_p = ctypes.pointer(overlapped)
+- handle = msvcrt.get_osfhandle(f.fileno())
+- if not LockFileEx(handle, 0x2 if exclusive else 0x0, 0,
+- whole_low, whole_high, f._lock_file_overlapped_p):
+- raise OSError('Locking file failed: %r' % ctypes.FormatError())
++ fcntl.flock(f, fcntl.LOCK_EX if exclusive else fcntl.LOCK_SH)
+
+ def _unlock_file(f):
+- assert f._lock_file_overlapped_p
+- handle = msvcrt.get_osfhandle(f.fileno())
+- if not UnlockFileEx(handle, 0,
+- whole_low, whole_high, f._lock_file_overlapped_p):
+- raise OSError('Unlocking file failed: %r' % ctypes.FormatError())
+-
+-else:
+- # Some platforms, such as Jython, is missing fcntl
+- try:
+- import fcntl
++ fcntl.flock(f, fcntl.LOCK_UN)
++except ImportError:
++ UNSUPPORTED_MSG = 'file locking is not supported on this platform'
+
+- def _lock_file(f, exclusive):
+- fcntl.flock(f, fcntl.LOCK_EX if exclusive else fcntl.LOCK_SH)
+-
+- def _unlock_file(f):
+- fcntl.flock(f, fcntl.LOCK_UN)
+- except ImportError:
+- UNSUPPORTED_MSG = 'file locking is not supported on this platform'
+-
+- def _lock_file(f, exclusive):
+- raise IOError(UNSUPPORTED_MSG)
++ def _lock_file(f, exclusive):
++ raise IOError(UNSUPPORTED_MSG)
+
+- def _unlock_file(f):
+- raise IOError(UNSUPPORTED_MSG)
++ def _unlock_file(f):
++ raise IOError(UNSUPPORTED_MSG)
+
+
+ class locked_file(object):
+@@ -1580,24 +1444,7 @@ def fix_xml_ampersands(xml_str):
+
+
+ def setproctitle(title):
+- assert isinstance(title, compat_str)
+-
+- # ctypes in Jython is not complete
+- # http://bugs.jython.org/issue2148
+- if sys.platform.startswith('java'):
+- return
+-
+- try:
+- libc = ctypes.cdll.LoadLibrary('libc.so.6')
+- except OSError:
+- return
+- title_bytes = title.encode('utf-8')
+- buf = ctypes.create_string_buffer(len(title_bytes))
+- buf.value = title_bytes
+- try:
+- libc.prctl(15, buf, 0, 0, 0)
+- except AttributeError:
+- return # Strange libc, just skip this
++ return
+
+
+ def remove_start(s, start):
+--
+2.9.0
+
diff --git a/media/youtube-dl/pylibs.txt b/media/youtube-dl/pylibs.txt
new file mode 100644
index 00000000..c8669476
--- /dev/null
+++ b/media/youtube-dl/pylibs.txt
@@ -0,0 +1,659 @@
+# <cd src && find youtube_dl -type f -name '*.py'
+youtube_dl/swfinterp.py
+youtube_dl/compat.py
+youtube_dl/version.py
+youtube_dl/utils.py
+youtube_dl/extractor/smotri.py
+youtube_dl/extractor/playvid.py
+youtube_dl/extractor/twitch.py
+youtube_dl/extractor/yesjapan.py
+youtube_dl/extractor/phoenix.py
+youtube_dl/extractor/washingtonpost.py
+youtube_dl/extractor/myvideo.py
+youtube_dl/extractor/bpb.py
+youtube_dl/extractor/cmt.py
+youtube_dl/extractor/nuevo.py
+youtube_dl/extractor/vimple.py
+youtube_dl/extractor/telecinco.py
+youtube_dl/extractor/pornoxo.py
+youtube_dl/extractor/matchtv.py
+youtube_dl/extractor/moniker.py
+youtube_dl/extractor/gazeta.py
+youtube_dl/extractor/amp.py
+youtube_dl/extractor/coub.py
+youtube_dl/extractor/kuwo.py
+youtube_dl/extractor/orf.py
+youtube_dl/extractor/godtube.py
+youtube_dl/extractor/tass.py
+youtube_dl/extractor/chirbit.py
+youtube_dl/extractor/chilloutzone.py
+youtube_dl/extractor/vine.py
+youtube_dl/extractor/abcnews.py
+youtube_dl/extractor/rds.py
+youtube_dl/extractor/rtvnh.py
+youtube_dl/extractor/morningstar.py
+youtube_dl/extractor/everyonesmixtape.py
+youtube_dl/extractor/ccc.py
+youtube_dl/extractor/dcn.py
+youtube_dl/extractor/rtlnl.py
+youtube_dl/extractor/varzesh3.py
+youtube_dl/extractor/toggle.py
+youtube_dl/extractor/ceskatelevize.py
+youtube_dl/extractor/roxwel.py
+youtube_dl/extractor/dhm.py
+youtube_dl/extractor/deezer.py
+youtube_dl/extractor/cinchcast.py
+youtube_dl/extractor/theplatform.py
+youtube_dl/extractor/comcarcoff.py
+youtube_dl/extractor/krasview.py
+youtube_dl/extractor/escapist.py
+youtube_dl/extractor/espn.py
+youtube_dl/extractor/iconosquare.py
+youtube_dl/extractor/steam.py
+youtube_dl/extractor/xiami.py
+youtube_dl/extractor/watchindianporn.py
+youtube_dl/extractor/wrzuta.py
+youtube_dl/extractor/voicerepublic.py
+youtube_dl/extractor/noco.py
+youtube_dl/extractor/vidio.py
+youtube_dl/extractor/freevideo.py
+youtube_dl/extractor/ina.py
+youtube_dl/extractor/traileraddict.py
+youtube_dl/extractor/kontrtube.py
+youtube_dl/extractor/vidbit.py
+youtube_dl/extractor/bleacherreport.py
+youtube_dl/extractor/vh1.py
+youtube_dl/extractor/nextmedia.py
+youtube_dl/extractor/urort.py
+youtube_dl/extractor/bild.py
+youtube_dl/extractor/twentytwotracks.py
+youtube_dl/extractor/criterion.py
+youtube_dl/extractor/douyutv.py
+youtube_dl/extractor/macgamestore.py
+youtube_dl/extractor/byutv.py
+youtube_dl/extractor/promptfile.py
+youtube_dl/extractor/karrierevideos.py
+youtube_dl/extractor/fc2.py
+youtube_dl/extractor/historicfilms.py
+youtube_dl/extractor/keezmovies.py
+youtube_dl/extractor/m6.py
+youtube_dl/extractor/ntvru.py
+youtube_dl/extractor/sendtonews.py
+youtube_dl/extractor/teletask.py
+youtube_dl/extractor/tv3.py
+youtube_dl/extractor/trutube.py
+youtube_dl/extractor/sharesix.py
+youtube_dl/extractor/rts.py
+youtube_dl/extractor/nrk.py
+youtube_dl/extractor/imdb.py
+youtube_dl/extractor/ruutu.py
+youtube_dl/extractor/pornhd.py
+youtube_dl/extractor/ninecninemedia.py
+youtube_dl/extractor/laola1tv.py
+youtube_dl/extractor/techtalks.py
+youtube_dl/extractor/libraryofcongress.py
+youtube_dl/extractor/fczenit.py
+youtube_dl/extractor/crooksandliars.py
+youtube_dl/extractor/mtv.py
+youtube_dl/extractor/exfm.py
+youtube_dl/extractor/nowness.py
+youtube_dl/extractor/newstube.py
+youtube_dl/extractor/embedly.py
+youtube_dl/extractor/wimp.py
+youtube_dl/extractor/cbssports.py
+youtube_dl/extractor/gputechconf.py
+youtube_dl/extractor/videofyme.py
+youtube_dl/extractor/hotnewhiphop.py
+youtube_dl/extractor/rtve.py
+youtube_dl/extractor/spike.py
+youtube_dl/extractor/videomega.py
+youtube_dl/extractor/liveleak.py
+youtube_dl/extractor/internetvideoarchive.py
+youtube_dl/extractor/infoq.py
+youtube_dl/extractor/patreon.py
+youtube_dl/extractor/streamcz.py
+youtube_dl/extractor/tube8.py
+youtube_dl/extractor/groupon.py
+youtube_dl/extractor/slideshare.py
+youtube_dl/extractor/moevideo.py
+youtube_dl/extractor/vlive.py
+youtube_dl/extractor/camdemy.py
+youtube_dl/extractor/eroprofile.py
+youtube_dl/extractor/viewster.py
+youtube_dl/extractor/photobucket.py
+youtube_dl/extractor/parliamentliveuk.py
+youtube_dl/extractor/tele13.py
+youtube_dl/extractor/mdr.py
+youtube_dl/extractor/abc.py
+youtube_dl/extractor/esri.py
+youtube_dl/extractor/sandia.py
+youtube_dl/extractor/thescene.py
+youtube_dl/extractor/sapo.py
+youtube_dl/extractor/mlb.py
+youtube_dl/extractor/golem.py
+youtube_dl/extractor/teamcoco.py
+youtube_dl/extractor/mnet.py
+youtube_dl/extractor/tubitv.py
+youtube_dl/extractor/kankan.py
+youtube_dl/extractor/minhateca.py
+youtube_dl/extractor/cliphunter.py
+youtube_dl/extractor/telewebion.py
+youtube_dl/extractor/ard.py
+youtube_dl/extractor/nosvideo.py
+youtube_dl/extractor/viki.py
+youtube_dl/extractor/echomsk.py
+youtube_dl/extractor/eitb.py
+youtube_dl/extractor/makertv.py
+youtube_dl/extractor/motorsport.py
+youtube_dl/extractor/cbc.py
+youtube_dl/extractor/gamespot.py
+youtube_dl/extractor/vier.py
+youtube_dl/extractor/ku6.py
+youtube_dl/extractor/tutv.py
+youtube_dl/extractor/yahoo.py
+youtube_dl/extractor/tudou.py
+youtube_dl/extractor/vidme.py
+youtube_dl/extractor/howcast.py
+youtube_dl/extractor/appletrailers.py
+youtube_dl/extractor/sportschau.py
+youtube_dl/extractor/rtbf.py
+youtube_dl/extractor/tvp.py
+youtube_dl/extractor/miomio.py
+youtube_dl/extractor/ellentv.py
+youtube_dl/extractor/ctv.py
+youtube_dl/extractor/chaturbate.py
+youtube_dl/extractor/polskieradio.py
+youtube_dl/extractor/engadget.py
+youtube_dl/extractor/funimation.py
+youtube_dl/extractor/thisamericanlife.py
+youtube_dl/extractor/collegerama.py
+youtube_dl/extractor/googleplus.py
+youtube_dl/extractor/cultureunplugged.py
+youtube_dl/extractor/godtv.py
+youtube_dl/extractor/toypics.py
+youtube_dl/extractor/lovehomeporn.py
+youtube_dl/extractor/tvland.py
+youtube_dl/extractor/ora.py
+youtube_dl/extractor/crackle.py
+youtube_dl/extractor/tmz.py
+youtube_dl/extractor/r7.py
+youtube_dl/extractor/nfl.py
+youtube_dl/extractor/sportbox.py
+youtube_dl/extractor/audimedia.py
+youtube_dl/extractor/tvc.py
+youtube_dl/extractor/drtv.py
+youtube_dl/extractor/sohu.py
+youtube_dl/extractor/mgtv.py
+youtube_dl/extractor/syfy.py
+youtube_dl/extractor/nba.py
+youtube_dl/extractor/daum.py
+youtube_dl/extractor/freesound.py
+youtube_dl/extractor/extractors.py
+youtube_dl/extractor/channel9.py
+youtube_dl/extractor/twentyfourvideo.py
+youtube_dl/extractor/ro220.py
+youtube_dl/extractor/pbs.py
+youtube_dl/extractor/dplay.py
+youtube_dl/extractor/tapely.py
+youtube_dl/extractor/audiomack.py
+youtube_dl/extractor/mofosex.py
+youtube_dl/extractor/afreecatv.py
+youtube_dl/extractor/brightcove.py
+youtube_dl/extractor/pluralsight.py
+youtube_dl/extractor/atresplayer.py
+youtube_dl/extractor/beatportpro.py
+youtube_dl/extractor/animeondemand.py
+youtube_dl/extractor/newgrounds.py
+youtube_dl/extractor/stitcher.py
+youtube_dl/extractor/lecture2go.py
+youtube_dl/extractor/cbslocal.py
+youtube_dl/extractor/radiode.py
+youtube_dl/extractor/la7.py
+youtube_dl/extractor/pornotube.py
+youtube_dl/extractor/azubu.py
+youtube_dl/extractor/pinkbike.py
+youtube_dl/extractor/dramafever.py
+youtube_dl/extractor/prosiebensat1.py
+youtube_dl/extractor/tlc.py
+youtube_dl/extractor/izlesene.py
+youtube_dl/extractor/nytimes.py
+youtube_dl/extractor/tv4.py
+youtube_dl/extractor/theintercept.py
+youtube_dl/extractor/sport5.py
+youtube_dl/extractor/carambatv.py
+youtube_dl/extractor/viidea.py
+youtube_dl/extractor/digiteka.py
+youtube_dl/extractor/drtuber.py
+youtube_dl/extractor/zapiks.py
+youtube_dl/extractor/ehow.py
+youtube_dl/extractor/dw.py
+youtube_dl/extractor/folketinget.py
+youtube_dl/extractor/foxsports.py
+youtube_dl/extractor/thesixtyone.py
+youtube_dl/extractor/openload.py
+youtube_dl/extractor/appleconnect.py
+youtube_dl/extractor/adobetv.py
+youtube_dl/extractor/rte.py
+youtube_dl/extractor/teachingchannel.py
+youtube_dl/extractor/foxgay.py
+youtube_dl/extractor/sexu.py
+youtube_dl/extractor/tdslifeway.py
+youtube_dl/extractor/ruhd.py
+youtube_dl/extractor/niconico.py
+youtube_dl/extractor/kaltura.py
+youtube_dl/extractor/biqle.py
+youtube_dl/extractor/vuclip.py
+youtube_dl/extractor/globo.py
+youtube_dl/extractor/jove.py
+youtube_dl/extractor/freespeech.py
+youtube_dl/extractor/kusi.py
+youtube_dl/extractor/turbo.py
+youtube_dl/extractor/slutload.py
+youtube_dl/extractor/zingmp3.py
+youtube_dl/extractor/lynda.py
+youtube_dl/extractor/aenetworks.py
+youtube_dl/extractor/seeker.py
+youtube_dl/extractor/lifenews.py
+youtube_dl/extractor/mitele.py
+youtube_dl/extractor/musicplayon.py
+youtube_dl/extractor/gameone.py
+youtube_dl/extractor/spiegeltv.py
+youtube_dl/extractor/dropbox.py
+youtube_dl/extractor/thestar.py
+youtube_dl/extractor/reuters.py
+youtube_dl/extractor/eighttracks.py
+youtube_dl/extractor/tinypic.py
+youtube_dl/extractor/formula1.py
+youtube_dl/extractor/leeco.py
+youtube_dl/extractor/limelight.py
+youtube_dl/extractor/closertotruth.py
+youtube_dl/extractor/threeqsdn.py
+youtube_dl/extractor/thvideo.py
+youtube_dl/extractor/allocine.py
+youtube_dl/extractor/funnyordie.py
+youtube_dl/extractor/mpora.py
+youtube_dl/extractor/xtube.py
+youtube_dl/extractor/vimeo.py
+youtube_dl/extractor/arte.py
+youtube_dl/extractor/clipfish.py
+youtube_dl/extractor/xminus.py
+youtube_dl/extractor/academicearth.py
+youtube_dl/extractor/c56.py
+youtube_dl/extractor/dvtv.py
+youtube_dl/extractor/walla.py
+youtube_dl/extractor/snotr.py
+youtube_dl/extractor/fusion.py
+youtube_dl/extractor/tv2.py
+youtube_dl/extractor/npr.py
+youtube_dl/extractor/localnews8.py
+youtube_dl/extractor/videomore.py
+youtube_dl/extractor/viddler.py
+youtube_dl/extractor/tunein.py
+youtube_dl/extractor/nowtv.py
+youtube_dl/extractor/revision3.py
+youtube_dl/extractor/clubic.py
+youtube_dl/extractor/canvas.py
+youtube_dl/extractor/sportdeutschland.py
+youtube_dl/extractor/anysex.py
+youtube_dl/extractor/aftonbladet.py
+youtube_dl/extractor/bandcamp.py
+youtube_dl/extractor/bbc.py
+youtube_dl/extractor/tnaflix.py
+youtube_dl/extractor/dispeak.py
+youtube_dl/extractor/vporn.py
+youtube_dl/extractor/viewlift.py
+youtube_dl/extractor/spiegel.py
+youtube_dl/extractor/cracked.py
+youtube_dl/extractor/screencast.py
+youtube_dl/extractor/thisav.py
+youtube_dl/extractor/jwplatform.py
+youtube_dl/extractor/democracynow.py
+youtube_dl/extractor/dotsub.py
+youtube_dl/extractor/pladform.py
+youtube_dl/extractor/nhl.py
+youtube_dl/extractor/rice.py
+youtube_dl/extractor/vgtv.py
+youtube_dl/extractor/expotv.py
+youtube_dl/extractor/br.py
+youtube_dl/extractor/testurl.py
+youtube_dl/extractor/generic.py
+youtube_dl/extractor/dctp.py
+youtube_dl/extractor/wistia.py
+youtube_dl/extractor/rockstargames.py
+youtube_dl/extractor/adultswim.py
+youtube_dl/extractor/pornhub.py
+youtube_dl/extractor/skysports.py
+youtube_dl/extractor/khanacademy.py
+youtube_dl/extractor/kanalplay.py
+youtube_dl/extractor/breakcom.py
+youtube_dl/extractor/jpopsukitv.py
+youtube_dl/extractor/mailru.py
+youtube_dl/extractor/gameinformer.py
+youtube_dl/extractor/people.py
+youtube_dl/extractor/tf1.py
+youtube_dl/extractor/alphaporno.py
+youtube_dl/extractor/tvigle.py
+youtube_dl/extractor/zdf.py
+youtube_dl/extractor/camwithher.py
+youtube_dl/extractor/savefrom.py
+youtube_dl/extractor/udemy.py
+youtube_dl/extractor/discovery.py
+youtube_dl/extractor/gdcvault.py
+youtube_dl/extractor/comedycentral.py
+youtube_dl/extractor/ntvde.py
+youtube_dl/extractor/minoto.py
+youtube_dl/extractor/dailymail.py
+youtube_dl/extractor/srmediathek.py
+youtube_dl/extractor/tagesschau.py
+youtube_dl/extractor/yam.py
+youtube_dl/extractor/restudy.py
+youtube_dl/extractor/iprima.py
+youtube_dl/extractor/stanfordoc.py
+youtube_dl/extractor/imgur.py
+youtube_dl/extractor/gamekings.py
+youtube_dl/extractor/udn.py
+youtube_dl/extractor/cbs.py
+youtube_dl/extractor/bigflix.py
+youtube_dl/extractor/webofstories.py
+youtube_dl/extractor/pyvideo.py
+youtube_dl/extractor/once.py
+youtube_dl/extractor/rutv.py
+youtube_dl/extractor/ssa.py
+youtube_dl/extractor/played.py
+youtube_dl/extractor/giga.py
+youtube_dl/extractor/ringtv.py
+youtube_dl/extractor/audioboom.py
+youtube_dl/extractor/vk.py
+youtube_dl/extractor/yourupload.py
+youtube_dl/extractor/jeuxvideo.py
+youtube_dl/extractor/playwire.py
+youtube_dl/extractor/servingsys.py
+youtube_dl/extractor/cda.py
+youtube_dl/extractor/xuite.py
+youtube_dl/extractor/abc7news.py
+youtube_dl/extractor/sixplay.py
+youtube_dl/extractor/plays.py
+youtube_dl/extractor/behindkink.py
+youtube_dl/extractor/vube.py
+youtube_dl/extractor/bokecc.py
+youtube_dl/extractor/scivee.py
+youtube_dl/extractor/hrti.py
+youtube_dl/extractor/huffpost.py
+youtube_dl/extractor/nationalgeographic.py
+youtube_dl/extractor/swrmediathek.py
+youtube_dl/extractor/mgoon.py
+youtube_dl/extractor/extremetube.py
+youtube_dl/extractor/wat.py
+youtube_dl/extractor/mixcloud.py
+youtube_dl/extractor/ruleporn.py
+youtube_dl/extractor/mojvideo.py
+youtube_dl/extractor/europa.py
+youtube_dl/extractor/youtube.py
+youtube_dl/extractor/bilibili.py
+youtube_dl/extractor/drbonanza.py
+youtube_dl/extractor/youku.py
+youtube_dl/extractor/lrt.py
+youtube_dl/extractor/rutube.py
+youtube_dl/extractor/microsoftvirtualacademy.py
+youtube_dl/extractor/radiocanada.py
+youtube_dl/extractor/vesti.py
+youtube_dl/extractor/sunporno.py
+youtube_dl/extractor/skynewsarabia.py
+youtube_dl/extractor/nerdcubed.py
+youtube_dl/extractor/shahid.py
+youtube_dl/extractor/telebruxelles.py
+youtube_dl/extractor/airmozilla.py
+youtube_dl/extractor/googledrive.py
+youtube_dl/extractor/weiqitv.py
+youtube_dl/extractor/dfb.py
+youtube_dl/extractor/ndtv.py
+youtube_dl/extractor/hellporno.py
+youtube_dl/extractor/ivideon.py
+youtube_dl/extractor/ir90tv.py
+youtube_dl/extractor/dumpert.py
+youtube_dl/extractor/ted.py
+youtube_dl/extractor/ign.py
+youtube_dl/extractor/radiobremen.py
+youtube_dl/extractor/telegraaf.py
+youtube_dl/extractor/xboxclips.py
+youtube_dl/extractor/metacafe.py
+youtube_dl/extractor/condenast.py
+youtube_dl/extractor/motherless.py
+youtube_dl/extractor/livestream.py
+youtube_dl/extractor/cbsnews.py
+youtube_dl/extractor/xvideos.py
+youtube_dl/extractor/novamov.py
+youtube_dl/extractor/tumblr.py
+youtube_dl/extractor/southpark.py
+youtube_dl/extractor/nuvid.py
+youtube_dl/extractor/trilulilu.py
+youtube_dl/extractor/cnn.py
+youtube_dl/extractor/xnxx.py
+youtube_dl/extractor/archiveorg.py
+youtube_dl/extractor/xxxymovies.py
+youtube_dl/extractor/cliprs.py
+youtube_dl/extractor/videott.py
+youtube_dl/extractor/flickr.py
+youtube_dl/extractor/crunchyroll.py
+youtube_dl/extractor/vice.py
+youtube_dl/extractor/svt.py
+youtube_dl/extractor/wdr.py
+youtube_dl/extractor/instagram.py
+youtube_dl/extractor/xstream.py
+youtube_dl/extractor/eagleplatform.py
+youtube_dl/extractor/radiojavan.py
+youtube_dl/extractor/regiotv.py
+youtube_dl/extractor/videopremium.py
+youtube_dl/extractor/odnoklassniki.py
+youtube_dl/extractor/veehd.py
+youtube_dl/extractor/meta.py
+youtube_dl/extractor/aljazeera.py
+youtube_dl/extractor/rottentomatoes.py
+youtube_dl/extractor/vevo.py
+youtube_dl/extractor/canalc2.py
+youtube_dl/extractor/nova.py
+youtube_dl/extractor/normalboots.py
+youtube_dl/extractor/soundcloud.py
+youtube_dl/extractor/streamcloud.py
+youtube_dl/extractor/eporner.py
+youtube_dl/extractor/hornbunny.py
+youtube_dl/extractor/myspass.py
+youtube_dl/extractor/hypem.py
+youtube_dl/extractor/baidu.py
+youtube_dl/extractor/periscope.py
+youtube_dl/extractor/fourtube.py
+youtube_dl/extractor/veoh.py
+youtube_dl/extractor/atttechchannel.py
+youtube_dl/extractor/cspan.py
+youtube_dl/extractor/lemonde.py
+youtube_dl/extractor/aol.py
+youtube_dl/extractor/hbo.py
+youtube_dl/extractor/myvidster.py
+youtube_dl/extractor/xfileshare.py
+youtube_dl/extractor/hearthisat.py
+youtube_dl/extractor/twitter.py
+youtube_dl/extractor/learnr.py
+youtube_dl/extractor/beeg.py
+youtube_dl/extractor/nextmovie.py
+youtube_dl/extractor/voxmedia.py
+youtube_dl/extractor/unistra.py
+youtube_dl/extractor/onionstudios.py
+youtube_dl/extractor/franceculture.py
+youtube_dl/extractor/screenwavemedia.py
+youtube_dl/extractor/bloomberg.py
+youtube_dl/extractor/myspace.py
+youtube_dl/extractor/metacritic.py
+youtube_dl/extractor/glide.py
+youtube_dl/extractor/indavideo.py
+youtube_dl/extractor/rtl2.py
+youtube_dl/extractor/playfm.py
+youtube_dl/extractor/urplay.py
+youtube_dl/extractor/hotstar.py
+youtube_dl/extractor/addanime.py
+youtube_dl/extractor/qqmusic.py
+youtube_dl/extractor/npo.py
+youtube_dl/extractor/teachertube.py
+youtube_dl/extractor/safari.py
+youtube_dl/extractor/sztvhu.py
+youtube_dl/extractor/spankbang.py
+youtube_dl/extractor/firstpost.py
+youtube_dl/extractor/streetvoice.py
+youtube_dl/extractor/mit.py
+youtube_dl/extractor/faz.py
+youtube_dl/extractor/soundgasm.py
+youtube_dl/extractor/worldstarhiphop.py
+youtube_dl/extractor/biobiochiletv.py
+youtube_dl/extractor/redtube.py
+youtube_dl/extractor/footyroom.py
+youtube_dl/extractor/commonprotocols.py
+youtube_dl/extractor/cwtv.py
+youtube_dl/extractor/blinkx.py
+youtube_dl/extractor/dailymotion.py
+youtube_dl/extractor/naver.py
+youtube_dl/extractor/facebook.py
+youtube_dl/extractor/acast.py
+youtube_dl/extractor/screenjunkies.py
+youtube_dl/extractor/noz.py
+youtube_dl/extractor/vodlocker.py
+youtube_dl/extractor/fivetv.py
+youtube_dl/extractor/ustream.py
+youtube_dl/extractor/__init__.py
+youtube_dl/extractor/googlesearch.py
+youtube_dl/extractor/ministrygrid.py
+youtube_dl/extractor/dreisat.py
+youtube_dl/extractor/trollvids.py
+youtube_dl/extractor/karaoketv.py
+youtube_dl/extractor/ninegag.py
+youtube_dl/extractor/muenchentv.py
+youtube_dl/extractor/spankwire.py
+youtube_dl/extractor/hark.py
+youtube_dl/extractor/zippcast.py
+youtube_dl/extractor/xbef.py
+youtube_dl/extractor/tweakers.py
+youtube_dl/extractor/anitube.py
+youtube_dl/extractor/hentaistigma.py
+youtube_dl/extractor/tvplay.py
+youtube_dl/extractor/hitbox.py
+youtube_dl/extractor/canalplus.py
+youtube_dl/extractor/keek.py
+youtube_dl/extractor/mwave.py
+youtube_dl/extractor/lnkgo.py
+youtube_dl/extractor/goshgay.py
+youtube_dl/extractor/ndr.py
+youtube_dl/extractor/vessel.py
+youtube_dl/extractor/makerschannel.py
+youtube_dl/extractor/ctsnews.py
+youtube_dl/extractor/helsinki.py
+youtube_dl/extractor/radiofrance.py
+youtube_dl/extractor/rtp.py
+youtube_dl/extractor/yandexmusic.py
+youtube_dl/extractor/gamersyde.py
+youtube_dl/extractor/puls4.py
+youtube_dl/extractor/youjizz.py
+youtube_dl/extractor/eyedotv.py
+youtube_dl/extractor/bravotv.py
+youtube_dl/extractor/fktv.py
+youtube_dl/extractor/einthusan.py
+youtube_dl/extractor/ustudio.py
+youtube_dl/extractor/common.py
+youtube_dl/extractor/yinyuetai.py
+youtube_dl/extractor/toutv.py
+youtube_dl/extractor/giantbomb.py
+youtube_dl/extractor/sbs.py
+youtube_dl/extractor/cnbc.py
+youtube_dl/extractor/francetv.py
+youtube_dl/extractor/usatoday.py
+youtube_dl/extractor/nick.py
+youtube_dl/extractor/presstv.py
+youtube_dl/extractor/youporn.py
+youtube_dl/extractor/oktoberfesttv.py
+youtube_dl/extractor/howstuffworks.py
+youtube_dl/extractor/twentymin.py
+youtube_dl/extractor/ooyala.py
+youtube_dl/extractor/bet.py
+youtube_dl/extractor/aparat.py
+youtube_dl/extractor/defense.py
+youtube_dl/extractor/ebaumsworld.py
+youtube_dl/extractor/konserthusetplay.py
+youtube_dl/extractor/rai.py
+youtube_dl/extractor/telemb.py
+youtube_dl/extractor/vrt.py
+youtube_dl/extractor/gfycat.py
+youtube_dl/extractor/clyp.py
+youtube_dl/extractor/moviezine.py
+youtube_dl/extractor/sina.py
+youtube_dl/extractor/wsj.py
+youtube_dl/extractor/srgssr.py
+youtube_dl/extractor/foxnews.py
+youtube_dl/extractor/senateisvp.py
+youtube_dl/extractor/nfb.py
+youtube_dl/extractor/franceinter.py
+youtube_dl/extractor/ctvnews.py
+youtube_dl/extractor/playtvak.py
+youtube_dl/extractor/cbsinteractive.py
+youtube_dl/extractor/dbtv.py
+youtube_dl/extractor/pandoratv.py
+youtube_dl/extractor/kickstarter.py
+youtube_dl/extractor/goldenmoustache.py
+youtube_dl/extractor/screencastomatic.py
+youtube_dl/extractor/firsttv.py
+youtube_dl/extractor/heise.py
+youtube_dl/extractor/ynet.py
+youtube_dl/extractor/buzzfeed.py
+youtube_dl/extractor/porn91.py
+youtube_dl/extractor/myvi.py
+youtube_dl/extractor/anvato.py
+youtube_dl/extractor/podomatic.py
+youtube_dl/extractor/fivemin.py
+youtube_dl/extractor/rbmaradio.py
+youtube_dl/extractor/shared.py
+youtube_dl/extractor/primesharetv.py
+youtube_dl/extractor/movieclips.py
+youtube_dl/extractor/xhamster.py
+youtube_dl/extractor/iqiyi.py
+youtube_dl/extractor/pornovoisines.py
+youtube_dl/extractor/videodetective.py
+youtube_dl/extractor/ivi.py
+youtube_dl/extractor/bambuser.py
+youtube_dl/extractor/cloudy.py
+youtube_dl/extractor/netzkino.py
+youtube_dl/extractor/vidzi.py
+youtube_dl/extractor/gamestar.py
+youtube_dl/extractor/nbc.py
+youtube_dl/extractor/elpais.py
+youtube_dl/extractor/litv.py
+youtube_dl/extractor/msn.py
+youtube_dl/extractor/reverbnation.py
+youtube_dl/extractor/libsyn.py
+youtube_dl/extractor/clipsyndicate.py
+youtube_dl/extractor/commonmistakes.py
+youtube_dl/extractor/neteasemusic.py
+youtube_dl/extractor/fox.py
+youtube_dl/extractor/philharmoniedeparis.py
+youtube_dl/extractor/vbox7.py
+youtube_dl/postprocessor/ffmpeg.py
+youtube_dl/postprocessor/metadatafromtitle.py
+youtube_dl/postprocessor/embedthumbnail.py
+youtube_dl/postprocessor/xattrpp.py
+youtube_dl/postprocessor/execafterdownload.py
+youtube_dl/postprocessor/__init__.py
+youtube_dl/postprocessor/common.py
+youtube_dl/options.py
+youtube_dl/aes.py
+youtube_dl/__main__.py
+youtube_dl/update.py
+youtube_dl/jsinterp.py
+youtube_dl/cache.py
+youtube_dl/downloader/rtsp.py
+youtube_dl/downloader/f4m.py
+youtube_dl/downloader/hls.py
+youtube_dl/downloader/fragment.py
+youtube_dl/downloader/external.py
+youtube_dl/downloader/rtmp.py
+youtube_dl/downloader/http.py
+youtube_dl/downloader/dash.py
+youtube_dl/downloader/__init__.py
+youtube_dl/downloader/common.py
+youtube_dl/__init__.py
+youtube_dl/YoutubeDL.py
+youtube_dl/socks.py
diff --git a/media/youtube-dl/src b/media/youtube-dl/src
new file mode 160000
+Subproject c25f1a9b63cd75beb691c83e4167fb9aceebf76