我们有以下情况:
我们希望将(24小时)视频从(VideoLan)VLC流式传输到平板电脑,Android,BB和其他设备。VLC schould播放列表第二天的项目每天通过一个.conf文件排队一次或两次,该文件仅包含文件的路径,例如:
"C:'Users'Max'Videos'dog.mp4"
"http://www.myserver.tv/mobile/video/cat.mp4"
...
现在我想从这个文件中读取所有行并将它们添加到流媒体服务器的播放列表中。我可以使用以下 comando 将单个文件添加到 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 Comand Line comandos 的文档可以在这里找到 => 搜索 --playlist-enqueue
我想知道这是一个 --一个实例何时从文件启动的问题,但由于此选项默认启用,我认为它缺少其他东西。
我还更改了我的批处理文件以启动 VLC 并执行单个 comandos,就像我在上面的 comand 行中所做的那样,但它不起作用!它仍然开始播放第一个视频,并等待完成并且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]).'"');
}
"转换"是一个数组,用于保存我上面的播放列表文件中的名称。
- PHP 调用另一个文件 (playlist_2.php)
- VLC 开放但
- 最初调用的PHP文件(播放列表.php)仍在等待VLC关闭,直到它继续循环并调用playlist_2.php并打开VLC的另一个实例。(不良行为)
所以我的效果和以前一样。有什么想法吗?
我使用这样的命令来转码并关闭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 对空格和引号非常无聊!
通常我们的文件名有空格,我的方法是使用 file:///并在 %20 之前转换所有空格。
我的列表也是一个由'连接的数组,因为查找应用程序给了我们... ;)
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
瞧