Zeayii.Vexo.Task.Assembly.Manifest
0.0.32
dotnet add package Zeayii.Vexo.Task.Assembly.Manifest --version 0.0.32
NuGet\Install-Package Zeayii.Vexo.Task.Assembly.Manifest -Version 0.0.32
<PackageReference Include="Zeayii.Vexo.Task.Assembly.Manifest" Version="0.0.32" />
<PackageVersion Include="Zeayii.Vexo.Task.Assembly.Manifest" Version="0.0.32" />
<PackageReference Include="Zeayii.Vexo.Task.Assembly.Manifest" />
paket add Zeayii.Vexo.Task.Assembly.Manifest --version 0.0.32
#r "nuget: Zeayii.Vexo.Task.Assembly.Manifest, 0.0.32"
#:package Zeayii.Vexo.Task.Assembly.Manifest@0.0.32
#addin nuget:?package=Zeayii.Vexo.Task.Assembly.Manifest&version=0.0.32
#tool nuget:?package=Zeayii.Vexo.Task.Assembly.Manifest&version=0.0.32
Vexo.Task.Assembly.Manifest
English | 简体中文
Organization: zeayii
Project: vexo
HLS/DASH manifest parsing and fragment metadata generation
Built for download services, cloud repackaging, offline delivery, and DRM-aware pipelines
Overview
Vexo.Task.Assembly.Manifest converts HLS (M3U8) and MPEG-DASH (MPD) manifests into unified task/stream/fragment metadata for downstream download, decryption, merge, and monitoring workflows. The module is intentionally “parse-only”: it performs no networking or persistence and relies on delegates to fetch remote content.
Highlights
- HLS master/media extraction: Parse master.m3u8, select VIDEO/AUDIO/SUBTITLE streams by strategy, expand media.m3u8 into
StreamandFragment. - DASH MPD extraction: Parse MPD XML with full Period/AdaptationSet/Representation inheritance; supports SegmentTemplate, SegmentList, and SegmentBase (+sidx).
- Pluggable stream selection: Bandwidth-first by default; customizable delegates for multilingual priorities, subtitle filtering, or bitrate caps.
- Range/index aware: Optional
FetchRangeDelegatehandles SegmentBase+sidx without hard-coding HTTP logic. - AOT/trimming friendly: No reflection or dynamic code, aligned with Media/Abstractions runtime constraints.
HLS Support Scope
- Primary target: RFC8216 core semantics and mainstream Chrome-compatible playback pipelines (including common Widevine-oriented scenarios).
- Out of scope: Safari/FairPlay-specific playback paths and Apple-private extensions are intentionally not supported in this project stage.
Layout
HLS/M3U8:Extractor: HLS extractor, parsing context, and stream selector.Schema: Master/Media playlist models.
DASH/MPD:Schema: MPD/Period/AdaptationSet/Representation and segment models (SegmentTemplate/SegmentList/SegmentBase, etc.).Extractor: DASH extractor and fragment generation pipeline.
- Root
Vexo.Task.Assembly.Manifest.csproj: Packaging/trimming settings mirroring the Media module; referencesVexo.Task.Assembly.Mediato reuse container parsing.
Design principles
- Parse-only with pluggable I/O: No built-in HTTP client. HLS uses
HlsMediaFetchDelegate; DASH usesFetchRangeDelegate. This keeps the library portable across downloaders, serverless jobs, and offline tools. - Unified metadata output: Emits
TaskWorkUnit/Stream/Fragment, making downstream pipelines share a single contract. - Spec-first, fail fast: For ambiguous or rare MPD expressions, the extractor throws (
NotSupportedException) instead of guessing. HLS candidates must carry required fields before entering selection. - Trimmable:
IsTrimmable=true, no dynamic loading, ready for AOT and size-sensitive deployments.
Key flows
HLS (HlsManifestExtractor)
- Inputs:
baseUri,masterContent,TaskWorkUnit, andHlsMediaFetchDelegate(fetches media.m3u8). - Candidate build: Parse master playlist → map to
HlsStreamContext(Variants + EXT-X-MEDIA). - Stream selection: Default
BestBandWidthStreamSelector; plug in custom selectors as needed. - Expand media playlists: Fetch each selected media.m3u8 → parse into
Stream→ emit orderedFragment(URI, duration, byte range). - Output: Populate
task.StreamGroupsfor download/assembly.
DASH (DashManifestExtractor)
- Inputs:
mpdUrl,mpdContent,TaskWorkUnit, optionalFetchRangeDelegate(for SegmentBase+sidx) andStreamSelectionDelegate. - Context build: Parse MPD → iterate Period/AdaptationSet/Representation → resolve MIME/codecs/language/resolution/bandwidth → merge BaseURL and encryption flags.
- Segment model resolution: Select SegmentTemplate/SegmentList/SegmentBase based on inheritance rules.
- Stream selection: Group by (Period + StreamType + Language) and apply selector, defaulting to highest bandwidth per group.
- Fragment generation: Yield
Fragment(timing, sequence, URL, range, encryption flag) and attach totask.StreamGroups.
Quick start
using Microsoft.Extensions.DependencyInjection;
using Vexo.Task.Assembly.Manifest.Extensions;
using Vexo.Task.Assembly.Manifest.HLS.M3U8.Extractor;
using Vexo.Task.Assembly.Manifest.DASH.MPD.Extractor;
using Vexo.Task.Assembly.Abstractions.WorkUnits;
var services = new ServiceCollection();
services.AddManifestAssemblyServices();
var provider = services.BuildServiceProvider();
var task = new TaskWorkUnitSpecBuilder { OutputDirectory = "output", SaveDirectory = "task", SaveName = "demo" };
var hls = provider.GetRequiredService<HlsManifestExtractor>();
await hls.ExtractAsync(
new Uri(task.Url),
masterContent,
task,
async (url, ct) => await httpClient.GetStringAsync(url, ct));
var dash = provider.GetRequiredService<DashManifestExtractor>();
await dash.ExtractAsync(
new Uri(task.Url),
mpdContent,
task,
fetchRangeAsync: null); // Provide when handling SegmentBase+sidx
Cooperation with other modules
- Media module: Depends on
Vexo.Task.Assembly.Mediato keep fragment descriptions aligned with actual fMP4/sidx structures. - Abstractions: Shares task/stream/fragment models from
Vexo.Task.Assembly.Abstractions, enabling reuse across Offline/Downloader/merging tools. - Pipeline fit: Typical chain—manifest extraction → container parsing → download/decrypt/remux → persist/observe.
Extensibility
- Custom selectors: Implement
HlsStreamSelectionDelegate/StreamSelectionDelegatefor locale priorities, bitrate caps, or track filtering. - Network adapters: Inject bespoke HTTP clients or caching layers via delegates for serverless or proxy-heavy environments.
- Spec coverage: To support additional MPD expressions, extend
Schemamodels and augment parsing/validation inExtractor.
Development & testing
- Build:
dotnet build Vexo.Task.Assembly.sln(requires an SDK that supportsnet10.0). - Unit/integration: Add samples for custom selectors and Range fetchers, covering common HLS/DASH playlist variants.
- Real fixtures:
Manifest.Tests/TestData/real-index-cachenow stores raw binary.mp4fixtures and tests read bytes directly (no Base64 text decoding). - Static analysis: Keep nullable and analyzer settings on to match project defaults.
License
Follows the repository root LICENSE; ensure compliance when distributing or embedding.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Zeayii.Vexo.Task.Assembly.Media (>= 0.0.32)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Zeayii.Vexo.Task.Assembly.Manifest:
| Package | Downloads |
|---|---|
|
Zeayii.Vexo.Task.Assembly.Core
Vexo Task Assembly Core orchestration for Vexo. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.0.32 | 147 | 2/20/2026 |
| 0.0.31 | 134 | 2/20/2026 |
| 0.0.30 | 133 | 2/19/2026 |
| 0.0.29 | 128 | 2/19/2026 |
| 0.0.28 | 133 | 2/19/2026 |
| 0.0.27 | 117 | 2/19/2026 |
| 0.0.26 | 122 | 2/18/2026 |
| 0.0.25 | 122 | 2/18/2026 |
| 0.0.24 | 122 | 2/17/2026 |
| 0.0.23 | 121 | 2/16/2026 |
| 0.0.22 | 122 | 2/16/2026 |
| 0.0.21 | 126 | 2/16/2026 |
| 0.0.20 | 127 | 2/15/2026 |
| 0.0.19 | 141 | 2/15/2026 |
| 0.0.18 | 148 | 1/3/2026 |
| 0.0.17 | 135 | 1/1/2026 |
| 0.0.16 | 134 | 1/1/2026 |
| 0.0.15 | 139 | 1/1/2026 |
| 0.0.14 | 134 | 12/31/2025 |
| 0.0.13 | 136 | 12/30/2025 |