├── Makefile ├── README.md ├── luasrc ├── controller │ └── msd_lite.lua ├── model │ └── cbi │ │ └── msd_lite.lua └── view │ └── msd_lite │ └── msd_lite_status.htm ├── po └── zh-cn │ └── msd_lite.po └── root └── etc └── uci-defaults └── 40_luci-msd_lite /Makefile: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (C) 2008-2022 The LuCI Team 3 | # 4 | # This is free software, licensed under the Apache License, Version 2.0. 5 | # 6 | # Converted by ximitech 7 | 8 | include $(TOPDIR)/rules.mk 9 | 10 | PKG_VERSION:=20221214 11 | PKG_RELEASE:=1 12 | 13 | LUCI_TITLE:=LuCI support for Multi Stream Daemon Lite 14 | LUCI_DEPENDS:=+msd_lite +luci-compat 15 | LUCI_PKGARCH:=all 16 | 17 | include $(TOPDIR)/feeds/luci/luci.mk 18 | 19 | # call BuildPackage - OpenWrt buildroot signature -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # msd_lite's lua luci app, use it with msd_lite package from ImmortalWrt. -------------------------------------------------------------------------------- /luasrc/controller/msd_lite.lua: -------------------------------------------------------------------------------- 1 | 2 | module("luci.controller.msd_lite", package.seeall) 3 | 4 | function index() 5 | if not nixio.fs.access("/etc/config/msd_lite") then 6 | return 7 | end 8 | 9 | local page 10 | page = entry({"admin", "services", "msd_lite"}, cbi("msd_lite"), _("MultiSD_Lite"), 60) 11 | page.dependent = true 12 | page = entry({"admin", "services", "msd_lite", "status"}, call("act_status")) 13 | page.leaf = true 14 | end 15 | 16 | local function is_running() 17 | return luci.sys.call("pidof msd_lite >/dev/null") == 0 18 | end 19 | 20 | function act_status() 21 | local e = {} 22 | e.running = is_running() 23 | luci.http.prepare_content("application/json") 24 | luci.http.write_json(e) 25 | end 26 | -------------------------------------------------------------------------------- /luasrc/model/cbi/msd_lite.lua: -------------------------------------------------------------------------------- 1 | require ("nixio.fs") 2 | require ("luci.sys") 3 | require ("luci.http") 4 | require ("luci.dispatcher") 5 | require "luci.model.uci".cursor() 6 | 7 | m = Map("msd_lite") 8 | m.title = translate("Multi Stream daemon Lite") 9 | m.description = translate("The lightweight version of Multi Stream daemon (msd) Program for organizing IP TV streaming on the network via HTTP.") 10 | 11 | m:section(SimpleSection).template = "msd_lite/msd_lite_status" 12 | 13 | s = m:section(TypedSection, "instance") 14 | s.addremove = true 15 | s.anonymous = false 16 | s.addbtntitle = translate("Add instance") 17 | 18 | o = s:option(Flag, "enabled", translate("Enable")) 19 | o.default = o.disabled 20 | o.rmempty = false 21 | 22 | o = s:option(DynamicList, "address", translate("Bind address")) 23 | o.datatype = "list(ipaddrport(1))" 24 | o.rmempty = false 25 | 26 | o = s:option(ListValue, "network", translate("Source interface")) 27 | local x = luci.model.uci.cursor() 28 | local net = x:get_all("network") 29 | for interface, config in pairs(net) do 30 | if interface ~= "loopback" and config.proto ~= nil then 31 | o:value(interface) 32 | end 33 | end 34 | o:value("", translate("Disable")) 35 | o.default = "" 36 | o.description = translate("For multicast receive.") 37 | 38 | o = s:option(Value, "threads", translate("Worker threads")) 39 | o.datatype = "uinteger" 40 | o.default = "0" 41 | o.description = translate("0 = auto.") 42 | 43 | o = s:option(Flag, "bind_to_cpu", translate("Bind threads to CPUs")) 44 | o.default = o.disabled 45 | 46 | o = s:option(Flag, "drop_slow_clients", translate("Disconnect slow clients")) 47 | o.default = o.disabled 48 | 49 | o = s:option(Value, "precache_size", translate("Pre cache size")) 50 | o.datatype = "uinteger" 51 | o.default = "4096" 52 | 53 | o = s:option(Value, "ring_buffer_size", translate("Ring buffer size")) 54 | o.datatype = "uinteger" 55 | o.default = "1024" 56 | o.description = translate("Stream receive ring buffer size.") 57 | 58 | o = s:option(Value, "multicast_recv_buffer_size", translate("Receive buffer size")) 59 | o.datatype = "uinteger" 60 | o.default = "512" 61 | o.description = translate("Multicast receive socket buffer size.") 62 | 63 | o = s:option(Value, "multicast_recv_timeout", translate("Receive timeout")) 64 | o.datatype = "uinteger" 65 | o.default = "2" 66 | o.description = translate("Multicast receive timeout.") 67 | 68 | o = s:option(Value, "rejoin_time", translate("IGMP/MLD rejoin time")) 69 | o.datatype = "uinteger" 70 | o.default = "0" 71 | o.description = translate("Do IGMP/MLD leave+join every X seconds. Leave 0 to disable.") 72 | 73 | return m 74 | -------------------------------------------------------------------------------- /luasrc/view/msd_lite/msd_lite_status.htm: -------------------------------------------------------------------------------- 1 | 19 | 20 |
-------------------------------------------------------------------------------- /po/zh-cn/msd_lite.po: -------------------------------------------------------------------------------- 1 | 2 | msgid "NOT RUNNING" 3 | msgstr "未运行" 4 | 5 | msgid "RUNNING" 6 | msgstr "运行中" 7 | 8 | msgid "MultiSD_Lite" 9 | msgstr "MultiSD_Lite" 10 | 11 | msgid "Multi Stream daemon Lite" 12 | msgstr "组播转换 Lite" 13 | 14 | msgid "The lightweight version of Multi Stream daemon (msd) Program for organizing IP TV streaming on the network via HTTP." 15 | msgstr "Multi Stream daemon (msd) 程序的轻量级版本,用于通过 HTTP 管理网络上的 IP TV 流。" 16 | 17 | msgid "Add instance" 18 | msgstr "添加实例" 19 | 20 | msgid "Enable" 21 | msgstr "启用" 22 | 23 | msgid "Bind address" 24 | msgstr "绑定地址" 25 | 26 | msgid "Source interface" 27 | msgstr "源接口" 28 | 29 | msgid "For multicast receive." 30 | msgstr "用于接收组播流。" 31 | 32 | msgid "Worker threads" 33 | msgstr "工作线程" 34 | 35 | msgid "0 = auto." 36 | msgstr "保留为 0 以自动检测。" 37 | 38 | msgid "Bind threads to CPUs" 39 | msgstr "绑定线程到 CPU" 40 | 41 | msgid "Disconnect slow clients" 42 | msgstr "断开慢速客户端" 43 | 44 | msgid "Pre cache size" 45 | msgstr "预缓存大小" 46 | 47 | msgid "Ring buffer size" 48 | msgstr "环形缓冲区大小" 49 | 50 | msgid "Stream receive ring buffer size." 51 | msgstr "流接收环形缓冲区大小。" 52 | 53 | msgid "Receive buffer size" 54 | msgstr "接收缓冲区大小" 55 | 56 | msgid "Multicast receive socket buffer size." 57 | msgstr "组播接收套接字缓冲区大小。" 58 | 59 | msgid "Receive timeout" 60 | msgstr "接收超时" 61 | 62 | msgid "Multicast receive timeout." 63 | msgstr "组播接收超时。" 64 | 65 | msgid "Do IGMP/MLD leave+join every X seconds. Leave 0 to disable." 66 | msgstr "每隔 X 秒执行 IGMP/MLD 退出重进。设置为 0 以禁用。" 67 | 68 | msgid "IGMP/MLD rejoin time" 69 | msgstr "IGMP/MLD 重新加入时间" 70 | -------------------------------------------------------------------------------- /root/etc/uci-defaults/40_luci-msd_lite: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # needed for "Save and Apply" to restart msd_lite 4 | uci -q batch <<-EOF >/dev/null 5 | delete ucitrack.@msd_lite[-1] 6 | add ucitrack msd_lite 7 | set ucitrack.@msd_lite[-1].init=msd_lite 8 | commit ucitrack 9 | EOF 10 | 11 | rm -f /tmp/luci-indexcache 12 | exit 0 13 | --------------------------------------------------------------------------------