2016-09-26 35 views
0

如何添加一個本地文件到一個kodi插件? 在以下示例中,Internet文件(url ='http:// ...')起作用。但是本地文件(url ='file:// ...')沒有。如何將本地文件添加到科迪插件?

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'(勝)。我認爲,網絡文件系統也可以工作,對於他們來說,你需要前綴如smb://或nfs://`,但不適用於本地文件。

+0

你的答案是正確的。因此upvoted。儘管如此,它並不能解決應該在不同文件系統中工作的插件(linux,win等)的問題。 – wolfrevo

+0

您的評論沒有意義。本地文件的路徑將始終位於該文件所在的文件系統中。你需要以某種方式獲得這個路徑,例如,用'os.listdir()'掃描某個目錄。硬編碼路徑無處不在,因爲這根本不可能。如何保證文件位於每臺將運行插件的計算機上的相同位置?這並不是說事實上,與不同文件系統的兼容性不在你最初的問題中。 –

+0

出於我的目的,這是有道理的,因爲我希望插件可以在不同的文件系統中工作。幸運的是,Kodi的開發人員在實現'special://'協議時解決了這個問題,這使得看似不可能的事情成爲可能。看到我的答案。 IMHO與不同文件系統的兼容性是addon隱含要求的。對不起,如果我沒有明確說出它。無論如何:謝謝你的寶貴答案和你的努力。 – wolfrevo

相關問題