У меня есть этот кусок кода, который работает без проблем:
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).Так что теперь я cofused, я должен создать новый поток для этого, или есть какой-то другой способ сделать это в VLC.
Ну, я попытался создать новый поток и запустить в нем функцию выше,однако та же проблема, в тот момент, когда игрок переходит к циклу и запускает метод воспроизведения, графический интерфейс останавливается. (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
Или, проще говоря, есть ли способ, которым я вставляю "video" в список media_list, а затем я могу получить доступ к данным о текущей песне, а также воспроизвести песню?
Я не знаю, что может помочь вам со стороны qml, единственное, что я делаю, это запускаю эту функцию при нажатии кнопки.