4.2. 编写vls.cfg

以下是对您可以在以下文件中找到的所有部分的解释vls.cfg :

4.2.1. "Vls" 节

本节包含应用程序范围的设置。

LogFile = "name"

VLS 日志文件的名称。如果留空 "",则不进行文件日志记录。默认值为 "vls.log"。

SystemLog = "[disable|enable]"

记录到系统日志。目前,仅实现了使用 syslogd 的 SystemLog:使用 ./configure --enable-syslog 编译。

Caution

如果 VLS 以 vlsd 启动,则以下配置是强制性的

BEGIN "Vls"
  LogFile   = ""
  SystemLog = "enabled"
  ScreenLog = "disabled"
END
ScreenLog = "[disable|enable]"

记录到控制台。

示例

BEGIN "Vls"
  LogFile   = "vls.log"
  SystemLog = "disable"
  ScreenLog = "enable"
END

4.2.2. "Groups" 节

在本节中,您可以定义一些用户组,以及这些用户被允许执行的命令。对于您要定义的每个组,您必须添加格式如下的一行

groupname = "command1|command2|..."

这添加了一个名为 "groupname" 的组,该组的用户被允许执行 command1、command2 等命令。目前,可用的命令有:help、browse、start、suspend、resume、forward、rewind、stop、shutdown、logout。

示例

BEGIN "Groups"
  monitor = "help|browse|logout"
  master  = "help|browse|start|resume|suspend|forward|rewind|stop|shutdown|logout"
END

4.2.3. "Users" 节

本节包含允许通过管理界面控制 VLS 的用户列表。对于每个用户,添加格式如下的一行

username = "password:groupname"

这添加了一个用户 "username",他属于组 "groupname"(在 "Groups" 节中定义),并且可以使用密码 "password" 登录。

Unix/Linux 示例

BEGIN "Users"
  monitor = "3BcKWoiQn0vi6:monitor"       # password is 'monitor'
  admin   = "42BKiCguFAL/c:master"        # password is 'Vir4Gv5S'
END

4.2.4. "Telnet" 节

在本节中,您可以配置 telnet 管理界面。

LocalPort = "port"

定义 telnet 服务器将使用的端口。默认端口为 "9999"。

Domain = "domain"

可以是 "inet4" 或 "inet6"(默认为 "inet4")。如果您想使用 IPv4 地址,请放置 "inet4",如果您想使用 IPv6,请放置 "inet6"。

LocalAddress = "IP address"

定义 telnet 服务器将监听请求的 IP 地址。默认地址为 "0.0.0.0"(或 IPv6 的 "0::0")。

示例

BEGIN "Telnet"
  LocalPort = "9999"
END

4.2.5. "NativeAdmin" 节

与 "Telnet" 相同的语法。尚未使用。

4.2.6. "Inputs" 节

在本节中,您可以定义要使用的输入。对于您需要的每个输入,添加格式如下的一行

InputName = "Type"

这添加了一个名为 "InputName" 的输入,其类型为 "Type"。如前所述,有几种输入类型

每个输入都必须在其自己的节中配置(请参阅下一段)。

示例

BEGIN "Inputs"
  local1 = "local"
  pvr    = "video"
  dvb1   = "dvb"
  tuner  = "v4l"
END

4.2.7. 输入配置

对于在 "Inputs" 节中声明的每个输入,除了 "local" 输入之外,您都必须添加一个与相应输入名称相同的节。例如,如果您声明了一个输入 "pvr",则应该也有一个名为 "pvr" 的节。此类节的语法取决于相应输入的类型。

要配置本地输入,您不必执行任何操作。除非必须使用另一种特技播放策略

BEGIN "Local1"
  ProgramCount = "1"
  TrickPlay    = "normal"
END

"Local1" 是您要配置的本地输入的名称。"ProgramCount" 是分配给此输入的节目数量。"TrickPlay" 是此输入使用的特技播放策略(默认为 "normal")。

要配置视频输入,请添加格式如下的节

BEGIN "VideoInputName"
  Device = "device"
  Type   = "type"
END

"VideoInputName" 是您要配置的视频输入的名称。"Device" 是您要从中读取的 MPEG 编码卡的路径(默认为 "/dev/video")。"Type" 可以是 "Mpeg2-PS" 或 "Mpeg2-TS",具体取决于您的设备配置(默认为 "Mpeg2-PS")。

Hauppauge WinTV-PVR-250 卡示例

BEGIN "pvr"
  Device = "/dev/video0"
  Type   = "Mpeg2-PS"
END

要配置 dvb 输入,请添加格式如下的节

BEGIN "DvbInputName"
  DeviceNumber = "devicenumber"
  SendMethod   = "0"
END

"DvbInputName" 是您要配置的 dvb 输入的名称。如果您要流式传输完整的 DVB 流,请将 "SendMethod" 设置为 "0",如果您只想流式传输 MPEG 音频和视频流,请将其设置为 "1"(默认为 "0")。"DeviceNumber" 是您要从中读取的 DVB 设备的编号(从/dev/ost/dvr<devicenumber>读取,默认为 "")。dvb 配置文件由驱动程序定义。您可以在$HOME/.dvbrc中找到它,用于 /dev/dvb/adapter0,或在$HOME/.dvbrc.X中找到它,用于/dev/dvb/adapterX .

示例

BEGIN "dvb1"
  DeviceNumber = "0"
  TrickPlay = "normal"
END

4.2.8. "Channels" 节

在本节中,您可以定义要使用的频道(输出)。对于每个频道,编写格式如下的一行

ChannelName = "Type"

