From 5984f942961da461fa0638c0c259f9740743369b Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 20 Sep 2024 17:21:38 +0200 Subject: [PATCH 1/9] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 16c685fb..d63a7d4f 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@
- + +

Simplify the complexities of video delivery

+

From 3e1ee2034c817ad44d5ae0d81e6c385e21eae911 Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 20 Sep 2024 17:21:54 +0200 Subject: [PATCH 2/9] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d63a7d4f..f0e2e925 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@

-

Simplify the complexities of video delivery

+

A friendly API to simplify the complexities of video delivery

From 1de58c6b6d25bb252261b22796f50ecdfb0b243e Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 20 Sep 2024 17:22:13 +0200 Subject: [PATCH 3/9] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f0e2e925..c2a80d6c 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@

-

A friendly API to simplify the complexities of video delivery

+

A friendly API to simplify the complexities of video online

From 5b2f1c652aba8ee070afa26e69f63cae3cf17d43 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 22 Sep 2024 09:56:33 +0200 Subject: [PATCH 4/9] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c2a80d6c..b4d225ac 100644 --- a/README.md +++ b/README.md @@ -28,8 +28,9 @@ We intentionally keep the scope limited. We choose to focus on a single playback - Scale `ffmpeg` jobs horizontally, at up to 80% cost reduction on [EC2 Spot Instances](https://aws.amazon.com/ec2/spot/). - Dynamically stitch HLS playlists togetherexperimental, like a Netflix bumper, with [HLS interstitials](https://developer.apple.com/streaming/GettingStartedWithHLSInterstitials.pdf). - Parses a `vmap`, transcodes and packages the ad media files and inserts interstitials, on the fly. +- Ships with a `HLS.js` wrapper that simplifies working with interstitials and a React UI. -Mixwave has a basic video player built on top of HLS.js. Although know that HLS interstitials support is a [pending feature](https://github.com/video-dev/hls.js/issues/5730), we included a build for you to work with and a wrapper with basic state management. +https://github.com/user-attachments/assets/019427cb-ef95-4a5e-980c-dd0dcaac176e ## Getting Started From 142ad0ea9f109cc28644854f9cf5c19acdf1adb9 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 22 Sep 2024 10:38:21 +0200 Subject: [PATCH 5/9] Update README.md --- README.md | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index b4d225ac..11e8de1b 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,8 @@

-

A friendly API to simplify the complexities of video online

+

Mixwave

+

From video processing to playback in a matter of minutes

@@ -18,10 +19,7 @@ [Buy me a coffee button](https://www.buymeacoffee.com/matvp91)

- -Mixwave is a self hostable platform that aims to simplify the complexities of video delivery. Transcode and package your media for online streaming with simple API calls and sane defaults. Craft dynamic HLS playlists on the fly. - -We intentionally keep the scope limited. We choose to focus on a single playback protocol `HLS CMAF` rather than trying to support a wide range of options such as MPEG-DASH. End to end video is complex enough already. We'd rather pick a well defined stack and aim for perfection. +Mixwave is a self hostable platform that aims to simplify the complexities of video delivery. Transcode and package your media for online streaming with simple API calls and sane defaults, or craft dynamic HLS playlists on the fly with bumpers, ads and filters. - Transcode your video file into separate quality tracks (eg; 1080p, 720p, 480p). - Write `HLS CMAF` playlists directly to S3, ready to be played by [HLS.js](https://github.com/video-dev/hls.js). @@ -30,7 +28,17 @@ We intentionally keep the scope limited. We choose to focus on a single playback - Parses a `vmap`, transcodes and packages the ad media files and inserts interstitials, on the fly. - Ships with a `HLS.js` wrapper that simplifies working with interstitials and a React UI. -https://github.com/user-attachments/assets/019427cb-ef95-4a5e-980c-dd0dcaac176e +## Demo + +https://github.com/user-attachments/assets/035cd10e-53b4-4b0f-99cd-79c76c26e0b0 + +This video contains recordings from the dashboard, a simple, unified, way to interact with the API, view transcode and package jobs with their statuses, or toy around with the player devtools. + +## ❔ Reasoning + +Video is quite fragmented, particularly in the way video content is delivered and protected across different platforms and devices. Think [MPEG-DASH vs. HLS](https://www.gumlet.com/learn/hls-vs-dash/), CTR vs. CBCS, [SSAI vs. CSAI](https://clearcode.cc/blog/client-side-server-side-ad-insertion/). Besides, there's also a lot of cool things happening behind closed doors, like [SGAI](https://docs.aws.amazon.com/mediatailor/latest/ug/server-guided.html). We aim to avoid fragmentation by picking the right tools for the job. If you don't have to do the same thing multiple times, aiming for perfection is a lot easier. We believe `HLS CMAF` is the right way forward, and when playlist manipulation is required, we tend to lean towards `HLS Interstitials`. There's obviously going to be roadblocks ahead, think of devices not supporting multiple video elements or partially serving encrypted fragments opposed to plain ads. We'll tackle these once we get there. + +There's a lot of video tooling out there, think of ffmpeg, bento4, shaka-packager, but not in a unified manner. Mixwave implements the excellent work done by others, and tries to make it approachable in the form of a simple API with a strong focus on scalability. ## Getting Started From f84f4ca64ecd430ca5bd96e18bfb5e9c4873b5a3 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 22 Sep 2024 10:42:40 +0200 Subject: [PATCH 6/9] Update README.md --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 11e8de1b..af83b6a9 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,12 @@ https://github.com/user-attachments/assets/035cd10e-53b4-4b0f-99cd-79c76c26e0b0 This video contains recordings from the dashboard, a simple, unified, way to interact with the API, view transcode and package jobs with their statuses, or toy around with the player devtools. +Very briefly, the video demonstrates the following: + +- Transcodes and packages a BigBuckBunny mp4 source into HLS, in multiple qualities (1080p, 720p, 480p). +- Creates a playback session that uses a previously transcoded and packaged bumper mp4 source, and adds it at an interstitial at position `0`. +- Uses a Google [IMA sample](https://developers.google.com/interactive-media-ads/docs/sdks/html5/client-side/tags) to serve two ads, one preroll and a midroll at position `15`. + ## ❔ Reasoning Video is quite fragmented, particularly in the way video content is delivered and protected across different platforms and devices. Think [MPEG-DASH vs. HLS](https://www.gumlet.com/learn/hls-vs-dash/), CTR vs. CBCS, [SSAI vs. CSAI](https://clearcode.cc/blog/client-side-server-side-ad-insertion/). Besides, there's also a lot of cool things happening behind closed doors, like [SGAI](https://docs.aws.amazon.com/mediatailor/latest/ug/server-guided.html). We aim to avoid fragmentation by picking the right tools for the job. If you don't have to do the same thing multiple times, aiming for perfection is a lot easier. We believe `HLS CMAF` is the right way forward, and when playlist manipulation is required, we tend to lean towards `HLS Interstitials`. There's obviously going to be roadblocks ahead, think of devices not supporting multiple video elements or partially serving encrypted fragments opposed to plain ads. We'll tackle these once we get there. From a0ae9af57497963203ffbaae49b7586a43b2625f Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 22 Sep 2024 10:46:10 +0200 Subject: [PATCH 7/9] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index af83b6a9..3710eb7b 100644 --- a/README.md +++ b/README.md @@ -40,12 +40,14 @@ Very briefly, the video demonstrates the following: - Creates a playback session that uses a previously transcoded and packaged bumper mp4 source, and adds it at an interstitial at position `0`. - Uses a Google [IMA sample](https://developers.google.com/interactive-media-ads/docs/sdks/html5/client-side/tags) to serve two ads, one preroll and a midroll at position `15`. -## ❔ Reasoning +## Why? Video is quite fragmented, particularly in the way video content is delivered and protected across different platforms and devices. Think [MPEG-DASH vs. HLS](https://www.gumlet.com/learn/hls-vs-dash/), CTR vs. CBCS, [SSAI vs. CSAI](https://clearcode.cc/blog/client-side-server-side-ad-insertion/). Besides, there's also a lot of cool things happening behind closed doors, like [SGAI](https://docs.aws.amazon.com/mediatailor/latest/ug/server-guided.html). We aim to avoid fragmentation by picking the right tools for the job. If you don't have to do the same thing multiple times, aiming for perfection is a lot easier. We believe `HLS CMAF` is the right way forward, and when playlist manipulation is required, we tend to lean towards `HLS Interstitials`. There's obviously going to be roadblocks ahead, think of devices not supporting multiple video elements or partially serving encrypted fragments opposed to plain ads. We'll tackle these once we get there. There's a lot of video tooling out there, think of ffmpeg, bento4, shaka-packager, but not in a unified manner. Mixwave implements the excellent work done by others, and tries to make it approachable in the form of a simple API with a strong focus on scalability. +Video from source to consumer is a hard task to get right, [howvideo.works](https://howvideo.works/) is a great resource to get you started. Beware, you might get hooked on how interesting video is! ;-) + ## Getting Started ```shell From d87294dc46f8c322f1b4abc33eb5a41ba2865caa Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 22 Sep 2024 10:48:13 +0200 Subject: [PATCH 8/9] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3710eb7b..7521724a 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ Very briefly, the video demonstrates the following: Video is quite fragmented, particularly in the way video content is delivered and protected across different platforms and devices. Think [MPEG-DASH vs. HLS](https://www.gumlet.com/learn/hls-vs-dash/), CTR vs. CBCS, [SSAI vs. CSAI](https://clearcode.cc/blog/client-side-server-side-ad-insertion/). Besides, there's also a lot of cool things happening behind closed doors, like [SGAI](https://docs.aws.amazon.com/mediatailor/latest/ug/server-guided.html). We aim to avoid fragmentation by picking the right tools for the job. If you don't have to do the same thing multiple times, aiming for perfection is a lot easier. We believe `HLS CMAF` is the right way forward, and when playlist manipulation is required, we tend to lean towards `HLS Interstitials`. There's obviously going to be roadblocks ahead, think of devices not supporting multiple video elements or partially serving encrypted fragments opposed to plain ads. We'll tackle these once we get there. -There's a lot of video tooling out there, think of ffmpeg, bento4, shaka-packager, but not in a unified manner. Mixwave implements the excellent work done by others, and tries to make it approachable in the form of a simple API with a strong focus on scalability. +There's a lot of video tooling out there, think of ffmpeg, bento4, shaka-packager, but not in a unified manner. Mixwave implements the excellent work done by others, and tries to make it approachable in the form of an API with a strong focus on scalability and ease of use. The latter is quiet challenging, you'd only have to look at how complex ffmpeg gets when you tip into the details. Video from source to consumer is a hard task to get right, [howvideo.works](https://howvideo.works/) is a great resource to get you started. Beware, you might get hooked on how interesting video is! ;-) From 6ae88f419f6ba330dde500e76c50c09c3f26f369 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 22 Sep 2024 11:28:56 +0200 Subject: [PATCH 9/9] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7521724a..ce41e107 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ Very briefly, the video demonstrates the following: ## Why? -Video is quite fragmented, particularly in the way video content is delivered and protected across different platforms and devices. Think [MPEG-DASH vs. HLS](https://www.gumlet.com/learn/hls-vs-dash/), CTR vs. CBCS, [SSAI vs. CSAI](https://clearcode.cc/blog/client-side-server-side-ad-insertion/). Besides, there's also a lot of cool things happening behind closed doors, like [SGAI](https://docs.aws.amazon.com/mediatailor/latest/ug/server-guided.html). We aim to avoid fragmentation by picking the right tools for the job. If you don't have to do the same thing multiple times, aiming for perfection is a lot easier. We believe `HLS CMAF` is the right way forward, and when playlist manipulation is required, we tend to lean towards `HLS Interstitials`. There's obviously going to be roadblocks ahead, think of devices not supporting multiple video elements or partially serving encrypted fragments opposed to plain ads. We'll tackle these once we get there. +Video is quite fragmented, particularly in the way video content is delivered and protected across different platforms and devices. Think [MPEG-DASH vs. HLS](https://www.gumlet.com/learn/hls-vs-dash/), CTR vs. CBCS, [SSAI vs. CSAI](https://clearcode.cc/blog/client-side-server-side-ad-insertion/). Besides, there's also a lot of cool things happening behind closed doors, like SGAI with [AWS EMT](https://docs.aws.amazon.com/mediatailor/latest/ug/server-guided.html) or [Disney+](https://medium.com/disney-streaming/using-sgai-to-deliver-and-play-ads-with-flexibility-and-scale-b5c18aeb7bca). We aim to avoid fragmentation by picking the right tools for the job. If you don't have to do the same thing multiple times, aiming for perfection is a lot easier. We believe `HLS CMAF` is the right way forward, and when playlist manipulation is required, we tend to lean towards `HLS Interstitials`. There's obviously going to be roadblocks ahead, think of devices not supporting multiple video elements or partially serving encrypted fragments opposed to plain ads. We'll tackle these once we get there. There's a lot of video tooling out there, think of ffmpeg, bento4, shaka-packager, but not in a unified manner. Mixwave implements the excellent work done by others, and tries to make it approachable in the form of an API with a strong focus on scalability and ease of use. The latter is quiet challenging, you'd only have to look at how complex ffmpeg gets when you tip into the details.