Push video stream to live server with ffmpeg binary
composer require bping/ffmpeg-push dev-master
- Install ffmpeg,and must include the
ffprobe
command at the same time - Configure the executable directory to the environment variable PATH
- 安装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();
// Is Successful 是否成功
$pushinfo->isSuccessful()
//输出
$pushinfo->getOutput()
// Error output 错误输出
$pushinfo->getErrOutput()
// 执行返回码
$pushinfo->getExitCode()
// 目前推流时间,可以用中途断流重推起点时间
$pushinfo->getCurrentTime()
// More infomation: PushInfo类
PushInput::create()
->setStartTime(10)
->setInputVideo('test/test.mp4')
PushFormat::create()
->setVideoCodec(PushFormat::CODE_V_COPY)
->setAudioCodec(PushFormat::CODE_A_COPY)
->setAudioKiloBitrate(125)
->setVideoKiloBitrate(500)
->setAdditionalParamaters(
array(
'--preset',
'ultrafast',
' --tune',
'zerolatency',
)
);
PushOutput::create()->setPushUrl($pushUrl)
///** @var $ffprobe FFProbeCommand */
$ffprobe = FFProbeCommand::create();
var_dump($ffprobe->format('test/test.mp4'));
var_dump($ffprobe->stream('test/test.mp4'));
The name or path of
ffmpeg
command . If you want to use a simple name, remember to addffmpeg
to the environment variablePATH
. Default value:ffmpeg
ffmpeg命令名称或者路径。如果想使用简单名称,记得把ffmpeg加入环境变量
PATH
中。 默认值:ffmpeg
The name or path of
ffprobe
command . If you want to use a simple name, remember to addffprobe
to the environment variablePATH
. Default value:ffprobe
ffprobe命令名称或者路径。如果想使用简单名称,记得把ffprobe加入环境变量
PATH
中。 默认值:ffprobe
Overtime of command execution, unit (s). Considering that time of push stream is usually longer,the default value is one day .
命令执行的超时时长,单位(s).考虑到推流时长一般较长,所以默认值为一天
$pushCmd = PushVideo::create(Configuration::create(
array(
'ffmpeg.binaries'=>array('ffmpeg'),
'ffprobe.binaries'=>array('ffprobe'),
'timeout'=>10800,
)
));