项目地址:https://github.com/BPing/ffmpeg-pushphp
ffprobe
命令composer require bping/ffmpeg-push
ffprobe
命令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')); // 推流 // 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(); // 监听推流进度 $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(); // 开始推流 $pushCmd->push(); echo $pushCmd->getErrorOutput(); echo "\n"; echo "Exit Code: " . $pushCmd->getExitCode(); // 中止推流,须要异步调用 // $pushCmd->stop();
PushInfo
//是否成功 $pushinfo->isSuccessful() //输出 $pushinfo->getOutput() //错误输出 $pushinfo->getErrOutput() //执行返回码 $pushinfo->getExitCode() //目前推流时间,能够用中途断流重推起点时间 $pushinfo->getCurrentTime() //更多请看 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
中。 默认值:ffmpeghtml
ffprobe.binaries
:ffprobe命令名称或者路径。若是想使用简单名称,记得把ffprobe加入环境变量
PATH
中。 默认值:ffprobegit
timeout
:命令执行的超时时长,单位(s).考虑到推流时长通常较长,因此默认值为一天github
$pushCmd = PushVideo::create(Configuration::create( array( 'ffmpeg.binaries'=>array('ffmpeg'), 'ffprobe.binaries'=>array('ffprobe'), 'timeout'=>10800, ) ));