Skip to content
View peaBerberian's full-sized avatar

Block or report peaBerberian

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Please don't include any personal information such as legal names or email addresses. Maximum 100 characters, markdown supported. This note will be visible to only you.
Report abuse

Contact GitHub support about this userโ€™s behavior. Learn more about reporting abuse.

Report abuse
peaBerberian/README.md

Hi there ๐Ÿ‘‹, I'm Paul Berberian

I'm a software developer mostly working on libraries for front-end web applications.

Right now, I'm the lead developer of the open-source RxPlayer project at Canal+, a featureful adaptive media player library targeted to media streaming companies. It implements the technical core building block of a streaming media player and can then be integrated into a separate player UI, which is generally directly developed by the various companies freely relying on the project.

My current languages of choice are: TypeScript, Javascript, Rust and Go.
I also like combining several of those languages on the web by relying on WebAssembly.

Besides the RxPlayer, I work on multiple other open-source projects: some big some very small and many of which are available here on GitHub. Among which (all of those listed projects are functional):

  • ๐Ÿ Wasp-hls: A WebAssembly-based, in-worker, HLS media player.
    This is an ambitious personal project where I attempt to use the latest API and technologies (MSE-In-Worker, WebAssembly) to construct an optimal adaptive media player: not blocked by main thread interactions, low-on-memory, performant, low-latency.
    This is still heavily in development. Most live and VoD contents can be played but there's still a lot of features to come!

  • ๐Ÿ“ˆ RxPaired: A lightweight remote debugger.
    I wrote it to simplify debugging sessions observing the RxPlayer's behavior. It works on any device with a very minimal performance imprint and is used daily by several teams at Canal+.

  • ๐Ÿ‘“ MSESpy and EMESpy, spying libraries used for reverse engineering what MSE and EME web APIs any webpage is calling, when, and with which parameters.
    Those tools were written to reverse engineer how other streaming actors' own players were behaving in different situations, in turn to improve our own. My team and I still use it for that same usage.

  • ๐Ÿ“น AISOBMFFWVDFBUTFAII: Basically an inspector of MP4 files (more technically, it tries to inspect all ISOBMFF-compatible formats).
    Written initially as a personal project to improve my understanding of the format, it is now actually used at my work by different teams to easily inspect those files.

  • ๐Ÿ‡ gif-renderer.rs: A gif decoder written in Rust.
    I wrote it to continue improving my Rust skills, it is finished and functional and is able to efficiently display all (87a and 89a) GIF files.

  • ๐Ÿ“„ str-html: A simple JS UI tool generating HTMLElement by relying on tagged template literals.
    This tool can be used as a fairly simple UI lib for JS applications, leading to very readable component code without having to bring e.g. JSX into the picture. I wrote this one as a nice spot for when whole UI frameworks like React were overkill yet using "vanilla" HTML API became unreadable.

  • ๐Ÿ•น keyboard9: A virtual keyboard allowing for much faster typing speeds than the usual implementation.
    The idea was to allow for fast text input when debugging devices with a remote controls or joypad interface (game consoles, set-top boxes, smart TVs...).

  • โŒจ๏ธ RKeyboard: A functional proof of concept to provide a new way to handle complex keyboard and/or remote control interactions.
    It was written while creating the initial skeleton of the next Canal+ front-end application for its set-top boxes. At its core, it creates a hierarchy of key handlers, a stack on which you can push and pop to respectively catch a key or let the parent catch it again.

  • ๐Ÿญ morora.js: A sister project to RKeyboard, morora.js is a small library which handle spatial navigation for devices without a mouse.
    This project was written like RKeyboard when working on proof of concepts for a new set-top-box's user interface, where no pointer/mouse is available. It allowed experimentations on which strategy to adopt for page navigation: closest selectable element first? What if the next elements are not aligned? What if multiple elements are at the same distance? etc.

  • ๐Ÿ–ผ๏ธ BIF-Inspector: A simple tool to parse and inspect BIF files, the archive file format used by most streaming actors for preview thumbnails (e.g. to preview video content before a seek in a media).
    This was initially written to help teams working with us to produce spec-compliant BIF files.

  • ๐Ÿ—’๏ธ quick-xml: A fork of the rust crate of the same name updated to handle temporary BufRead starvation (temporary Eof events).
    This was done for WebAssembly-related reasons, while we were doing Proof Of Concepts for heavily improving the RxPlayer performance on devices which needs it.

  • โฏ๏ธ player-inspector: Yet another reverse-engineering tool for media players on the web.
    This one notably allows, by using it as an userscript, to visually inspect in real time what is pushed on the lower-level video buffers of most websites with video streaming (YouTube, Netflix, Amazon Prime Video, Twitch, Canal+, Disney+ and so on...).

  • ๐Ÿ“– README: A simple (in a KISS way) documentation generator taking as input fully CommonMark-compatible Markdown files.

    The goal is to keep the original documentation files readability in a text-editor (as intended by the Markdown format) as well as on Github's interface, without any specific modification on them, while still providing a richer web version with minimal efforts, here by adding simple .docConfig.json JSON files alongside documentation files.

  • ๐Ÿ”‘ passgen: A very simple online client-side password generator.

  • ๐ŸŽฎ roguelike_test.rs: As its name subtly suggest, this is a very simple roguelike (following the Berlin interpretation of the genre) implementation in Rust.
    It was is written with the help of the tcod library to handle inputs, graphics and window management. Graphics are ASCII-based and minimal as they very often are in those traditional roguelikes, the main work being on the core logic and gameplay, here principally: procedural map generation, AI, field of view and interactions between objects.

  • ๐Ÿ Steve6502: A snake implementation done in 6502 assembly (used by the Atari 2600, the NES and the Commodore 64) with memory-mapped graphics.
    This was done by initially following the Easy 6502 tutorial and then improving on it such as creating different apple colors, bringing more or less points.

  • ๐Ÿ“ฆ ZipDown.js: A simple server allowing to easily download directories zipped on-the-fly through HTTP.
    I wrote it as a quick and simple personal project (the zipping logic itself is actually done by archiver, a npm module) to easily transfer a large number of files in a local network between devices with a browser.

  • ๐Ÿฆ€ isobmff-inspector.rs: A Rust re-implementation of the AISOBMFFWVDFBUTFAII tool (higher on the list).
    I wrote it to continue to learn Rust. It works as well as the other one, but is much less used due to not being web-based like the other.

  • โš™๏ธ booth-mult: A very simple and minimal implementation of the Booth's multiplication algorithm.
    This is a very small project in Rust, mainly done while learning the language.

  • ๐Ÿ“ directory-list.php: A very minimal PHP script to list files and directories in the current directory.
    This was written as a personal project to quickly allows loading files through HTTP from a server of mine.

  • ๐Ÿš€ wasm-game-of-life: A straightforward game of life implementation by using Rust and WebAssembly.
    I wrote it while beginning to experiment with WebAssembly, by following the wasm-game-of-life tutorial.

  • ๐Ÿฆ GoBanks: An expense manager API I wrote in Go.
    It is functional, but I honestly don't use it anymore due to it missing a lot of features when compared to what is freely available elsewhere.

  • ๐Ÿ—ž๏ธ GoFeeds: A simple RSS feed parser written in Go.
    Like GoBanks, I wrote it to improve my Go skills, and also like it, I don't use it much anymore because others invested much more time on better solutions ๐Ÿ˜

  • ๐Ÿ•ธ๏ธ peaberberian.github.io: A dead simple static site generator for my personal github page: https://peaberberian.github.io.
    The point was to spent the minimum maintenance time on it and avoid using JavaScript at all (quite peculiar for a front-end web developer like me!).

Pinned Loading

  1. canalplus/rx-player canalplus/rx-player Public

    DASH/Smooth HTML5 Video Player

    TypeScript 870 132

  2. wasp-hls wasp-hls Public

    WebAssembly-based (Rust) & in-worker HLS Media Player for the web

    TypeScript 139 4

  3. AISOBMFFWVDFBUTFAII AISOBMFFWVDFBUTFAII Public

    An ISOBMFF web parser/visualizer

    JavaScript 11 2

  4. player-debugging-tools player-debugging-tools Public

    Tools for debugging and reverse-engineering media players on the web

    JavaScript 3

  5. EMESpy.js EMESpy.js Public

    Report every EME API (for media DRMs) a webpage calls

    JavaScript 6 4

  6. gif-renderer.rs gif-renderer.rs Public

    GIF decoder in Rust. Written to improve my Rust and learn about those ubiquitous GIF files

    Rust