В прошлом я несколько раз использовал функцию exec() для сбора информации из исполняемых файлов командной строки и намеревался сделать это снова с помощью RTMPDump.exe. PHP-код выглядит следующим образом и работает с любыми другими примерами командной строки, которые я использовал в прошлом, но в этом случае ничего не дает $output:
$cmd = 'c:\rtmpdump\rtmpdump -r "rtmp://fms.domain.com/live/live_800"';
exec($cmd, $output);
foreach ($output as $item){
// do something with this $item
}
Я попробовал это, поместив командную строку Windows в файл .bat и запустив ее, в которой ase $output содержит только то, что было отражено в файле bat, но не вывод, показанный ниже, что и получается, когда я запустите команду вручную из командной строки.
C:\rtmpdump>rtmpdump -r "rtmp://fms.domain.com/live/live_800"
RTMPDump v2.3
(c) 2010 Andrej Stepanchuk, Howard Chu, The Flvstreamer Team; license: GPL
Connecting ...
INFO: Connected...
ERROR: rtmp server sent error
Starting Live Stream
For duration: 2.000 sec
INFO: Metadata:
INFO: author
INFO: copyright
INFO: description
INFO: keywords
INFO: rating
INFO: title
INFO: presetname Custom
INFO: creationdate Tue May 08 03:00:23 2012
INFO: videodevice Osprey-440 Video Device 1B
INFO: framerate 25.00
INFO: width 480.00
INFO: height 360.00
INFO: videocodecid avc1
INFO: videodatarate 800.00
INFO: avclevel 30.00
INFO: avcprofile 66.00
INFO: videokeyframe_frequency10.00
INFO: audiodevice Osprey-440 Audio Device 1B
INFO: audiosamplerate 22050.00
INFO: audiochannels 1.00
INFO: audioinputvolume 75.00
INFO: audiocodecid mp4a
INFO: audiodatarate 48.00
#######
Download complete
C:\rtmpdump>rtmpdump
Программа запускается, это не проблема, есть выходной файл, который показывает дамп видеоданных, так что синтаксис исполняемого файла не проблема - вопрос в том, есть ли другой способ перехватить то, что rtmpdump.exe выводит на командное окно, которое НЕ захватывается при запуске его из PHP через exec().
И если это имеет значение, мне интересно использовать «INFO:...». Я пытаюсь определить, идет ли потоковое видео в реальном времени или нет. Сервер работает, но мне нужно знать, транслируется ли конкретный поток (live_800) или нет.
exec
не захватывает, вероятно, он выводится в stderr, а не в stdout. Полагаю, вам придется использоватьproc_open
. - person John Flatness   schedule 09.05.2012c:\rtmpdump\rtmpdump -r "rtmp://fms.domain.com/live/live_800" > out.txt
в командной строке и посмотреть, были ли строки INFO отображены на терминале или захвачены в текстовом файле? - person Salman A   schedule 09.05.2012