Push video stream to live server with ffmpeg binary
composer require bping/ffmpeg-push dev-master
ffprobe
.Установите ffmpeg, необходимо одновременно включить команду
ffprobe
. Настройте каталог исполняемых файлов в среде PATH.
require __DIR__ . '/trunk/vendor/autoload.php';
use FFMpegPush\PushFormat;
use FFMpegPush\PushInput;
use FFMpegPush\PushOutput;
use FFMpegPush\PushVideo;
///** @var $ffprobe FFProbeCommand */
//$ffprobe = FFProbeCommand::create();
//$var_dump($ffprobe->format('test.mp4'));
// Push Command 推流命令
// ffmpeg -re -i \"test/test.mp4\" -c:v copy -c:a copy -f flv rtmp://pili-publish.heliwebs.com
$pushUrl = 'rtmp://pili-publish.heliwebs.com';
$pushCmd = PushVideo::create();
// listening the progress of push flow 监听推流进度
$pushCmd->onProgress(function ($percent, $remaining, $rate) {
// var_dump(func_get_args());
echo "progress:$percent% remaining:$remaining(s) rate:$rate(kb/s)\n";
});
$pushCmd->setInput(
PushInput::create()
->setStartTime(0)
->setInputVideo('res/test.mp4')
)
->setFormat(
PushFormat::create()
->setVideoCodec(PushFormat::CODE_V_COPY)
)
->setOutput(
PushOutput::create()
->setPushUrl($pushUrl)
);
echo $pushCmd->getCommandLine();
// start to push
$pushCmd->push();
echo $pushCmd->getErrorOutput();
echo "\n";
echo "Exit Code: " . $pushCmd->getExitCode();
// Stop pushing, asynchronous calls are required 停止推流,需要异步调用
// $pushCmd->stop();
PushInfo
// Is Successful 是否成功
$pushinfo->isSuccessful()
//输出
$pushinfo->getOutput()
// Error output 错误输出
$pushinfo->getErrOutput()
// 执行返回码
$pushinfo->getExitCode()
// 目前推流时间,可以用中途断流重推起点时间
$pushinfo->getCurrentTime()
// More infomation: PushInfo类
PushInput
PushInput::create()
->setStartTime(10)
->setInputVideo('test/test.mp4')
PushFormat
PushFormat::create()
->setVideoCodec(PushFormat::CODE_V_COPY)
->setAudioCodec(PushFormat::CODE_A_COPY)
->setAudioKiloBitrate(125)
->setVideoKiloBitrate(500)
->setAdditionalParamaters(
array(
'--preset',
'ultrafast',
' --tune',
'zerolatency',
)
);
PushOutput
PushOutput::create()->setPushUrl($pushUrl)
///** @var $ffprobe FFProbeCommand */
$ffprobe = FFProbeCommand::create();
var_dump($ffprobe->format('test/test.mp4'));
var_dump($ffprobe->stream('test/test.mp4'));
ffmpeg.binaries
:Имя или путь к команде
ffmpeg
. Если вы хотите использовать простое имя, не забудьте добавитьffmpeg
в переменную средыPATH
. Значение по умолчанию:ffmpeg
Имя или путь команды
ffmpeg
. Если хотите использовать простое название, не забудьте поместитьffmpeg
в средуPATH
. По умолчанию:ffmpeg
ffprobe.binaries
:Имя или путь к команде
ffprobe
. Если вы хотите использовать простое имя, не забудьте добавитьffprobe
в переменную средыPATH
. Значение по умолчанию:ffprobe
Имя или путь команды
ffprobe
. Если хотите использовать простое название, не забудьте поместитьffprobe
в средуPATH
. По умолчанию:ffprobe
timeout
:Время ожидания выполнения команды, единица измерения (с). Учитывая, что время потоковой передачи обычно больше, значение по умолчанию составляет один день.
Время ожидания команды, единица (с). Поскольку время потоковой передачи обычно велико, значение по умолчанию — один день.
$pushCmd = PushVideo::create(Configuration::create(
array(
'ffmpeg.binaries'=>array('ffmpeg'),
'ffprobe.binaries'=>array('ffprobe'),
'timeout'=>10800,
)
));
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )