Оценете темата:
  • 1 гласа - средно 5
  • 1
  • 2
  • 3
  • 4
  • 5
[УРОК] Как да създадем video addon за Kodi Media Center
#21
А някаква насока може ли да дадеш днес цял ден си играя и все нищо не се получава
Отговори
#22
Нещо такова ще свърши работа:
Код:
# -*- coding: utf-8 -*-
#Библиотеки
import re
import sys
import os
import urllib
import urllib2


t = "<source src='http://192.168.0.116/files/videos/High.Res.02/1507360901c8cef-480.mp4' type=video/mp4 data-res=480 /><source src='http://192.168.0.116/files/videos/High.Res.02/1507360901c8cef-720.mp4' type=video/mp4 data-res=720 /><source src='http://192.168.0.116/files/videos/High.Res.02/1507360901c8cef-1024.mp4' type=video/mp4 data-res=1024 /><source src='http://192.168.0.116/files/videos/High.Res.02/1507360901c8cef-1080.mp4' type=video/mp4 data-res=1080 />"

match2 = re.compile("source src='(http.+?mp4)'").findall(t)
for link in match2[-1::]:
   print link
[-1::] винаги ще ти връща последното съвпадение, като (ако подредбата винаги е спазена от ниско към високо качество) ще получаваш линка с максимално качество. Другия вариант е да не ползваш [-1::] а да извличаш всички линкове и със сравнения да определяш къде качеството е най-добро или да следваш предпочитанията на потребителите указани в настройките на addon-a (ако има такива).
[Изображение: notrobosmall.jpg]
Отговори
#23
това наистина върши работа за конкретното видео, нещо универсално от типа на това мога ли да добавя като натисна на съответното заглавие

Код:
   def show(self, url):
       print "Get video %s" % url
       response = common.fetchPage({"link": url})
       content = response["content"]
       scripts = common.parseDOM(response["content"], "script", attrs={"type": "text/javascript"})
       title = common.parseDOM(response["content"], "a")[0]
       urls = []

       for script in scripts:
           if 'mp4' in script:
               urls = re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', script)

       link = urls[0]

       print "link %s" % link
и къде трябва да го добавя за пусни използвам
Код:
#Зареждане на видео
def PLAY(name,url,iconimage):
       url = 'http://192.168.0.116/player/pak_player/embed_player.php?vid=' + url + '' #Конструираме адреса за достъп до видеото
       li = xbmcgui.ListItem(iconImage=iconimage, thumbnailImage=iconimage, path=url)
       li.setInfo('video', { 'title': name })
       try:
           xbmcplugin.setResolvedUrl(int(sys.argv[1]), True, xbmcgui.ListItem(path = url))
       except:
           xbmc.executebuiltin("Notification('Грешка','Видеото липсва на сървъра!')")
Отговори
#24
def PLAY() трябва да го преработиш. URL адреса, който конструираш в него е грешен. Трябва да бъде абсолютния (и реален при това) път до видео файла, а не някакъв скрипт, предназначен за WEB player. Например подаваш на PLAY () адрес: http://192.168.0.116/files/videos/High.R...ef-720.mp4 от предишната функция и директно го използваш, без да го променяш. Ако толкова искаш, може да добавиш някакъв твой User-Agent: ...1507360901c8cef-720.mp4|User-Agent=stagefright . Колкото до универсалния "capture" на видео-линкове, def show() не мога да ти кажа така на око дали ще проработи. Трябва да го пробваш и ще разбереш. След като сайта е с ограничен достъп, не мога да го пробвам в реални условия.
[Изображение: notrobosmall.jpg]
Отговори
#25
на линк -> http://192.168.0.116/player/pak_player/e...4RAXUNHOGU ми отваря само така



Код:
http://http://192.168.0.116/player/pak_player/pakplayer.swf?config={"key":"","plugins":{
"controls":{"url":"http:\/\/http://192.168.0.116\/player\/pak_player\/pakplayer.controls.swf",
"background":"url(http:\/\/http://192.168.0.116\/player\/pak_player\/bg.png) repeat"}},
"canvas":{"backgroundColor":"#000000","backgroundGradient":"none"},
"clip":{"url":"http:\/\/http://192.168.0.116\/files\/videos\/High.Res.02\/1507360901c8cef-480.mp4",
"scaling":"fit","autoPlay":false,"linkUrl":"http:\/\/http://192.168.0.116\/watch_video.php?v=894RAXUNHOGU",
"linkWindow":"_blank"},"contextMenu":[{"":""}],"logo":{"url":"http:\/\/http://192.168.0.116\/images\/logo.png",
"fullscreenOnly":false,"top":null,"left":null,"opacity":0.4,"linkUrl":"http:\/\/http://192.168.0.116\/watch_video.php?v=894RAXUNHOGU"}}

