xupnpd - eXtensible UPnP agent

Используем пакеты, расширяющие возможности оборудования
mihd
Сообщения: 43
Зарегистрирован: 28 окт 2015, 17:45

Сообщение mihd » 19 апр 2016, 22:15

lichtenshtein писал(а):Источник цитатыА вот с Youtube всё никак пока. Я вроде бы все варианты перепробовал из примеров. Что-то не то. В xupnpd_youtube.lua нужно же только свой ключ вставить и всё?

Да, нужно только поставить ключ, и всё.
Вы всё правильно делаете. Все Ваши фиды у меня запустились. :)
Кстати, поле "Name" (в момент добавления фида) можно не заполнять. Оно заполняется само, причем довольно корректно.
Там, на самом деле всё просто.
Если добавляете канал пользователя, то просто указываете его username или id его канала (без всяких channel и т.п.)
Для "понравившегося видео" - favorites/username или favorites/id (подставляете нужные username или id)
Для поиска - search/search_string/optionalregion/optionallanguage(ISO 639-1 Code) (например, search/Мадонна/ru/ru или search/Павел Воля)
Для плейлистов - playlist/id (например, playlist/PLh6dVTO7f4FZ2mMK7a64qYDm2RThg-v7F)
channel/mostpopular или channel/mostpopular/ru - вывод самых популярных роликов ("в мире" и "в России", соответственно)

kvi7
Сообщения: 24
Зарегистрирован: 28 мар 2016, 13:56
Откуда: Москва

Сообщение kvi7 » 19 апр 2016, 22:16

mazhor, Спасибо за ваши советы с плагином youtube, однако все пляски безрезультатны. Заменял файлы, но создаются только пустые плейлисты. :cry: Игры довели до необходимости сноса и переустановки Entware-ng. Заодно обновился до Entware-Keenetic :lol:

lichtenshtein, какой ключ и как вставить в xupnpd_youtube.lua?

Касательно Vimeo.
Спасибо, плейлисты научился создавать по вашему образцу. Однако, при попытке просмотра на телевизоре - пишет Corrupted и VLC на компьютере тоже не воспроизводит. Воспроизводить можно только в браузере при нажатии на кнопку Play.

mihd
Сообщения: 43
Зарегистрирован: 28 окт 2015, 17:45

Сообщение mihd » 19 апр 2016, 22:27

kvi7 писал(а):Источник цитаты mazhor, Спасибо за ваши советы с плагином youtube, однако все пляски безрезультатны. Заменял файлы, но создаются только пустые плейлисты.
lichtenshtein, какой ключ и как вставить в xupnpd_youtube.lua?

Вот здесь смотрите про ключ.
Для youtube используйте версию от 16.12.2015, и следуйте моим рекомендациям по составлению фидов (см. выше)

kvi7
Сообщения: 24
Зарегистрирован: 28 мар 2016, 13:56
Откуда: Москва

Сообщение kvi7 » 19 апр 2016, 23:04

Спасибо! Приступил к изучению....
Дополнительно opkg install curl требуется?
Пожалуйста. какие дополнительные модули для других xupnpd-плагинов требуются, чтобы всё сразу установить?

lichtenshtein
Сообщения: 19
Зарегистрирован: 15 апр 2016, 04:24

Сообщение lichtenshtein » 19 апр 2016, 23:59

mihd, да, с фидами я почти сразу разобрался, просто пробовал разные варианты для разных версий плагина, но в логе всё равно постоянно какие-то ошибки и получившийся плейлист всегда создаётся пустым. Могу я просто выложить свои конфиги, может Вы увидите в них что-то подозрительное, чего я не вижу?
xupnpd.cfg
cfg={}

-- multicast interface for SSDP exchange, 'eth0', 'br0', 'br-lan' for example
cfg.ssdp_interface='br0'

-- 'cfg.ssdp_loop' enables multicast loop (if player and server in one host)
cfg.ssdp_loop=0

-- SSDP announcement interval
cfg.ssdp_notify_interval=15

-- SSDP announcement age
cfg.ssdp_max_age=1800

-- HTTP port for incoming connections
cfg.http_port=4141

-- syslog facility (syslog,local0-local7)
cfg.log_facility='local0'

-- 'cfg.daemon' detach server from terminal
cfg.daemon=true

-- silent mode - no logs, no pid file
cfg.embedded=true

-- 'cfg.debug' enables SSDP debug output to stdout (if cfg.daemon=false)
-- 0-off, 1-basic, 2-messages
cfg.debug=1

-- external 'udpxy' url for multicast playlists (udp://@...)
cfg.udpxy_url='http://192.168.1.1:4022'

-- downstream interface for builtin multicast proxy (comment 'cfg.udpxy_url' for processing 'udp://@...' playlists)
cfg.mcast_interface='eth2.2'

-- 'cfg.proxy' enables proxy for injection DLNA headers to stream
-- 0-off, 1-radio, 2-radio/TV
cfg.proxy=2

-- User-Agent for proxy
cfg.user_agent='Mozilla/5.0'

-- I/O timeout
cfg.http_timeout=30

-- enables UPnP/DLNA notify when reload playlist
cfg.dlna_notify=true

-- UPnP/DLNA subscribe ttl
cfg.dlna_subscribe_ttl=1800

-- group by 'group-title'
cfg.group=true

-- sort files
cfg.sort_files=false

-- Device name
cfg.name='UPnP-IPTV'

-- static device UUID, '60bd2fb3-dabe-cb14-c766-0e319b54c29a' for example or nil
cfg.uuid='60bd2fb3-dabe-cb14-c766-0e319b54c29a'

-- max url cache size
cfg.cache_size=8

-- url cache item ttl (sec)
cfg.cache_ttl=900

-- default mime type (mpeg, mpeg_ts, mpeg1, mpeg2, ts, ...)
cfg.default_mime_type='mpeg'

-- feeds update interval (seconds, 0 - disabled)
cfg.feeds_update_interval=7200
cfg.playlists_update_interval=0

-- playlist (m3u file path or path with alias
playlist=
{
-- { './playlists/mozhay.m3u', 'Mozhay.tv' },
-- { './localmedia', 'Local Media Files' }
-- { './private', 'Private Media Files', '127.0.0.1;192.168.1.1' } -- only for 127.0.0.1 and 192.168.1.1
}

-- feeds list (plugin, feed name, feed type)
feeds=
{
-- { 'vimeo', 'channel/hd', 'Vimeo HD Channel' },
-- { 'vimeo', 'channel/hdxs', 'Vimeo Xtreme sports' },
-- { 'vimeo', 'channel/mtb', 'Vimeo MTB Channel' },
-- { 'youtube', 'channel/top_rated', 'YouTube Top Rated' },
-- { 'youtube', 'Drift0r', 'Drift0r' },
-- { 'youtube', 'XboxAhoy', 'XboxAhoy' },
-- { 'ag', 'videos', 'AG - New' },
-- { 'ivi', 'new', 'IVI - New' },
-- { 'gametrailers', 'ps3', 'GT - PS3' },
-- { 'giantbomb', 'all', 'GiantBomb - All' },
-- { 'dreambox', 'http://192.168.0.1:8001/','Dreambox1' },
}

-- log ident, pid file end www root
cfg.version='1.033'
cfg.log_ident=arg[1] or 'xupnpd'
cfg.pid_file='/opt/var/run/'..cfg.log_ident..'.pid'
cfg.www_root='./www/'
cfg.tmp_path='/opt/tmp/'
cfg.plugin_path='./plugins/'
cfg.config_path='./config/'
cfg.playlists_path='./playlists/'
--cfg.feeds_path='/opt/tmp/xupnpd-feeds/'
cfg.ui_path='./ui/'
cfg.drive='' -- reload playlists only if drive state=active/idle, example: cfg.drive='/dev/sda'
cfg.profiles='./profiles/' -- device profiles feature

dofile('xupnpd_main.lua')
Свернуть

common.lua
cfg["ssdp_interface"]="br0"
cfg["ssdp_notify_interval"]=15
cfg["ssdp_max_age"]=1800
cfg["http_port"]=4141
cfg["mcast_interface"]="eth2.2"
cfg["proxy"]=2
cfg["user_agent"]="Mozilla/5.0"
cfg["http_timeout"]=60
cfg["dlna_notify"]=true
cfg["dlna_subscribe_ttl"]=1800
cfg["group"]=true
cfg["sort_files"]=true
cfg["name"]="UPnP-IPTV"
cfg["uuid"]="60bd2fb3-dabe-cb14-c766-0e319b54c29a"
cfg["default_mime_type"]="mpeg"
cfg["feeds_update_interval"]=86000
cfg["playlists_update_interval"]=0
cfg["drive"]=""
cfg["youtube_fmt"]=22
cfg["youtube_region"]="RU"
cfg["youtube_video_count"]=50
cfg["ivi_fmt"]="MP4-hi"
cfg["ivi_video_count"]=50
cfg["gametrailers_video_count"]=100
cfg["vimeo_video_count"]=60
cfg["vimeo_fmt"]="hd"
cfg["ag_fmt"]="400p"
cfg["vk_private_workaround"]=true
cfg["vk_video_count"]=100
Свернуть

xupnpd_youtube.lua
--[[
Copyright (C) 2011-2013 Anton Burdinuk
clark15b@gmail.com
https://tsdemuxer.googlecode.com/svn/trunk/xupnpd

sysmer add support api v3 (need install curl with ssl)

20150524 AnLeAl changes:
in url fetch, added docs section

20150527 AnLeAl changes:
fixed for video get when less than 50
returned ui config for user amount video
add possibility get more than 50 videos

20150527 MejGun changes:
code refactoring for feed update

20150530 AnLeAl changes:
small code cleanup
added 'channel/mostpopular' for youtube mostpopular videos (it's only 30 from api), also region code from ui working
added favorites/username to get favorites
added search function

20150531 AnLeAl changes:
fixed error when only first feed can get all videos for cfg.youtube_video_count and other no more 50
ui help updated
curl settings from cycles was moved to variables

20150612 AnLeAl changes:
added playlist/playlistid option
ui help updated
doc section updated

sysmer changes:
play crypt video (vevo) - add vlc youtube plugin
play video with login youtube

sysmer changes:
new function youtube_updatefeed

20150912 AnLeAl changes
fixed search function for non english words with spaces
fixed search order: date
(-) removed favorites/username to get favorites
(-) restricted amount of video to 50
(-) removed links with "friendly names" of feeds (used in WebUI of Xupnpd )

20151103 mihd changes
added possibility to get more than 50 videos
repaired links with "friendly names" of feeds (used in WebUI of Xupnpd ). If "friendly name" is empty, used fullname of channel(user) from youtube.
added sequence numbers for videos (for receivers, sorting videos only alphabetically)
added favorites/username and favorites/id to get favorites
fixed search function, added regional language. ("search/search_string/optionalregion/optionallanguage", where "optionalregion" from
http://www.iso.org/iso/country_codes/is ... ements.htm and "optionallanguage" (ISO 639-1 Code) from
http://www.loc.gov/standards/iso639-2/php/code_list.php )

20151216 Slider26 changes
added protection of critical error in "youtube_updatefeed" function.
any criticar error in this function (on xupnpd v.1.033) causes abnormal termination of "Update Feed" process.
this can happen, for example, during processing "playlist/id" feed, where id is not exists.
all errors writes in plugins/xupnpd_youtube.log file like: "Date: "Error text" in process of feed "feed" ["friendly_name"]"
]]
--[[
README
This is YouTube api v3 plugin for xupnpd.
Be accurate when search for real username or playlist id.
Quickstart:
1. Place this file into xupnpd plugin directory.
2. Go to google developers console: https://developers.google.com/youtube/r ... tion?hl=ru
3. You need API Key, choose Browser key: https://developers.google.com/youtube/r ... e_API_Keys
4. Don't use option: only allow referrals from domains.
5. Replace '***' with your new key in section '&key=***' in this file. Save file.
6. Restart xupnpd, remove any old feeds that was made for youtube earlier. Add new one based on ui help patterns.
7. Enjoy!

18 - 360p (MP4,h.264/AVC)
22 - 720p (MP4,h.264/AVC) hd
37 - 1080p (MP4,h.264/AVC) hd
82 - 360p (MP4,h.264/AVC) stereo3d
83 - 480p (MP4,h.264/AVC) hq stereo3d
84 - 720p (MP4,h.264/AVC) hd stereo3d
85 - 1080p (MP4,h.264/AVC) hd stereo3d
]]

cfg.youtube_fmt=37
cfg.youtube_region='*'
cfg.youtube_video_count=100

function add_to_error_log(error_string)
local logfile_path=cfg.plugin_path..'xupnpd_youtube.log'

local dfd=io.open(logfile_path,'a')

if dfd then
dfd:write(os.date() .. ': ' .. error_string .. '\n')
dfd:close()
end
end

function youtube_updatefeed(feed,friendly_name)
local res_call
local res_func

res_call, res_func = pcall(youtube_updatefeed_unprotected,feed,friendly_name)

if res_call then
return res_func
else
add_to_error_log('\"' .. res_func .. '\" in process of feed \"' .. feed .. '\" [\"' .. friendly_name .. '\"]')
return false
end
end

function youtube_updatefeed_unprotected(feed,friendly_name)
local function isempty(s)
return s == nil or s == ''
end

local data = nil
local jsondata = nil
local uploads = nil
local tr = nil
local region = ''
local lang = ''
local rc = false

local num = cfg.youtube_video_count

local key = '&key=AIzaSyCDkNYxOUfpyNECVrqhjv23vVVQOgeVHfE' -- change *** to your youtube api key from: https://console.developers.google.com
local c = 'https://www.googleapis.com/youtube/v3/channels?part=contentDetails&forUsername='
local u = 'https://www.googleapis.com/youtube/v3/channels?part=contentDetails&id='
local i = 'https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId='
local s = 'https://www.googleapis.com/youtube/v3/search?part=snippet&type=video&order=date&q='
local cn = 'https://www.googleapis.com/youtube/v3/channels?part=snippet&id='
local cnu = 'https://www.googleapis.com/youtube/v3/channels?part=snippet&forUsername='
local pl = 'https://www.googleapis.com/youtube/v3/playlists?part=snippet&id='
local mp = 'https://www.googleapis.com/youtube/v3/videos?part=snippet&chart=mostPopular'
local fordata = ''
local pagetokenA = ''
local nextpageA = ''
local enough = false
local forfeedn = ''
local numA = 50 -- show 50 videos per page 0..50 from youtube api v3
local maxA = '&maxResults=' .. numA
if num < numA then
maxA = '&maxResults=' .. num
numA = num
end

if cfg.youtube_region and cfg.youtube_region~='*' then
region='&regionCode='..cfg.youtube_region
forfeedn = cfg.youtube_region
else
region = ''
forfeedn = 'worldwide'
end

feed = string.gsub(feed,'//','/empt/')
if string.sub(feed,1,7) == 'search/' and string.find(feed,'/',8) then
if string.sub(feed,string.find(feed,'/',8),string.find(feed,'/',8)+5) == '/empt/' then
feed = string.gsub(feed,'/empt/','/'..forfeedn..'/',1)
end
end
if (string.sub(feed,1,7) == 'search/' and string.find(feed,'/',8) == nil) or (string.sub(feed,1,8) == 'channel/' and string.find(feed,'/',9) == nil) then
feed = feed..'/'..forfeedn
end
local tfeed = split_string(feed,'/')
local feed_name = formatfeedn(feed)

if table.getn(tfeed) == 1 then
data = curl(c .. tfeed[1].. key)
if string.find(data,'"totalResults": 0,') then
data = curl(u .. tfeed[1].. key)
feed_name = curl(cn .. tfeed[1].. key)
else
feed_name = curl(cnu .. tfeed[1].. key)
end
feed_name = json.decode(feed_name)
feed_name=formatfeedn(feed_name['items'][1]['snippet']['title'])
jsondata = json.decode(data)
uploads = jsondata['items'][1]['contentDetails']['relatedPlaylists']['uploads']
fordata = i .. uploads .. key
end

if table.getn(tfeed) > 1 then
if tfeed[3] and tfeed[3]~='worldwide' then
region = '&regionCode='..string.upper(tfeed[3])
end
if tfeed[4] then
lang = '&relevanceLanguage='..string.lower(tfeed[4])
end
if tfeed[1] == 'search' then
fordata = s .. util.urlencode(tfeed[2]) .. key .. '&videoDefinition=high&videoDimension=2d' .. region .. lang
end

if tfeed[1] == 'playlist' then
fordata = i .. tfeed[2] .. key
feed_name = curl(pl .. tfeed[2].. key)
feed_name = json.decode(feed_name)
feed_name='[PL] ' .. formatfeedn(feed_name['items'][1]['snippet']['title'])
end

if tfeed[1] == 'favorites' then
data = curl(c .. tfeed[2].. key)
if string.find(data,'"totalResults": 0,') then
data = curl(u .. tfeed[2].. key)
feed_name = curl(cn .. tfeed[2].. key)
else
feed_name = curl(cnu .. tfeed[2].. key)
end
feed_name = json.decode(feed_name)
feed_name='[FAV] ' .. formatfeedn(feed_name['items'][1]['snippet']['title'])
jsondata = json.decode(data)
uploads = jsondata['items'][1]['contentDetails']['relatedPlaylists']['likes']
fordata = i .. uploads .. key
end

if tfeed[1] == 'channel' and tfeed[2] == 'mostpopular' then
fordata = mp .. key .. region
end
end

local feed_m3u_path=cfg.feeds_path..feed_name..'.m3u'
local tmp_m3u_path=cfg.feeds_path..feed_name..'.tmp'

local dfd=io.open(tmp_m3u_path,'w+')
if dfd then
if string.find(friendly_name,'youtube ') then
plname = feed_name
else
plname = friendly_name
end
dfd:write('#EXTM3U name=\"',plname,'\" type=mp4 plugin=youtube\n')
local i = 0
while true do
data = curl(fordata .. maxA .. pagetokenA)
if data == nil or string.find(data,'"totalResults": 0,') or string.find(data,'"errors":') then
break
end
jsondata = json.decode(data)
tr = jsondata['pageInfo']['totalResults']
if num > tr then num = tr end

local vid = nil
local title = nil
local url = nil
local img = nil

for key,value in pairs(jsondata['items']) do
i = i + 1
if i > num then
enough = true
break
end

if tfeed[1] == 'channel' and tfeed[2] == 'mostpopular' then
vid = value['id']
elseif tfeed[1] == 'search'then
vid = value['id']['videoId']
else
vid = value['snippet']['resourceId']['videoId']
end

local title = value['snippet']['title']
local url = 'http://www.youtube.com/watch?v=' .. vid
local img = 'http://i.ytimg.com/vi/' .. vid .. '/mqdefault.jpg'
dfd:write('#EXTINF:0 logo=',img,' ,',i,'. ',title,'\n',url,'\n')
end

if isempty(jsondata['nextPageToken']) or enough then
break
else
nextpageA = jsondata['nextPageToken']
pagetokenA = '&pageToken=' .. nextpageA
end
jsondata=nil
end

if util.md5(tmp_m3u_path)~=util.md5(feed_m3u_path) then
if os.execute('mv \"' .. tmp_m3u_path .. '\" \"' .. feed_m3u_path .. '\"')==0 then
rc=true
end
else
util.unlink(tmp_m3u_path)
end
end
dfd:close()
return rc
end

function youtube_sendurl(youtube_url,range)
local url=nil
if plugin_sendurl_from_cache(youtube_url,range) then return end
url=youtube_get_video_url(youtube_url)
if url then
if cfg.debug>0 then print('YouTube Real URL: '..url) end
plugin_sendurl(youtube_url,url,range)
else
if cfg.debug>0 then print('YouTube clip is not found') end
plugin_sendfile('www/corrupted.mp4')
end
end

function youtube_get_video_url(youtube_url)

local url = nil
local js_url = nil
local sig = nil
local sts = nil
local tmp = nil
local ur = {}
local si = {}
local i = 1

local id = split_string(youtube_url,'=')
local info_page = 'http://www.youtube.com/get_video_info?&video_id='..id[2]..'&el=info&ps=default&eurl=&gl=US&hl=en'
local embed_page = 'http://www.youtube.com/embed/'..id[2]

embed_page = plugin_download(embed_page)
embed_page = string.match(embed_page,'PLAYER_CONFIG(.-)%);')
embed_page = '{' .. string.match(embed_page,'{(.*)}') .. '}'
embed_page = json.decode(embed_page)

sts = embed_page.sts
js_url = 'http:' .. embed_page.assets.js

url = plugin_download(info_page .. '&sts=' .. sts)
tmp = string.match(url,'url_encoded_fmt_stream_map=(.-)&')
tmp = string.gsub(tmp,'%%2C','!')
tmp = string.gsub(tmp,'%%26','!')
tmp = split_string(tmp,'!')


for key, val in pairs(tmp) do
if string.find(val,'url%%3D') then
ur[i] = string.match(val,'url%%3D(.*)')
i = i + 1
end
end

i = 1

for key, val in pairs(tmp) do
if string.find(val,'s%%3D') then
si[i] = string.match(val,'s%%3D(.*)')
i = i + 1
end
end

for key, val in pairs(ur) do
if string.find(val,'itag%%253D' .. cfg.youtube_fmt) then
if string.find(val,'signature') then
return util.urldecode(util.urldecode(val))
else
sig = si[key]
sig = js_descramble( sig, js_url )
return util.urldecode(util.urldecode(val)) .. '&signature=' .. sig
end
end
end

if string.find(ur[1],'signature') then
return util.urldecode(util.urldecode(ur[1]))
else
sig = si[1]
sig = js_descramble( sig, js_url )
return util.urldecode(util.urldecode(ur[1])) .. '&signature=' .. sig
end

end

function js_descramble( sig, js_url )

local js = plugin_download( js_url )

local descrambler = nil
descrambler = string.match( js, "%.sig||([a-zA-Z0-9$]+)%(" )

local transformations = nil
local rules = nil

transformations, rules = string.match( js, "var ..={(.-)};function "..descrambler.."%([^)]*%){(.-)}" )

local trans = {}

for meth,code in string.gmatch( transformations, "(..):function%([^)]*%){([^}]*)}" ) do
if string.match( code, "%.reverse%(" ) then
trans[meth] = "reverse"
elseif string.match( code, "%.splice%(") then
trans[meth] = "slice"
elseif string.match( code, "var c=" ) then
trans[meth] = "swap"
end
end

for meth,idx in string.gmatch( rules, "..%.(..)%([^,]+,(%d+)%)" ) do
idx = tonumber( idx )
if trans[meth] == "reverse" then
sig = string.reverse( sig )
elseif trans[meth] == "slice" then
sig = string.sub( sig, idx + 1 )
elseif trans[meth] == "swap" then
if idx > 1 then
sig = string.gsub( sig, "^(.)("..string.rep( ".", idx - 1 )..")(.)(.*)$", "%3%2%1%4" )
elseif idx == 1 then
sig = string.gsub( sig, "^(.)(.)", "%2%1" )
end
end
end

return sig
end

function curl( data )
data = io.popen('curl -k ' .. '"' .. data .. '"')
data = data:read('*all')
return data
end

function formatfeedn( feed_name )
feed_name = string.gsub(feed_name,'[\:*?<>|]','')
feed_name = string.gsub(feed_name,'\"','\'')
if string.sub(feed_name,1,7) == 'search/' then
feed_name = string.gsub(feed_name,'/',' \'',1)
if string.find(feed_name,'/') then
feed_name = string.gsub(feed_name,'/','\' ',1)
else
feed_name = feed_name .. '\''
end
end
if string.sub(feed_name,1,8) == 'channel/' then
feed_name = string.sub(feed_name,9)
end
feed_name = string.gsub(feed_name,'/',' ')
feed_name = string.gsub(feed_name,'-','_')
return feed_name
end

plugins['youtube']={}
plugins.youtube.name="YouTube"
plugins.youtube.desc="<i>name</i> from http://www.youtube.com/user/<i>name</i> or <i>id</i> from http://www.youtube.com/channel/<i>id</i>,<br>" ..
"favorites/<i>username</i> or favorites/<i>id</i>,<br>" ..
"search/<i>search_string</i>/optional<i><a href=http://www.iso.org/iso/country_codes/iso_3166_code_lists/country_names_and_code_elements.htm>region</a></i>/optional<i><a href=http://www.loc.gov/standards/iso639-2/php/code_list.php>language(ISO 639-1 Code)</a></i>,<br>" ..
"playlist/<i>id</i>,<br>" ..
"YouTube channels: channel/mostpopular/optional<i><a href=http://www.iso.org/iso/country_codes/iso_3166_code_lists/country_names_and_code_elements.htm>region</a></i>"
plugins.youtube.sendurl=youtube_sendurl
plugins.youtube.updatefeed=youtube_updatefeed
plugins.youtube.getvideourl=youtube_get_video_url

plugins.youtube.ui_config_vars=
{
{ "select", "youtube_fmt", "int" },
{ "select", "youtube_region" },
{ "input", "youtube_video_count", "int" }
}
Свернуть

лог плагина youtube
Mon Apr 18 19:27:42 2016: "./plugins/xupnpd_youtube.lua:201: attempt to index field 'items' (a nil value)" in process of feed "playlist/PLh6dVTO7f4FZ2mMK7a64qYDm2RThg-v7F" ["playlistid"]
Mon Apr 18 19:31:20 2016: "./plugins/xupnpd_youtube.lua:180: attempt to index field 'items' (a nil value)" in process of feed "AnchousJap" ["Дмитрий Шамов"]
Mon Apr 18 19:31:21 2016: "./plugins/xupnpd_youtube.lua:180: attempt to index field 'items' (a nil value)" in process of feed "UCUZLQoU0DDMhO5CNIUStfug" ["Blababla"]
Mon Apr 18 19:31:22 2016: "./plugins/xupnpd_youtube.lua:201: attempt to index field 'items' (a nil value)" in process of feed "playlist/PLh6dVTO7f4FZ2mMK7a64qYDm2RThg-v7F" ["playlistid"]
Mon Apr 18 19:31:47 2016: "./plugins/xupnpd_youtube.lua:180: attempt to index field 'items' (a nil value)" in process of feed "AnchousJap" ["Дмитрий Шамов"]
Mon Apr 18 19:31:48 2016: "./plugins/xupnpd_youtube.lua:180: attempt to index field 'items' (a nil value)" in process of feed "UCUZLQoU0DDMhO5CNIUStfug" ["Blababla"]
Mon Apr 18 19:31:49 2016: "./plugins/xupnpd_youtube.lua:201: attempt to index field 'items' (a nil value)" in process of feed "playlist/PLh6dVTO7f4FZ2mMK7a64qYDm2RThg-v7F" ["playlistid"]
Mon Apr 18 19:44:18 2016: "./plugins/xupnpd_youtube.lua:180: attempt to index field 'items' (a nil value)" in process of feed "AnchousJap" ["Дмитрий Шамов"]
Mon Apr 18 19:44:18 2016: "./plugins/xupnpd_youtube.lua:180: attempt to index field 'items' (a nil value)" in process of feed "UCUZLQoU0DDMhO5CNIUStfug" ["Blababla"]
Mon Apr 18 19:44:19 2016: "./plugins/xupnpd_youtube.lua:201: attempt to index field 'items' (a nil value)" in process of feed "playlist/PLh6dVTO7f4FZ2mMK7a64qYDm2RThg-v7F" ["playlistid"]
Свернуть

созданный ключ
ключ.jpg
Свернуть

Фиды выкладывал выше.
kvi7 писал(а):Источник цитаты Однако, при попытке просмотра на телевизоре - пишет Corrupted

Скачайте версию на шестой странице темы, должно заработать. Curl тоже требуется, насколько я понял.
У вас нет необходимых прав для просмотра вложений в этом сообщении.

mihd
Сообщения: 43
Зарегистрирован: 28 окт 2015, 17:45

Сообщение mihd » 20 апр 2016, 01:33

lichtenshtein,
Попробовал Ваш ключ подставить в свой плагин. Действительно плейлисты не формируются. И ошибки такие же, как у Вас.
То есть получается, что какая-то проблема с ключом. Попробуйте его заново сформировать, строго по инструкции.

mazhor
Сообщения: 29
Зарегистрирован: 06 окт 2015, 15:52

Сообщение mazhor » 20 апр 2016, 02:07

mihd писал(а):Источник цитаты
Что-то у Вас как-то всё очень сложно :)
Тот ролик (с Фиксиками), ссылку на который Вы дали, у меня пошел без всяких танцев с бубном. С версией плагина от 16.12.2015 ..


Попробовал ещё раз, мало, может что-то изменилось.
А нет, ролик по прежнему не воспроизводится на версии от 2015-12-16.
Мой телевизор (Philips) пишет: "Разрешение видео не поддерживается".
И такие ролики периодически встречаются, поэтому и намудрил так.
Про тот плагин, что приложил выше, вспомнил, он не работает на обновление, ошибку выдаёт.
Поэтому так и на мудрил. Хотя я даже рад тому, что так получилось. В список DLNA засунул playlist, который выбрав можно запустить обновление всех feed`ов. Автомат мне теперь не подходит, так как надо на момент обновление заменят ютубовский плагин. Да и теперь захотел, запустил обновление прямо с телевизора, удобно, мне нравится.

За ВКонтакте спасибо. Спрашивал ранее, но ничего не ответили. Позже где-то прочитал, вроде как забросили пока его поддержку.
Оказывается действительно всё работает. Жаль, что видео снятое на GoPro и залитое Вконтакт мой телевизор не хочет воспроизводить.
Пишет: "Формат аудио не поддерживается", хотя другие видео крутит, значит сам плагин работает.
Всё равно спасибо за ссылку.

mihd
Сообщения: 43
Зарегистрирован: 28 окт 2015, 17:45

Сообщение mihd » 20 апр 2016, 03:28

mazhor писал(а):Источник цитаты
И такие ролики периодически встречаются, поэтому и намудрил так.
Про тот плагин, что приложил выше, вспомнил, он не работает на обновление, ошибку выдаёт.
Поэтому так и на мудрил. Хотя я даже рад тому, что так получилось. В список DLNA засунул playlist, который выбрав можно запустить обновление всех feed`ов. Автомат мне теперь не подходит, так как надо на момент обновление заменят ютубовский плагин. Да и теперь захотел, запустил обновление прямо с телевизора, удобно, мне нравится.

Нифига себе ! И он говорит про удобство :) Это не удобство, это геморрой. Не должно быть так. Что же раньше то молчали :)
Philips, получается, намудрил. Он почему-то не поддерживает воспроизведение по DLNA видео с низким разрешением (360p). Плюс недоработка в плагине (от 16.12.2015), который выдает видео либо в формате 720p, либо 360p. И совершенно при этом не учитывает, что еще может быть 480p.
Старый плагин может выдавать видео в 480p, поэтому Ваш телевизор его воспроизводит. А новый плагин - не найдя поток в 720p, выдает его в 360p (чего Philips не понимает).
Попробую как-нибудь доработать это дело. :)

