在VLC/Lua中建立一个播放列表,以控制每个媒体文件的播放选项

我有一个包含视频文件的播放列表。对于每个播放列表项,我想使用Lua脚本控制播放列表模式,以确定每个轨道是否应该“重复播放”,“播放并停止”等等。

file:///data/video1.mp4,repeat
file:///data/video2.mp4,play-and-stop

目的是某些视频轨道应该无限重复,直到用户手动切换到下一个轨道。播放列表中的其他轨道应该播放一次,然后前进到下一个轨道,或者播放并停止,等待用户交互才能再次播放。

我目前有以下代码,改编自这里,但我无法将播放列表选项应用于每个轨道,因为它们适用于整个播放列表。我该如何扩展我的脚本来实现这一点?

function probe()
    return string.match(vlc.path, "%.myplaylist$")
end

function parse()
    playlist = {}

    while true do
        playlist_item = {}
        line = vlc.readline()
        if line == nil then
            break

        -- 将播放列表行解析为两个标记,以逗号分隔
        values = {}
        i=0
        for word in string.gmatch(line, '([^,]+)') do
            values[i]=word
            i=i+1
        end

        playlist_item.path = values[0]
        playback_mode = values[1]

        playlist_item.options = {}
        table.insert(playlist_item.options, "fullscreen")
        table.insert(playlist_item.options, playback_mode)

        -- 将项目添加到播放列表
        table.insert( playlist, playlist_item )
    end

    return playlist
end

“视频选项”添加到playlist_item.options中是有效的,但按轨道添加“播放列表选项”则无效。我不确定该如何继续,因为我只能返回整个播放列表。

点赞
用户1624894
用户1624894

给定自定义播放列表

file:///data/video1.mp4,repeat
file:///data/video2.mp4,play-once

我通过向曲目元数据添加重复/播放一次信息完成了上面原始问题中的播放列表脚本。

playlist_item.meta = { ["Playback mode"] = playback_mode }

最后一步是创建一个扩展(类似于歌曲跟踪器扩展),它侦听input_changed事件并使用“播放模式”曲目元数据相应地切换vlc.playlist.repeat_()

function activate()
  update_playback_mode()
end

function input_changed()
  update_playback_mode()
end

function update_playback_mode()
  if vlc.input.is_playing() then
    local item = vlc.item or vlc.input.item()
    if item then
      local meta = item:metas()
      if meta then
        local repeat_track = meta["Playback mode"]
        if repeat_track == nil then
          repeat_track = false
        elseif string.lower(repeat_track) == "repeat" then
          repeat_track = true
        else
          repeat_track = false
        end

    local player_mode = vlc.playlist.repeat_()

    -- as required 切换播放列表.repeat_()
    if player_mode and not repeat_track then
        vlc.playlist.repeat_()
    elseif not player_mode and repeat_track then
        vlc.playlist.repeat_()
    end

    return true
  end
end
2016-12-30 04:06:13
用户4892053
用户4892053

如果您感兴趣,您可以通过在VLC中创建播放列表并将其保存为XSPF文件来解决重复问题。接着,您需要使用记事本编辑该文件,将以下内容添加到要重复的音轨的扩展标签中:

<vlc:option>input-repeat=9999</vlc:option>

例如:

<track>
    <location>file:///C:/Users/Notebook/Desktop/17-LOOP.mp4</location>
    <duration>10048</duration>
    <extension application="http://www.videolan.org/vlc/playlist/0">
        <vlc:id>1</vlc:id>
        <vlc:option>input-repeat=9999</vlc:option>
    </extension>
</track>

这样做后,播放列表中播放该文件时会重复播放9999次(如果该文件太短,您可以更改此数值),或者直到您按下“下一首”。然后,播放列表将继续播放。

2019-09-27 16:27:48