文档章节

php ffmpeg 推流库 --ffmpeg-push

Cbping
 Cbping
发布于 2017/05/06 02:09
字数 476
阅读 218
收藏 4

项目地址:https://github.com/BPing/ffmpeg-push

首先

  • 安装ffmpeg,必须同时包含ffprobe命令
  • 配置可执行文件目录到环境变量PATH中

安装

composer require bping/ffmpeg-push

使用

首先

  • 安装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'));

// 推流
// 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 中。 默认值:ffmpeg

ffprobe.binaries:

ffprobe命令名称或者路径。如果想使用简单名称,记得把ffprobe加入环境变量PATH 中。 默认值:ffprobe

timeout:

命令执行的超时时长,单位(s).考虑到推流时长一般较长,所以默认值为一天

$pushCmd = PushVideo::create(Configuration::create(
    array(
    'ffmpeg.binaries'=>array('ffmpeg'),
    'ffprobe.binaries'=>array('ffprobe'),
    'timeout'=>10800,
    )
));

主要依赖

© 著作权归作者所有

Cbping
粉丝 3
博文 11
码字总数 5190
作品 0
广州
后端工程师
私信 提问
加载中

评论(2)

Cbping
Cbping 博主

引用来自“君莫问_”的评论

ffmpeg 如何监听到视频播放结束操作?
如果是推流结束的话,就是 $pushCmd->push(); 执行完成
君莫问_
君莫问_
ffmpeg 如何监听到视频播放结束操作?
最简单的基于FFmpeg的移动端例子:IOS 视频转码器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leixiaohua1020/article/details/47072673 ===================================================== 最简单的...

雷霄骅
2015/08/01
0
0
最简单的基于FFmpeg的移动端例子附件:Android 自带播放器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leixiaohua1020/article/details/47056733 ===================================================== 最简单的...

雷霄骅
2015/07/25
0
0
最简单的基于FFmpeg的移动端例子:IOS 推流器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leixiaohua1020/article/details/47072519 ===================================================== 最简单的...

雷霄骅
2015/07/29
0
0
最简单的基于FFmpeg的移动端例子:Android 推流器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leixiaohua1020/article/details/47056051 ===================================================== 最简单的...

雷霄骅
2015/07/25
0
0
最简单的基于FFmpeg的移动端例子:Android 视频解码器-单个库版

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leixiaohua1020/article/details/47011021 ===================================================== 最简单的...

雷霄骅
2015/07/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

WPS 开启宏功能

前言 最近安装了个人版的WPS2019,使用Excel的宏功能时候发现不能使用了,网上下载了几个安装包都是比较旧的,不能使用。 找了个VB7.1的安装包,安装完了,重启WPS宏功能就可以使用了。 安装...

sharelocked
45分钟前
2
0
ZStack实践汇 | 高效开发测试打造产品化私有云

作者:许佳珺 前言 随着越来越多的企业将云计算产品应用到基础设施及其核心业务中,如何提高和保证软件交付质量、减少软件开发迭代周期、加速软件发布频率成为所有云厂商面临的关键问题。 根...

ZStack社区版
52分钟前
3
0
IPv4如何转换为IPv6?

导读 ipv6已经逐渐在应用,现在已经有很多的运营商支持ipv6,前天我们也发布了如何让电脑使用ipv6地址?有很多朋友在问?ipv6有什么作用,它的表示方式是什么,今天我们来一起来详细了解下ipv...

问题终结者
今天
4
0
SpringBoot2.0高级案例(05):整合 Swagger2 ,构建接口管理界面

一、Swagger2简介 1、Swagger2优点 整合到Spring Boot中,构建强大RESTful API文档。省去接口文档管理工作,修改代码,自动更新,Swagger2也提供了强大的页面测试功能来调试RESTful API。 2、...

知了一笑
今天
6
0
关于观察者模式总结

观察者模式(发布订阅模式):在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖他的对象都会收到通知,并自动更新。 使用场景:当一个对象状态改变同时需要改变其他对象,且...

cherryboy
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部