添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
use Illuminate\Bus\Queueable; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\File; use Illuminate\Queue\SerializesModels; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; class ProcessM3U8 implements ShouldQueue use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; public $input; // 定义原始视频文件路径; public $output; // 定义转码视频文件路径; public $timeout = 3600; // 定义操作延迟时间,单位:秒; public $tries = 5; // 定义队列重试次数; public $memory = 1024; // 定义队列所占最大内存限制; public $threads = 2; // 定义队列所占最大线程数; public $section = 60; // 定义视频切片大小,单位:秒; public $progress = 0; // 当前转码进度; * Create a new job instance. * ProcessM3U8 constructor. * @param string $input * @param string $output public function __construct(string $input,string $output) $this->input = $input; $this->output = $output; * Execute the job. * @note The Handle need composer package as php-ffmpeg by command "composer require php-ffmpeg/php-ffmpeg" * @afterChange "php artisan queue:restart & php artisan queue:work --queue=video" public function handle() Log::channel('video')->info('执行转换:'.public_path().$this->output); ini_set('memory_limit',$this->memory.'M'); $ffmpeg = FFMpeg\FFMpeg::create([ 'ffmpeg.binaries' => exec('which ffmpeg'), 'ffprobe.binaries' => exec('which ffprobe'), 'timeout' => $this->timeout, 'ffmpeg.threads' => $this->threads, $video = $ffmpeg->open(public_path().$this->input); $format = new FFMpeg\Format\Video\X264('aac', 'libx264'); $format ->setAdditionalParameters(['-hls_time',$this->section, '-hls_list_size',0,'-strict','-2', '-f','hls']) ->setKiloBitrate(1000) ->setAudioChannels(2) ->setAudioKiloBitrate(256) ->setPasses(2); $format->on('progress', function ($video, $format, $percentage) { if ($percentage > $this->progress){ Log::channel('video')->info('转换进度:'.$percentage.'%'); $this->progress = $percentage; $directory = pathinfo(public_path().$this->output)['dirname']; File::isDirectory($directory) or File::makeDirectory($directory); try { $video->save($format, public_path().$this->output); } catch (\Exception $e) { Log::channel('video')->error('错误:'.$e->getMessage()); } finally { $this->result = $this->output; Log::channel('video')->info('转换成功:'.public_path().$this->output);

转码参数由setAdditionalParameters 方法写入

之前采用exec 可以直接执行 但是无法看到任务进度,所以引入第三方扩展

$this->output 为定义的输出文件名,这里指定的是m3u8格式

先安装php拓展https://github.com/PHP-FFMpeg/PHP-FFMpeg/<?phpnamespace App\Jobs;use FFMpeg;use Illuminate\Bus\Queueable;use Illuminate\Support\Facades\Log;use Illuminate\Support\Facades\File;...
FFmpeg 是一个自由软件,可以运行音频和视频多种格式的录影、转换、流功能,包含了 libavcodec ─这是一个用于多个项目中音频和视频的解码器库,以及 libavformat—— 一个音频与视频格式转换库。 这个项目最初是由 Fabrice Bellard 发起的,而现在是由 Michael Niedermayer 在进行维护。许多 FFmpeg 的开发者同时也是 MPlayer 项目的成员, FFmpeg 在 MPlayer 项目中是被设计为服务器版本进行开发。
快速安装的脚本 wget https://raw.githubusercontent.com/q3aql/ ffmpeg -install/master/ ffmpeg -install chmod a+x ffmpeg -install ./ ffmpeg -install --install release 安装 laravel - ffmpeg 执行composer命令 composer require pbmedia/ laravel - ffmpeg 修改config/app.php添加配置
关于HLS和m3u8格式的介绍有很多,这里单纯只看 ffmpeg 转码 生成的m3u8的文件。 Laravel 中如何使用 ffmpeg 转码 。 下面是 ffmpeg 转码 生成的单码率和多码率的文件列表 一共生成了三种类型的文件 name.m3u8 Master Playlist主列表,单码率和多码率主要区别就要这个文件,多码率对比单码率多了两个不同码率的Media Playlist video_single_bitrate.m3u8 单码率 #EXTM3U #EXT-X-STREAM-INF:BANDWIDTH=10
FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。 多媒体视频处理工具 FFmpeg 有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。 .exe下载 Download FFmpeg for Windows 地址:https:// ffmpeg .zeranoe.com/builds/ 下载好后放... $form = new Form(new Video()); $form->text('video_title', __('Video title')); // uniqueName(随机生成一个文件名) move(放入的文件夹) $form->file('video_url', __('Video url'))
php执行 ffmpeg 命令对mp4文件转换并生成m3u8视频流文件的方法使用m3u8视频流的好处先将视频转换成视频ts文件将ts视频文件分割成视频流文件ts,并生成索引文件m3u8 使用m3u8视频流的好处 生成m3u8视频流,如果没有做视频流文件,播放视频的时候,一个大视频直接加载,会增加服务器巨大压力,并且视频太大加载慢,显示视频也慢,都不利于观看。那么视频流的好处是,将大视频分成一小段一小段的ts分片,播放时选择专门的播放器,播放m3u8索引文件来读取分片。而且当播放器根据m3u8索引文件播放视频时,
由于楼主公司生产的设备性能不足,在进行播放高质量的MP4视频或者其他格式的视频时,会导致设备黑屏。所以必须由后端来解决视频 转码 的问题。通过搜索,可以通过 FFmpeg 来实现视频压缩的功能。当实现视频压缩功能的时候,又出现了一个问题,那就是每次上传视频时,单个视频处理很快,多个视频同时上传时就会出现同时启动多个 FFmpeg 进程,导致cpu性能被沾满如图所示 可以看出 多个进程同时启动会导致服务器性能急剧下降,为了解决这个问题,可以通过Redis来实现一个队列功能。当我们每次上传一个文件时把文件信息存储到一个列
我叫什么呢?: 不用纠结这个,这只有公钥;你重装两台虚拟机;先不做ssh免密登录;a直接登录b;a的.ssh/目录下只有一个known_hosts文件;文件内会有b返回的公钥key;a后续再登录;b返回公钥key;这两次对比;不一致就会报错、只要删除旧的。a在登陆b;b返回公钥key,写入a的known_hosts文件。 用ssh-keygen命令生成才会有公私钥文件的。