【问题标题】:Enqueue multiple playlist items from file in vlc using a batch file使用批处理文件将多个播放列表项从 vlc 中的文件排入队列
【发布时间】:2013-09-09 17:45:20
【问题描述】:

我们有以下场景:

我们希望将 (24h) 视频从 (VideoLan) VLC 流式传输到平板电脑、Android、BB 和其他设备。 VLC 播放列表的第二天的项目应该每天通过一个 .conf 文件排队一次或两次,该文件只包含文件的路径,例如:

  "C:\Users\Max\Videos\dog.mp4"
  "http://www.myserver.tv/mobile/video/cat.mp4"
  ...

现在我想从这个文件中读取所有行并将它们添加到流服务器的播放列表中。我可以使用以下命令将单个文件添加到一个 VLC 实例的播放列表中:

  vlc --started-from-file --playlist-enqueue "C:\Users\Max\Videos\dog.mp4"

我写了一个小批处理文件:

@echo off 
cls 
setlocal
FOR /F "tokens=*" %%i IN (playlist.conf) DO vlc --started-from-file --playlist-enqueue --no-playlist-autostart %%i ^ 
     :sout=#transcode{soverlay,ab=64,samplerate=44100,channels=2,acodec=mp4a,vcodec=h264,width=480,height=320,fps=25,vb=400,venc=x264{vbv-bufsize=10000, partitions=all,level=12,no-cabac,subme=7, threads=4, ref=2,mixed-refs=1,bframes=0,min-keyint=1,keyint=50,trellis=2, direct=auto, qcomp=0.0,qpmax=51}}:gather:rtp{mp4a-latm,sdp=rtsp://192.168.1.228:1234/stream.sdp}

现在我的问题是批处理文件不是简单地执行所有行并将它们排入队列,而是等待视频完成并等到我关闭 VLC-Player 直到它再现下一个视频。 基本上它就像this problem 另一个用户想要在 Linux 服务器上解决。可以找到 VLC 命令行命令的文档 here => 搜索 --playlist-enqueue

我想知道这是 --one-instance-when-started-from-file 的问题,但由于此选项默认启用,我认为它缺少其他内容。

我还将批处理文件更改为仅启动 VLC 并执行单个命令,就像我在上面的命令行中所做的那样,但它不起作用!它仍然开始播放第一个视频并等待它完成并关闭 VLC 实例,直到它打开一个新实例并播放配置文件中的下一个视频。

如果您有完全其他的想法,我也很感激。


12.09.13 - 11:28: 好吧,看来是同步和异步如何调用的问题了。 我在here 的 php 中找到了一个小代码部分来调用一个脚本,该脚本应该将我的视频添加到播放列表中,显然是异步的:

 for ($i=0; $i<count($convert); $i++){
      system('php -f "C:\xampp\htdocs\playlist\playlist_2.php" args '.urlencode($convert[$i]).'"');
 }

“convert”是一个数组,其中包含我上面播放列表文件中的名称。

  1. php 调用另一个文件 (playlist_2.php)
  2. VLC 打开了但是
  3. 最初调用的 php 文件 (playlist.php) 仍然等待 VLC 关闭,直到它继续循环并调用 playlist_2.php 并打开另一个 VLC 实例。 (不良行为)

所以我的效果和以前一样。有什么想法吗?

【问题讨论】:

  • 如果需要立即开始,为什么要使用--no-playlist-autostart
  • 我忘了说我也试过了。 --no-playlist-autostart 只是导致 VLC 打开并等待,直到您播放文件,完成并关闭 VLC 后,它会打开一个新实例并再现下一个视频。所以这没有帮助。

标签: php batch-file cmd vlc playlist


【解决方案1】:

我使用这样的命令来转码和关闭 VLC

start "" /w /min "c:\Program Files\videolan\vlc\vlc.exe" "%%~nxa" --sout #transcode{acodec=mp3,ab=192,channels=2}:std{access=file,mux=raw,dst=temp~.mp3} vlc://quit

您可能想尝试将其添加到命令行的末尾。

vlc://quit

【讨论】:

  • 但是这不是在添加文件时多次打开关闭vlc吗?完美的是:Open VLC or find the open instance of VLC - Enqueue 1..n files from another file - Done 无需退出或任何假设我们的流在 24/7 运行
【解决方案2】:

我现在就让它工作!经过几次尝试。 VLC 的空格和引号很无聊!

通常我们的文件名都有空格,我的做法是使用file:///,把%20之前的所有空格都转换一下。

我的列表也是一个由 \n 加入的数组,因为 find 应用程序给了我们... ;)

 m=`find /my/music/dir/ -iname *$1*.mp3`
 m=`echo "$m" | sed -r 's/\ /%20/g'`
 m=`echo "$m" | tr '\n' '~'`
 m=${m::-1} #takes last one \n off, because in my case it existed
 m=`echo "$m" | sed -r 's/\~/ file:\/\/\//g'`
 m="file:///$m"
 vlc $m &
 disown

然后瞧

【讨论】:

    猜你喜欢
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    • 2013-12-16
    • 2011-07-08
    • 1970-01-01
    相关资源
    最近更新 更多