У меня есть этот фрагмент кода, который работает без проблем:
Media_list = instance.media_list_new(song_list)
list_player = instance.media_list_player_new()
list_player.set_media_list(Media_list)
list_player.play()
Как бы то ни было, я бы хотел перебирать список и использовать обычный проигрыватель vlc для его воспроизведения.
playing = set([1,2,3,4])
for i in song_list:
player.set_mrl(i)
player.play()
play=True
while play == True:
time.sleep(1)
play_state = player.get_state()
if play_state in playing:
continue
else:
play = False
Это почти то же самое, и это лучше соответствует моим потребностям, однако он замораживает мой графический интерфейс (qml / pyside2). Итак, теперь я соединился, я должен создать для этого новый поток, или есть другой способ сделать это в vlc.
Что ж, я попытался создать новый поток и запустить в нем функцию, указанную выше, однако та же проблема, когда игрок переходит к циклу for и запускает метод воспроизведения, графический интерфейс зависает. (Vlc работает нормально и воспроизводит список воспроизведения, но графический интерфейс не отвечает на время)
Так что, просто чтобы немного расширить, это та часть, которая у меня есть, и она работает нормально, но я не могу получить данные из моих песен во время их воспроизведения, поскольку все, что у меня есть, - это URL-адрес, а не метаданные.
song_list=[]
r = requests.get('https://www.youtube.com/playlist?list=PLD6s0l-FZhjkc-TYwXO5GbwyxFqTd5Y9J')
page = r.text
soup=bs(page,'html.parser')
res=soup.find_all('a',{'class':'pl-video-title-link'})
for l in res:
#print (l.get("href"))
#print("https://www.youtube.com"+l.get("href"))
yt ='https://www.youtube.com'
temp =l.get("href")
url =yt+temp
video = pafy.new(url)
bestaudio = video.getbestaudio()
song = bestaudio.url
#print(video.getbestaudio().url)
song_list.append(song)
Media_list = instance.media_list_new(song_list)
list_player = instance.media_list_player_new()
list_player.set_media_list(Media_list)
list_player.play()
я бы хотел:
@Slot()
def print_yt_playlist(self):
song_list=[]
r = requests.get('https://www.youtube.com/playlist?list=PLD6s0l-FZhjkc-TYwXO5GbwyxFqTd5Y9J')
page = r.text
soup=bs(page,'html.parser')
res=soup.find_all('a',{'class':'pl-video-title-link'})
for l in res:
#print (l.get("href"))
#print("https://www.youtube.com"+l.get("href"))
yt ='https://www.youtube.com'
temp =l.get("href")
url =yt+temp
video = pafy.new(url)
bestaudio = video.getbestaudio()
song = bestaudio.url
#print(video.getbestaudio().url)
song_list.append(video)
playing = set([1,2,3,4])
for i in song_list:
media = instance.media_new(i.getbestaudio().url)
print(i.Artist) #THIS is what i want, i want to be able to acces that data for the song that is playing
print(i.Duration) #and this and so on, that is why i want to loop through list, since i dont think i can do it with media_list
player.set_media(media)
player.play()
play=True
while play == True:
time.sleep(1)
play_state = player.get_state()
if play_state in playing:
continue
else:
play = False
Или, что проще, есть ли способ вставить «видео» в media_list, а затем оттуда я мог бы получить доступ к данным о текущей песне, а также воспроизвести песню?
Я не знаю, что могло бы вам помочь со стороны qml, единственное, что я делаю, это запускаю эту функцию при нажатии кнопки.
Timer
. rkblog.rk.edu.pl/w/p / qtimer-Making-timers-pyqt4 - person Rolf of Saxony   schedule 01.06.2018