如何使用ffmpeg截取直播流到本地

2023-08-28  本文已影响0人  简书是什么书

我主要目的是把萤石云的直播流或者回放视频截取到自己的云服务器,或者传到七牛云去存储,因为萤石云的云存储太贵了!

1. 安装ffmpeg工具

centos安装ffmpeg,先安装需要用到的东西:

yum -y install openssl openssl-devel

yum -y install yasm

# 下载ffmpeg
wget https://ffmpeg.org/releases/ffmpeg-6.0.tar.xz

# 解压
tar -xvf ffmpeg-6.0.tar.xz

# cd进入解压后的目录
cd ffmpeg-6.0

# 开启openssl配置
./configure --enable-openssl --prefix=/www/server/ffmpeg

# 编译并安装
make && make install

# 装好后添加环境变量
vim /etc/profile
将以下内容写在profile的最后方:
export PATH=$PATH:/www/server/ffmpeg/bin
esc + :wq 保存退出
source /etc/profile  设置立即生效

# 测试是否成功
ffmpeg -version

# 视频流保存到本地
ffmpeg -i 'rtmp://rtmp01open.ys7.com:1935/v3/openpb' -codec copy test.mp4

2. PHP使用ffmpeg

PHP有个扩展可以很方便的使用ffmpeg,名字就叫 php-ffmpeg,github的地址是 https://github.com/PHP-FFMpeg/PHP-FFMpeg,目前没有看到有中文文档,官方推荐你看源码。

composer require php-ffmpeg/php-ffmpeg

安装完之后可以用 composer show -i 看看你的php-ffmpeg是什么版本,或者查看 compose.json 文件,或者在安装的时候指定一下版本号。PHP8以下,需要用0.x版本的!

查看 php-ffmpeg 版本

我的装完之后,直接使用\FFMpeg\FFMpeg::create()报错了,找不到相关命令(可能没有装在默认目录的原因),所以我手动指定了ffmpeg的命令所在目录。

<?php
$ffmpeg = \FFMpeg\FFMpeg::create([
    'ffmpeg.binaries'  => '/www/server/ffmpeg/bin/ffmpeg',
    'ffprobe.binaries' => '/www/server/ffmpeg/bin/ffprobe',
    'timeout'          => 3600, // The timeout for the underlying process
    'ffmpeg.threads'   => 12,   // The number of threads that FFMpeg should use
]);
//打开远程文件流
$video = $ffmpeg->open('rtmp://rtmp01open.ys7.com:1935/v3/openpb/BA275_1_1?begin=20230822225702&end=20230822225802&expire=1693376103&id=616636943872524288&rec=local&t=9c6f0cd453e448f400d7c3e5f0e86bfbfebfe01f2e4ed5ce8b910ff062becf72&ev=100');
//保存到本地
$res = $video->save(new \FFMpeg\Format\Video\X264(), './export.mp4');
dump($res);
exit;

另外对源码有些小小的改动,大家根据报错信息去尝试着使用吧!


视频已经下载下来了
上一篇 下一篇

猜你喜欢

热点阅读