2016-09-26 4 views
0

Как добавить локальный файл к аддону kodi? В следующем примере работает интернет-файл (url = 'http: // ...'). Но локальный файл (url = 'file: // ...') не работает.Как добавить локальный файл к аддону kodi?

import xbmc 
import xbmcgui 
import xbmcplugin 
import xbmcaddon 
import xbmcvfs 
import sys 
addon_handle = int(sys.argv[1]) 
xbmcplugin.setContent(addon_handle, 'songs') 

#this works 
xbmcplugin.addDirectoryItem(handle=addon_handle, url='http://www.noiseaddicts.com/samples_1w72b820/2537.mp3', listitem=xbmcgui.ListItem('internet_file')) 

#this do not work 
xbmcplugin.addDirectoryItem(handle=addon_handle, url='file://media/usb0/music/bn/local_file.mp3', listitem=xbmcgui.ListItem('local_file')) 

xbmcplugin.endOfDirectory(addon_handle) 

ответ

1

После поиска на некоторое время я нашел special:// протокол Коди в: http://kodi.wiki/view/Special_protocol которое я цитирую здесь:

«Специальный протокол» является решение Коди на платформу зависимых каталогов. Обычным именам каталогов присваивается специальный путь: // [name] , который передается внутри Kodi, а затем переводится на конкретный путь платформы до того, как операционная система увидит его. Это помогает поддерживать большую часть платформы беспорядок централизован в коде.

special:// Использование протокола следующий код будет сделать это:

xbmcplugin.addDirectoryItem(handle=addon_handle, 
          url='special://home/bn/local_file.mp3', 
          listitem=xbmcgui.ListItem('local_file')) 
1

Это должно быть абсолютный путь в вашей файловой системе без каких-либо префиксов, например '/foo/bar/spam.mp4' (* NIX) или 'c:\\foo\\bar\\spam.mp4' (Win). Я думаю, сетевые файловые системы тоже будут работать, и для них вам понадобятся префиксы, такие как smb:// или nfs: // `, но не для локальных файлов.

+0

ваш ответ является правильным. поэтому рекомендуется. Тем не менее это не решит проблему в аддоне, который должен работать в разных файловых системах (Linux, победа и т. Д.) – wolfrevo

+0

Ваш комментарий не имеет смысла. Путь к локальному файлу всегда будет находиться в файловой системе, где находится этот файл. Вам нужно каким-то образом получить этот путь, например, путем сканирования некоторого каталога с помощью 'os.listdir()'. Твердый путь не будет работать повсюду, потому что это просто невозможно. Как вы можете гарантировать, что файл находится в одном месте на каждом компьютере, на котором будет работать ваш аддон? Это не говоря уже о том, что совместимость с разными файловыми системами не была в вашем первоначальном вопросе. –

+0

Для моих целей это имеет смысл, потому что я хочу, чтобы аддон работал в разных файловых системах. И, к счастью, разработчики Kodi обратились к этой проблеме, когда они внедрили «специальный: //» протокол, что делает возможным то, что кажется невозможным. См. Мой ответ. Совместимость IMHO с различными файловыми системами неявно требуется аддоном. Извините, если я не произнес это явно. Во всяком случае: спасибо за ваш ценный ответ и ваши усилия. – wolfrevo