如何使 rtmpdump 接受从文件中获取的 url // setlocal 和 endlocal 对批处理变量的影响 -
Posted
技术标签:
【中文标题】如何使 rtmpdump 接受从文件中获取的 url // setlocal 和 endlocal 对批处理变量的影响 -【英文标题】:How to make rtmpdump accept an url taken from a file // setlocal's and endlocal's effects on batch variables - 【发布时间】:2014-11-16 18:53:29 【问题描述】:@echo off
setlocal EnableDelayedExpansion
wget --output-document=Content.xml Link
for /f "tokens=1" %%a in ('find "1280x720" Content.xml') do set found=%%a
set Url=!found:~5,-6!
for /f "delims=" %%a in (""!Url!"") do endlocal & set "Url=%%~a"
set Filename=Whatever.mp4
:start
rtmpdump -r %Url% -e -b 60000000 -o C:\Users\User\Desktop\%Filename%
if ERRORLEVEL 2 goto start
if exist Content.xml del Content.xml
wget 正常工作。
相关行已正确存储在 Url 变量中。
rtmpdump 不起作用。
Id est,而不是显示 mp4 的数据(如 INFO:) 并开始下载,它说“开始下载 0.000kB”(预期)并保持在那里直到超时(预期)。一段时间后,出现“错误:RTMP_ReadPacket,未能读取 RTMP 数据包头”。然后,根据 :start 循环,它会一次又一次地执行相同的操作(或直到停止)。
@echo off
set Url=rtmpe://Stuff.mp4
set Filename=Whatever.mp4
:start
rtmpdump -r %Url% -e -b 60000000 -o C:\Users\User\Desktop\%Filename%
if ERRORLEVEL 2 goto start
这(手动输入 rtmpe 行,从 Content.xml 文件中读取后)有效。
Link、User、Stuff 等显然是我认为与当前问题无关的数据的占位符。
值得注意的是:在第一个文件中手动设置 Url 仍然会导致错误,除非在 endlocal 语句之后 完成。
我认为问题可能在于“本地”变量的存储方式,但我不知道。
那么,谁能解释一下这里发生了什么以及如何解决它?
【问题讨论】:
【参考方案1】:我看不出有任何理由在您的批处理文件中为此任务使用延迟的环境变量扩展。
@echo off
wget.exe --output-document=Content.xml Link
for /f "tokens=1" %%a in ('%SystemRoot%\System32\find.exe "1280x720" Content.xml') do set found=%%a
set "Url=%found:~5,-6%"
set "Filename=Whatever.mp4"
set "LoopCount=0"
:Loop
rtmpdump.exe -r %Url% -e -b 60000000 -o "%USERPROFILE%\Desktop\%Filename%"
if not errorlevel 2 goto EndBatch
set /A "LoopCount+=1"
if not "%LoopCount%"=="3" goto Loop
:EndBatch
if exist Content.xml del Content.xml
【讨论】:
好的,这行得通。我添加了延迟扩展,因为 set Url=%found:~5,-6% 行不适合我,而且我没有想过尝试使用引号作为修复。如果延迟扩展是必要的,知道如何进行这项工作会很有趣,但我会接受这个答案是正确的,因为它解决了我的问题。谢谢。以上是关于如何使 rtmpdump 接受从文件中获取的 url // setlocal 和 endlocal 对批处理变量的影响 -的主要内容,如果未能解决你的问题,请参考以下文章