我们有以下场景:
我们希望将 (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 直到它再现下一个视频。基本上就像另一个用户想要在 Linux 服务器上解决的问题一样。VLC Command Line comandos 的文档可以在这里找到=> 搜索 --playlist-enqueue
我想知道这是 --one-instance-when-started-from-file 的问题,但是由于默认情况下启用了此选项,因此我认为缺少其他内容。
我还将批处理文件更改为仅启动 VLC 并执行单个命令,就像我在上面的命令行中所做的那样,但它不起作用!它仍然开始播放第一个视频并等待它完成并且 VLC 的实例关闭,直到它打开一个新实例并播放配置文件中的下一个视频。
如果您有完全其他的想法,我也很欣赏它们。
12.09.13 - 11:28:好吧,看来是同步和异步调用如何的问题了。我从这里找到了 php 中的一个小代码部分来调用一个脚本,该脚本应该将我的视频添加到播放列表中,显然是异步的:
for ($i=0; $i<count($convert); $i++){
system('php -f "C:\xampp\htdocs\playlist\playlist_2.php" args '.urlencode($convert[$i]).'"');
}
“convert”是一个数组,其中包含我上面的播放列表文件中的名称。
- php调用另一个文件(playlist_2.php)
- VLC 打开但
- 最初调用的 php 文件 (playlist.php) 仍然等待 VLC 关闭,直到它继续循环并调用 playlist_2.php 并打开另一个 VLC 实例。(不受欢迎的行为)
所以我的效果和以前一样。有任何想法吗?