这添加了一个名为 "ChannelName" 的频道,其类型为 "Type"。"Type" 必须是 "network" 或 "file"。与输入一样,频道必须在其自己的节中配置。

示例

BEGIN "Channels"
  localhost  = "network"
  client1    = "network"
  client2    = "network"
  multicast1 = "network"
  multicast2 = "network"
  localfile  = "file"
END

4.2.9. 频道配置

对于在 "Channels" 节中声明的每个频道,您都必须添加一个与相应频道名称相同的节。此类节的语法取决于相应频道的类型。

要配置网络频道,请添加格式如下的节

BEGIN "NetChannelName"
  Domain    = "Domain"
  Type      = "Type"
  SrcHost   = "SourceHost"
  SrcPort   = "SourcePort"
  DstHost   = "DestHost"
  DstPort   = "DestPort"
  TTL       = "ttl"
  Interface = "Interface"
END

Note

"SrcHost" 和 "SrcPort" 是可选的(如果您不设置它们,VLS 将不会“绑定”套接字)。

要配置文件频道,请添加格式如下的节

BEGIN "FileChannelName"
  FileName = "file"
  Append   = "append"
END

"FileChannelName" 是您要配置的文件频道的名称。"file" 是将存储流的文件名(默认为 "fileout.ts")。"append" 可以是 "yes" 或 "no",指示 VLS 是将流附加到文件末尾还是重写文件。

示例

BEGIN "localhost"         # The client is on the same host as the server
  DstHost = "localhost"
  DstPort = "1234"
END

BEGIN "client1"           # unicast towards client1
  DstHost = "192.168.1.2"
  DstPort = "1234"
END

BEGIN "client2"           # unicast towards client2 in IPv6
  Domain  = "inet6"
  DstHost = "3ffe:ffff::2:12:42"
  DstPort = "1234"
END

BEGIN "multicast1"         # multicast streaming
  Type    = "multicast"
  DstHost = "239.2.12.42"
  DstPort = "1234"
  TTL     = "2"
END

BEGIN "multicast2"         # multicast streaming in IPv6
  Domain  = "inet6"
  Type    = "multicast"
  DstHost = "ff08::1"
  DstPort = "1234"
  TTL     = "12"
END

BEGIN "localfile"         # file output
  FileName = "stream.ts"
  Append   = "no"
END

Caution

如果您使用 Windows,则应指定 "SrcHost" 和 "SrcPort" 字段。例如

BEGIN "client1"         # The client is on the same host as the server
  SrcHost = "192.168.1.1"  # IP of VLS
  SrcPort = "1242"         # Source port : the value is not important
  DstHost = "192.168.1.2"  # IP of the client
  DstPort = "1234"
END

4.2.10. 节目配置

如前所述,您必须定义节目。每个节目都是一个 MPEG 流(例如,一个文件)。为此,您必须在您的文件中添加一个 "Input" 节vls.cfg。每个 "Input" 节必须具有以下语法

BEGIN "Input"
  FilesPath    = "path"
  ProgramCount = "count"
END

"path" 是您的 MPEG 文件所在的路径(默认情况下为当前目录)。"count" 是定义的节目数量(默认为 "0")。

对于您要定义的每个节目,您必须添加格式如下的节

BEGIN "number"
  Name     = "name"
  Type     = "type"
  FileName = "file"
  Device   = "device"
END

Note

VLS 可以流式传输满足以下两个标准的 MPEG 文件

  • 该文件必须是 MPEG PS(节目流)或 MPEG TS(传输流),其中包含复用的视频和音频。VLS 无法流式传输 MPEG ES(基本流),即仅包含音频或视频的文件。

    为了知道 MPEG 文件是 MPEG PS、MPEG TS 还是 MPEG ES,请使用 VLC 读取该文件并查看消息(在菜单中选择查看 / 消息,或使用命令行 vlc -vvv)。

    • 如果您看到一行

      [00000107] main module debug: using demux module "ts_dvbpsi"
      

      这意味着该文件是 MPEG TS。

    • 如果您看到一行

      [00000109] main module debug: using demux module "ps"
      

      这意味着该文件是 MPEG PS。

    • 如果您看到一行

      [00000109] main module debug: using demux module "es"
      

      这意味着该文件是 MPEG ES,VLS 无法流式传输它。

  • 视频的序列标头必须定期重复自身,这在 MPEG-2 中通常是这种情况,但在 MPEG-1 中非常罕见。没有简单的方法知道序列标头是否定期重复。扩展名为 .vob 的文件通常是 MPEG-2 文件,扩展名为 .mpg.mpeg 的文件通常是 MPEG-1 文件。

您可以下载此可流式传输的 MPEG-2 PS 文件进行测试:presentation_short.vob

Note

为了播放 DVD,您需要使用 DVD 支持编译 VLS,这会使用 libdvdread 和 libdvdcss。您将需要对 DVD 设备具有读取写入访问权限。

完整示例

BEGIN "Input"
  FilesPath = "/home/videolan/streams"
  ProgramCount = "4"
END

BEGIN "1"     # MPEG2 stream stored in /home/videolan/streams/Dolby.vob
  Name     = "dolby"
  FileName = "Dolby.vob"
  Type     = "Mpeg2-PS"
END

BEGIN "2"     # another file
  Name     = "canyon"
  FileName = "Dolby_Canyon.vob"
  Type     = "Mpeg2-PS"
END

BEGIN "3"     # DVD
  Name     = "dvd"
  Device   = "/dev/cdrom"
  Type     = "Dvd"
END

BEGIN "4"     # DVD stored on a hard disk
  Name     = "matrix"
  Device   = "/mnt/data/matrix/VIDEO_TS"
  Type     = "Dvd"
END