mirror of
https://github.com/hzrd149/blossom.git
synced 2026-02-04 02:26:11 +00:00
Compare commits
3 Commits
4f0a47ff0b
...
398d303852
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
398d303852 | ||
|
|
bf76b16fd9 | ||
|
|
6426ce273c |
@@ -1,6 +1,6 @@
|
|||||||
# HLS Video Formatting
|
# HLS Video Formatting
|
||||||
|
|
||||||
This document explains how to format [HLS](https://datatracker.ietf.org/doc/html/rfc8216) (HTTP Live Streaming) videos to be compatible with [BUD-01](./01.md) blob retrieval.
|
This document explains how to format [HLS](https://datatracker.ietf.org/doc/html/rfc8216) (HTTP Live Streaming) videos to be compatible with [BUD-01](../buds/01.md) blob retrieval.
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
@@ -9,7 +9,7 @@ HLS videos consist of multiple files:
|
|||||||
- Variant playlists (`.m3u8`) that reference media segments
|
- Variant playlists (`.m3u8`) that reference media segments
|
||||||
- Media segment files (typically `.ts` files)
|
- Media segment files (typically `.ts` files)
|
||||||
|
|
||||||
Each file MUST be uploaded as a separate blob and referenced by its SHA256 hash using the [BUD-01](./01.md#get-sha256---get-blob) `GET /<sha256>` endpoint format.
|
Each file MUST be uploaded as a separate blob and referenced by its SHA256 hash using the [BUD-01](../buds/01.md#get-sha256---get-blob) `GET /<sha256>` endpoint format.
|
||||||
|
|
||||||
## Relative Paths
|
## Relative Paths
|
||||||
|
|
||||||
@@ -58,7 +58,7 @@ cd2a98d055eef5ec3aca73bd136a40340539138da73144d589d9de5a3a52149a.ts
|
|||||||
|
|
||||||
## Media Segments
|
## Media Segments
|
||||||
|
|
||||||
Media segment files (typically `.ts` files) MUST be uploaded as separate blobs. Each segment MUST be retrievable via the [BUD-01](./01.md#get-sha256---get-blob) `GET /<sha256>` endpoint.
|
Media segment files (typically `.ts` files) MUST be uploaded as separate blobs. Each segment MUST be retrievable via the [BUD-01](../buds/01.md#get-sha256---get-blob) `GET /<sha256>` endpoint.
|
||||||
|
|
||||||
The server SHOULD set the `Content-Type` header appropriately:
|
The server SHOULD set the `Content-Type` header appropriately:
|
||||||
- `.ts` files: `video/mp2t` or `video/MP2T`
|
- `.ts` files: `video/mp2t` or `video/MP2T`
|
||||||
@@ -68,7 +68,7 @@ The server SHOULD set the `Content-Type` header appropriately:
|
|||||||
|
|
||||||
When generating HLS playlists for Blossom:
|
When generating HLS playlists for Blossom:
|
||||||
|
|
||||||
1. Upload each media segment as a separate blob using [BUD-02](./02.md#put-upload---upload-blob) `PUT /upload`
|
1. Upload each media segment as a separate blob using [BUD-02](../buds/02.md#put-upload---upload-blob) `PUT /upload`
|
||||||
2. Upload each variant playlist as a separate blob
|
2. Upload each variant playlist as a separate blob
|
||||||
3. Upload the master playlist as a separate blob
|
3. Upload the master playlist as a separate blob
|
||||||
4. In all playlists, use relative paths containing only the SHA256 hash (and optional file extension) of the referenced blob
|
4. In all playlists, use relative paths containing only the SHA256 hash (and optional file extension) of the referenced blob
|
||||||
@@ -88,8 +88,8 @@ Example client flow:
|
|||||||
When serving HLS playlists, servers MUST:
|
When serving HLS playlists, servers MUST:
|
||||||
|
|
||||||
1. Return the playlist content with the appropriate `Content-Type` header (`application/vnd.apple.mpegurl` or `application/x-mpegURL`)
|
1. Return the playlist content with the appropriate `Content-Type` header (`application/vnd.apple.mpegurl` or `application/x-mpegURL`)
|
||||||
2. Serve playlists via the [BUD-01](./01.md#get-sha256---get-blob) `GET /<sha256>` endpoint
|
2. Serve playlists via the [BUD-01](../buds/01.md#get-sha256---get-blob) `GET /<sha256>` endpoint
|
||||||
3. Support optional file extensions (e.g., `/<sha256>.m3u8`) as specified in [BUD-01](./01.md#get-sha256---get-blob)
|
3. Support optional file extensions (e.g., `/<sha256>.m3u8`) as specified in [BUD-01](../buds/01.md#get-sha256---get-blob)
|
||||||
|
|
||||||
When a client requests a playlist blob, the server MUST return the playlist content as-is, without modifying relative paths. The client is responsible for resolving relative paths to absolute URLs using the current server's base URL.
|
When a client requests a playlist blob, the server MUST return the playlist content as-is, without modifying relative paths. The client is responsible for resolving relative paths to absolute URLs using the current server's base URL.
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ If an implementation needs to add access control, it SHOULD restrict access base
|
|||||||
|
|
||||||
## Blob Retrieval
|
## Blob Retrieval
|
||||||
|
|
||||||
The server MUST implement the `GET /<sha256>` and `HEAD /<sha256>` endpoints as defined in [BUD-01](./01.md#get-sha256---get-blob):
|
The server MUST implement the `GET /<sha256>` and `HEAD /<sha256>` endpoints as defined in [BUD-01](../buds/01.md#get-sha256---get-blob):
|
||||||
|
|
||||||
1. The server MUST accept optional file extensions in the URL (e.g., `/<sha256>.pdf`)
|
1. The server MUST accept optional file extensions in the URL (e.g., `/<sha256>.pdf`)
|
||||||
2. The server MUST set appropriate `Content-Type` headers or default to `application/octet-stream`
|
2. The server MUST set appropriate `Content-Type` headers or default to `application/octet-stream`
|
||||||
@@ -60,7 +60,7 @@ When the server receives a request with proxy hints and the blob is not in the l
|
|||||||
|
|
||||||
1. The server SHOULD attempt to retrieve the blob from the servers specified in the `xs` parameters
|
1. The server SHOULD attempt to retrieve the blob from the servers specified in the `xs` parameters
|
||||||
2. If `xs` hints fail, the server MAY attempt to retrieve the blob using the `as` parameters by:
|
2. If `xs` hints fail, the server MAY attempt to retrieve the blob using the `as` parameters by:
|
||||||
- Fetching the author's [BUD-03](./03.md) server list (`kind:10063`)
|
- Fetching the author's [BUD-03](../buds/03.md) server list (`kind:10063`)
|
||||||
- Attempting to retrieve the blob from servers in the author's list
|
- Attempting to retrieve the blob from servers in the author's list
|
||||||
3. If the blob is successfully retrieved, the server SHOULD:
|
3. If the blob is successfully retrieved, the server SHOULD:
|
||||||
- Cache the blob locally for future requests
|
- Cache the blob locally for future requests
|
||||||
@@ -71,7 +71,7 @@ This proxy functionality allows the local cache server to act as a transparent p
|
|||||||
|
|
||||||
## CORS Headers
|
## CORS Headers
|
||||||
|
|
||||||
The server MUST set the `Access-Control-Allow-Origin: *` header on all responses to ensure compatibility with web applications, as specified in [BUD-01](./01.md#cross-origin-headers).
|
The server MUST set the `Access-Control-Allow-Origin: *` header on all responses to ensure compatibility with web applications, as specified in [BUD-01](../buds/01.md#cross-origin-headers).
|
||||||
|
|
||||||
## Use Cases
|
## Use Cases
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user