kvi7
Сообщения: 24
Зарегистрирован: 28 мар 2016, 13:56
Откуда: Москва

Сообщение kvi7 » 20 апр 2016, 03:29

curl установил, ключ сгенерировал и вставил согласно инструкции из файла xupnpd_youtube.lua. Создает пустой плейлист. Одинаковая проблема как у lichtenshtein.
PS. Заново сгенерил ключ - безрезультатно.

mihd
Сообщения: 43
Зарегистрирован: 28 окт 2015, 17:45

Сообщение mihd » 20 апр 2016, 03:59

kvi7 писал(а):Источник цитаты curl установил, ключ сгенерировал и вставил согласно инструкции из файла xupnpd_youtube.lua. Создает пустой плейлист. Одинаковая проблема как у lichtenshtein.
PS. Заново сгенерил ключ - безрезультатно.

Прикольно. Я сейчас попытался сам создать ключ (в другой своей учетной записи). И он не пошел. Старый мой ключ при этом работает. То есть вся эта фигня именно на вновь создаваемых ключах.
Что-то похоже у них там на Google что-то поменялось. Нужно почитать документацию.
Можно, конечно, делится друг с другом старыми ключами. Но это приведет к тому, что их забанят. Ведь количество запросов то к ним возрастет.


Вернуться в «Entware/Qnapware/Optware/Zyxware - обсуждаем репозитории пакетов»

Кто сейчас на конференции

Всего 1 посетитель :: 0 зарегистрированных, 0 скрытых и 1 гость (основано на активности пользователей за последние 5 минут)
Больше всего посетителей (162) здесь было 16 ноя 2019, 18:33

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость