- Notifications
You must be signed in to change notification settings - Fork16
Push video stream to live server with ffmpeg binary
License
NotificationsYou must be signed in to change notification settings
BPing/ffmpeg-push
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Push video stream to live server with ffmpeg binary
composer require bping/ffmpeg-push dev-master
- Installffmpeg,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';useFFMpegPush\PushFormat;useFFMpegPush\PushInput;useFFMpegPush\PushOutput;useFFMpegPush\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, )));