PHPackages                             escolalms/video - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Queues &amp; Workers](/categories/queues)
4. /
5. escolalms/video

ActivePackage[Queues &amp; Workers](/categories/queues)

escolalms/video
===============

Escola Headless LMS Video Processing

0.0.23(2y ago)011.6k↑148.3%12MITPHPPHP &gt;=7.4 | &gt;=8.0CI failing

Since Sep 16Pushed 2y ago1 watchersCompare

[ Source](https://github.com/EscolaLMS/Video)[ Packagist](https://packagist.org/packages/escolalms/video)[ RSS](/packages/escolalms-video/feed)WikiDiscussions main Synced today

READMEChangelog (10)Dependencies (8)Versions (25)Used By (2)

Video
=====

[](#video)

[![codecov](https://camo.githubusercontent.com/1e651cffc76a7615bfab6c52335ebed3f44bd33222e87eec8627ff28371a94b3/68747470733a2f2f636f6465636f762e696f2f67682f4573636f6c614c4d532f566964656f2f6272616e63682f6d61696e2f67726170682f62616467652e7376673f746f6b656e3d4f393146484e4b493652)](https://codecov.io/gh/EscolaLMS/Video)[![phpunit](https://github.com/EscolaLMS/Video/actions/workflows/test.yml/badge.svg)](https://github.com/EscolaLMS/Video/actions/workflows/test.yml)[![downloads](https://camo.githubusercontent.com/2c8cde1d193fc749f378144a9d31374b5edf72d004e7bf82f1b3479d185d5eec/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6573636f6c616c6d732f766964656f)](https://packagist.org/packages/escolalms/video)[![downloads](https://camo.githubusercontent.com/5a97cfafc12ce799e79dc2ea5eba20e95e21d764da1b96de2b53ca553f94b7b6/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6573636f6c616c6d732f766964656f)](https://packagist.org/packages/escolalms/video)[![downloads](https://camo.githubusercontent.com/bb0e5e91973f7297c74ea8c8b19f17bf990dede8b7ab294cfe277f12c1b71f78/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f6573636f6c616c6d732f766964656f)](https://packagist.org/packages/escolalms/video)

What does it do
---------------

[](#what-does-it-do)

Coverts TopicVideo into HLS stream.

Installing
----------

[](#installing)

- `composer require escolalms/video`

Requirements
------------

[](#requirements)

- `ffmpeg` must be installed
- Once `EscolaLms\TopicType\TopicTypeChanged` is dispatched job [ProccessVideo](src/Jobs/ProccessVideo.php) added to queue

Configuration
-------------

[](#configuration)

You can configure the quality and resolution of the processed video by setting values in `config.php` file under the `bitrates` key. The key takes arrays of values.

- `kiloBitrates` parameter is responsible for the video quality.
- `scale` parameter is responsible for video resolution, setting this parameter may cause video distortion.

You can also disable video processing or change the drive.

Example config:

```
return [
    'disk' => env('VIDEO_DISK', config('filesystems.default')),
    'enable' => env('VIDEO_PROCESSING_ENABLE', true),
    'bitrates' => [
        [
            'kiloBitrate' => 250, // video quality
            'scale' => '640:480' // This parameter changes the video resolution. You can omit this parameter.
        ],
        ...
    ]
];
```

Example
-------

[](#example)

This package extends API resources in `EscolaLms\TopicType` package.

- `\EscolaLms\TopicTypes\Http\Resources\TopicType\Client\VideoResource` - replaces value and url fields with hls values

```
{
  "id": 1,
  "value": "course/1/topic/1/video/hls.m3u8",
  "url": "https://escolalms.com/course/1/topic/1/video/hls.m3u8"
}
```

- `\EscolaLms\TopicTypes\Http\Resources\TopicType\Admin\VideoResource` - adds hls values

```
{
  "id": 1,
  "value": "course/1/topic/1/video/video.mp4",
  "url": "https://escolalms.com/course/1/topic/1/video/video.mp4",
  "hls": "course/1/topic/1/video/hls.m3u8",
  "hls_url": "https://escolalms.com/course/1/topic/1/video/hls.m3u8"
}
```

The processing status is saved in the json field in the `topics` table:

- Processing successful

```
{
  "ffmpeg": {
    "state": "finished",
      "path": "course/1/topic/1/video/hls.m3u8"
  }
}
```

- Processing failed

```
{
  "ffmpeg": {
    "state" : "error",
    "message" : "Unable to probe /path/video.mp4"
  }
}
```

Tests
-----

[](#tests)

Run `./vendor/bin/phpunit` to run tests. See [tests](tests) folder as it's quite good staring point as documentation appendix.

Test details [![codecov](https://camo.githubusercontent.com/1e651cffc76a7615bfab6c52335ebed3f44bd33222e87eec8627ff28371a94b3/68747470733a2f2f636f6465636f762e696f2f67682f4573636f6c614c4d532f566964656f2f6272616e63682f6d61696e2f67726170682f62616467652e7376673f746f6b656e3d4f393146484e4b493652)](https://codecov.io/gh/EscolaLMS/Video)[![phpunit](https://github.com/EscolaLMS/Video/actions/workflows/test.yml/badge.svg)](https://github.com/EscolaLMS/Video/actions/workflows/test.yml)

Events
------

[](#events)

1. `ProcessVideoStarted` - event dispatched after processing started
2. `ProcessVideoFailed` - event dispatched after processing failed

###  Health Score

32

—

LowBetter than 69% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity25

Limited adoption so far

Community21

Small or concentrated contributor base

Maturity56

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 57.1% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~40 days

Recently: every ~79 days

Total

23

Last Release

870d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/c857f3115c790c573d0617d7e9ba4011269ef7b9dfdb003dc4388846a62b14f7?d=identicon)[qunabu](/maintainers/qunabu)

---

Top Contributors

[![dyfero](https://avatars.githubusercontent.com/u/59400506?v=4)](https://github.com/dyfero "dyfero (16 commits)")[![qunabu](https://avatars.githubusercontent.com/u/214608?v=4)](https://github.com/qunabu "qunabu (6 commits)")[![mako321](https://avatars.githubusercontent.com/u/59456825?v=4)](https://github.com/mako321 "mako321 (5 commits)")[![pa-cholek](https://avatars.githubusercontent.com/u/5345420?v=4)](https://github.com/pa-cholek "pa-cholek (1 commits)")

---

Tags

api-restffmpeglaravelqueuevideo

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/escolalms-video/health.svg)

```
[![Health](https://phpackages.com/badges/escolalms-video/health.svg)](https://phpackages.com/packages/escolalms-video)
```

###  Alternatives

[statamic-rad-pack/runway

Eloquently manage your database models in Statamic.

135224.7k7](/packages/statamic-rad-pack-runway)[duncanmcclean/statamic-cargo

Comprehensive e-commerce addon for Statamic. Build bespoke e-commerce sites without the complexity.

3416.7k](/packages/duncanmcclean-statamic-cargo)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
