상당량의 연구가 있은 후에 해결책을 찾았습니다. 오디오에 대한 링크를 얻지는 못했지만 유튜브 비디오를 보이지 않게 재생하는 프로그램을 만들었고, 따라서 나의 의도였던 '오디오'를 재생할 수 있습니다.
내가 작성한 프로그램은 이미 사용 가능한 파이썬 모듈을 많이 사용하여 목표를 달성합니다.
나는 플래시를 파이썬 응용 프로그램에 삽입하는 방법을 설명하는 this 링크를 wxPython (here)을 통해 발견했습니다. 그것은 플래시를 재생하는 데 활용되는 활성 래퍼 모듈을 가지고 있습니다.
코드 :
비디오를 재생
import wx
if wx.Platform == '__WXMSW__':
from wx.lib.flashwin import FlashWindow
class MyPanel(wx.Panel):
def __init__(self, parent, id):
wx.Panel.__init__(self, parent, -1)
self.pdf = None
sizer = wx.BoxSizer(wx.VERTICAL)
btnSizer = wx.BoxSizer(wx.HORIZONTAL)
self.flash = FlashWindow(self, style=wx.SUNKEN_BORDER)
sizer.Add(self.flash, proportion=1, flag=wx.EXPAND)
#sizer.Hide(0)
self.SetSizer(sizer)
self.SetAutoLayout(True)
print "Importing Flash..."
self.flash.LoadMovie(0, raw_input('Copy link for flash: '))
#Used to load a flash file. You may also give a location of a specific file on disk.
print "Done."
app = wx.PySimpleApp()
# create window/frame, no parent, -1 is default ID, title, size
# change size as needed
frame = wx.Frame(None, -1, "Flash Stream", size = (500, 400))
# make instance of class, -1 is default ID
MyPanel(frame, -1)
# show frame
frame.Show(True)
#comment if you don't want to see the ui
print "Started"
# start event loop
app.MainLoop()
. 필자의 경우 GUI를 갖고 싶지 않았기 때문에 'frame.Show(True)
'행을 삭제했습니다. 테스트를 원할 경우, 나중에 설명 하겠지만 'http://www.youtube.com/v/cP6lppXT-9U?version=3&hl=en_US'과 같은 링크를 사용해보십시오.
그러나 일시 중지는 허용되지 않습니다. 따라서 다른 방법을 사용해야합니다.
은 자동 재생을 시작하려면 다음을 추가하려면 '&autoplay=1
'는 URL 여기
일시 정지 할 수있는 방법되는 :
당신은 youtube-dl 모듈을 uring 비디오 길이를 생성 할 수 있으며, 스레드를 죽일 때 사용자의 일시 중지 그것. 그러나 이미 재생 한 시간을 저장하고 다음 번에 '&start=SECONDSPLAYED
'을 추가하면 효과적으로 '다시 시작'됩니다. 이에 대한 자세한 내용은 here입니다.
또한, 작동하는 유일한 URL 인 YouTube 포함 URL을 사용해야합니다. 예는 'http://www.youtube.com/v/cP6lppXT-9U?version=3&hl=en_US
'
프로처럼 보이는
- 법률 *
- 빠른 플래시 로딩 시간 (0.01 초 벤치 마크)
- 는
- 은 다운로드하지 않고 끝으로 건너 뛸 수있는 공간을 낭비하지 않는다 전체 파일
- YouTube API를 사용하지 않기 때문에 무제한 사용
는
*이 YouTube's terms of service에 따르면, 섹션 4 : 서비스-권한 및 제한의 일반 사용, 하위 섹션은 당신은 어떤 기술 또는 통해 콘텐츠에 액세스하지 않을 것에 동의합니다 3.
은의 동영상 재생 페이지 이외의 의미 서비스 자체, 삽입 가능한 플레이어 또는 YouTube가 지정할 수있는 명시 적으로 승인 된 기타 수단.
이 프로그램은 주로 Embeddable Player를 사용하는 대체 인터페이스를 사용하며 완전히 불법적으로 처리하지 않습니다 ([내 첫 번째 아이디어] 파일 다운로드와 같은).
단점
- 인해 액티브 X에 대한 의존도에,이 응용 프로그램 것이다 모든 운영 체제하지만 Windows에서하지 작동합니다.
- 내가 아는 사람들로부터, 소수만 Internet Explorer를 사용합니다. 아아,이 프로그램을 설치하려면 인터넷 익스플로러 플래시가 필요합니다. Mozzila Flash, Chrome Flash가 아닙니다. 그것은 절대적으로 IE가되어야합니다. 그렇지 않으면 응용 프로그램이로드되지만 비디오는 나타나지 않습니다.
- wx로드하는 데 오랜 시간이 걸립니다 (약 10 초).
종속성 분명한 이유를 들어
- , wxPython을 사용해야합니다.
- Python comtypes (찾을 수 here)를 설치해야합니다. 그렇지 않으면, wxPython은 ActiveX와 통신 할 수 없습니다.
유용한 기능들
은 또한 같은 일을하는 사람에 대한 처리 속도를 높이기 위해 일부 기능을 만들었습니다.
모두 멋진 lambda입니다.
generate_link : 정상적인 YouTube URL이 주어지면 YouTube Embed URL을 반환합니다.
generate_link = lambda link: 'http://www.youtube.com/v/'+re.compile(r'watch\?v=(.*?)(?:&|$)').search(link).group(1)+'?version=3&hl=en_US'
start_from : 비디오를 시작할 시간과 분, 초를 허용하고 링크를 반환합니다.
start_from = lambda hours, minutes, seconds, link: link + '&start=' + str((hours*60*60)+(minutes*60)+seconds)
autoplay : 아마도 가장 간단한 방법은 autoplay를 true로 설정하고 링크를 반환하는 것입니다. 그것은 링크를 허용합니다.
autoplay = lambda link: link + '&autoplay=1'
video_length : 비디오의 길이를 반환합니다. 유용하며 YouTube 링크를 허용합니다.
video_length = lambda video: re.compile(r'length_seconds=(.*?)\\', re.S).search(urllib2.urlopen(video).read()).group(1).strip()
이는
status=fail&errorcode=150&reason=This+video+contains+content+from+WMG.+It+is+restricted+from+playback+on+certain+sites.%3Cbr%2F%3E%3Cu%3E%3Ca+href%3D%27http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DVALbSjayAgw%26feature%3Dplayer_embedded%27+target%3D%27_blank%27%3EWatch+on+YouTube%3C%2Fa%3E%3C%2Fu%3E
따라서, 나는 길이를 얻을 수있는 실제 비디오 페이지를 구문 분석 오류를 반환 비디오를 허가 사실에 대한 해결 방법으로 의미한다. 조금 느리지 만 실패없이 작동합니다.
나는 youtube가 오디오와 비디오를 별도로 저장하는 것을 의심하므로 오디오 만 가져올 수는 없습니다. 또한 서비스 약관을 위반할 수도 있습니다. – aland