【问题标题】:How can I add a local file to a kodi addon?如何将本地文件添加到 kodi 插件?
【发布时间】:2016-10-02 14:57:17
【问题描述】:

如何将本地文件添加到 kodi 插件? 在以下示例中,互联网文件 (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)

【问题讨论】:

    标签: kodi


    【解决方案1】:

    这应该是文件系统中的绝对路径,不带任何前缀,例如 '/foo/bar/spam.mp4' (*nix) 或 'c:\\foo\\bar\\spam.mp4' (Win)。我认为,网络文件系统也可以工作,对于它们,您确实需要像 smb:// 或 nfs://` 这样的前缀,但对于本地文件则不需要。

    【讨论】:

    • 你的答案是正确的。因此赞成。尽管如此,它不会解决应该在不同文件系统(linux,win等)中工作的插件中的问题
    • 您的评论毫无意义。本地文件的路径将始终位于该文件所在的文件系统中。您需要以某种方式获取此路径,例如,通过使用os.listdir() 扫描某个目录。硬编码的路径不会在任何地方都有效,因为它根本不可能。您如何保证该文件位于将运行您的插件的每台机器上的相同位置?更不用说,与不同文件系统的兼容性不在您最初的问题中。
    • 出于我的目的,这是有道理的,因为我希望插件可以在不同的文件系统中工作。幸运的是,Kodi 的开发人员在实施special:// 协议时解决了这个问题,这使得看似不可能的事情成为可能。看我的回答。恕我直言,插件隐含地要求与不同文件系统兼容。对不起,如果我没有明确地说出来。无论如何:感谢您的宝贵回答和您的努力。
    【解决方案2】:

    搜索了一段时间后,我找到了 Kodi 的 special:// 协议:http://kodi.wiki/view/Special_protocol,我在这里引用:

    “特殊协议”是 Kodi 针对平台依赖的解决方案 目录。公共目录名称被分配一个特殊的://[name] 在 Kodi 内部传递然后转换为 操作系统看到它之前的平台特定路径。这有助于 将大部分平台混乱集中在代码中。

    使用special:// 协议下面的代码就可以了:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-26
      • 2014-04-22
      • 1970-01-01
      • 2021-08-05
      • 2019-12-04
      • 1970-01-01
      • 2014-01-09
      • 1970-01-01
      相关资源
      最近更新 更多