дали мога да го парсна по някакъв начин от def play

значи трябва да изкарам mp4 от страницата на play
Код:
<video id="cb_video_js" class="video-js vjs-default-skin" width="100%" height="100%" poster="http://http://192.168.0.116/files/thumbs/High.Res.02/1507360901c8cef-1.jpg" >
                       <source src='http://http://192.168.0.116/files/videos/High.Res.02/1507360901c8cef-480.mp4' type="video/mp4" data-res="480" />
                       <source src='http://http://192.168.0.116/files/videos/High.Res.02/1507360901c8cef-720.mp4' type="video/mp4" data-res="720" />
       <p class="vjs-no-js">To view this video please enable JavaScript, and consider upgrading to a web browser that <a href="http://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a></p>
</video>
Отговори
#26
Да, мошеш. Вземи всичко от config= до края. Форматът на данните е json и затова следвай стъпките:
Код:
import json

req = urllib2.Request(link) #link е адресът http://192.168.0.116/player/pak_player/embed_player.php?vid=894RAXUNHOGU
opener = urllib2.build_opener()
f = opener.open(req)
jsonrsp = json.loads(f.read().replace('http://192.168.0.116/player/pak_player/pakplayer.swf?config=',''))

print jsonrsp['clip']['url']
Резултата е: http://http://192.168.0.116/files/videos/High.R...ef-480.mp4 т.е. не забравяй да махнеш първото http://  в  jsonrsp['clip']['url']. Провери при филм с няколко различни качества, как можеш да извлечеш всичките, за да можеш да използваш най-високото от наличните.
[Изображение: notrobosmall.jpg]
Отговори
#27
извлича ми единият файл което ме устройва
[Изображение: WnpHW8N.png]

а този код къде да го сложа в def play или някъде другаде?

[Изображение: 7QryG]
Отговори
#28
В def play( )
[Изображение: notrobosmall.jpg]
Отговори
#29
VideoPlayer: Opening: 894RAXUNHOGU"
20:11:13.288 T:6164 WARNING: CDVDMessageQueue(player):Tongueut MSGQ_NOT_INITIALIZED
20:11:13.289 T:6164   ERROR: DXVA::CProcessorHD::IsFormatSupported: Unsupported format 104 for 1.
20:11:13.289 T:6164   ERROR: DXVA::CProcessorHD::IsFormatSupported: Unsupported format 105 for 1.
20:11:13.293 T:3652  NOTICE: Creating InputStream
Код:
def PLAY(name,url,iconimage):
       link = 'http://192.168.0.116/player/cbplayer/embed_player.php?vid=' + url #Конструираме адреса за достъп до видеото
       req = urllib2.Request(link) #link е адресът http://http://192.168.0.116/player/pak_player/embed_player.php?vid=894RAXUNHOGU
       opener = urllib2.build_opener()
       f = opener.open(req)
       jsonrsp = json.loads(f.read().replace('http://http://192.168.0.116/player/pak_player/pakplayer.swf?config=',''))
       #print jsonrsp['clip']['url']
       li = xbmcgui.ListItem(iconImage=iconimage, thumbnailImage=iconimage, path=url)
       li.setInfo('video', { 'title': name })
       try:
            xbmcplugin.setResolvedUrl(int(sys.argv[1]), True, xbmcgui.ListItem(path = url))
       except:
            xbmc.executebuiltin("Notification('Грешка','Видеото липсва на сървъра!')")


Код:
elif mode==3:
       print ""+url
       PLAY(name,url,iconimage)
Отговори
#30
За path задай jsonrsp['clip']['url'] т.е. li = xbmcgui.ListItem(iconImage=iconimage, thumbnailImage=iconimage, path=jsonrsp['clip']['url']), а xbmcplugin.setResolvedUrl нека използва вече дефинираният List.Item елемент: xbmcplugin.setResolvedUrl(int(sys.argv[1]), True, li). Коментарът ми #link е адре... може да го махнеш от кода.
[Изображение: notrobosmall.jpg]
Отговори


Теми, които вероятно са свързани...
Тема: Автор Отговори: Прегледи: Последна публикация
Lightbulb Препоръки за създаването на video addon Majide 0 932 08-07-2024, 21:21
Последна публикация: Majide
  Addon за децата Majide 3 3,744 17-07-2021, 22:47
Последна публикация: martinstz
Bug Inputstream Adaptive Addon Majide 2 5,112 02-12-2018, 00:01
Последна публикация: Majide
  Kodi Text to Speech & Voice Assistant Majide 4 9,168 01-05-2017, 09:09
Последна публикация: Majide
Lightbulb Fork на Addon. Защо и Как? Majide 8 12,429 12-04-2017, 21:35
Последна публикация: Majide

Отваряне на: