paint-brush
Using ReactPHP to Stream Mediaby@kornatzky
1,421 reads
1,421 reads

Using ReactPHP to Stream Media

by Yoram KornatzkyAugust 10th, 2022
Read on Terminal Reader
Read this story w/o Javascript
tldt arrow

Too Long; Didn't Read

A design for a streaming media server using ReactPHP and Laravel. ReactPHP to do the file streaming. Laravel for the web interface for video upload and selection.

Company Mentioned

Mention Thumbnail
featured image - Using ReactPHP to Stream Media
Yoram Kornatzky HackerNoon profile picture

What's Up with ReactPHP

When I first heard of ReactPHP a few years ago, it looked very promising. Providing timers, asynchronous processing, streams, and sockets, all within PHP.


However, in recent years, there seems to be stagnation. While you see commits, you seldom see any publication.


Framework X is an attempt to make ReactPHP into a micro framework, but I see little mention of it.


Overall, whenever I tried using ReactPHP, I found that it is better to use Laravel and its rich ecosystem.

Streaming with ReactPHP

Building Video Streaming Server with ReactPHP was a nice approach to building a streaming server with ReactPHP, which I could not see how to do as simple in Laravel.


A recent article Streaming ReactPHP in ReactJS revived the topic and showed how you integrate with React.


This got me thinking about how far you can go with ReactPHP in terms of streaming.

A Media Server Design

A media server has three components:


  1. Streaming of media files

  2. Web interface to select files, login users, and control playback.

  3. A backend to manage files and users


While ReactPHP is very good for the streaming part, web application programming with ReactPHP is not common and lacks an ecosystem of build tools and libraries.


This is especially apparent if you want to build a dynamic modern interface, as you do nowadays with a Single Page Application (SPA).


So it would seem natural to wrap the ReactPHP in a Laravel application. Laravel is well suited for managing files, including file upload, and has built-in user management.


The web interface will be built by either some SPA framework such as React or Vue, or alternatively, Laravel Livewire with AlpineJS.

Uploading and Storing Video Files

Laravel Media Library associates media, such as video files, to your models.


The library integrates FFMpeg through the PHP-FFMPEG so that you can create thumbnails of videos. Moreover, using PHP-FFMPEG, you can do all common transcoding of videos.

Validating Video Files

Standard Laravel validation rules handle video file size and type.


However, a media server needs a more targeted validation of videos, such as duration, codec, and dimensions.


Laravel Audio & Video Validator supplies these extra validations based on FFMpeg.


Possibly, we would need to fork and extend their code to support additional validations, such as frame rate and bitrate.


Also published here.